Dzisiaj będzie kontynuacja wątku o bazie danych. Pokażemy sobie jak zrobić możliwość
edycji naszych danych.
No to do dzieła!
Przeciągamy z ToolBoxa button i zmieniamy mu "content" w kodzie XAML na Edytuj,
oraz "Name" na "btnEdit".
Ok. jeśli dołożyliśmy nasz button i zmieniliśmy jego parametry, to klikamy dwa razy
na niego i przechodzi do zdarzenia kliknięcia.
Tam stworzymy nowy obiekt klasy Baza oraz wywołamy metodę "EditaData" do, której
przekażemy parametry takie jak: nazwę naszej kontrolki DataGridView, numer wiersza do
edycji, nazwę naszego textBoxa z imieniem, oraz nazwę textBoxa z nazwiskiem.
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
Baza b1 = new Baza(@"Data Source = Baza.sdf");
b1.EditData(dg, numerWiersza, txtImie.Text, txtNazwisko.Text);
MessageBox.Show("Edytowano");
b1.UpdateGrid(dg);
}
Ok. Jak widać dzięki temu że cały kod metody do edycji jest zawarty w naszej klasieto w zdarzeniu nasz kod sprowadza się raptem do 4 linijek.
Co my tu mamy?.
Tworzymy nowy obiekt klasy Baza gdzie w konstruktorze przekazujemy ścieżkę
do naszej bazy danych. Następnie wywołujemy metodę, która woła aby jej zapodać
nazwę naszej kontrolki DataGridView, numer wiersza jaki został wybrany mychą,
textBox w który wpisujemy Imię oraz drugi z Nazwiskiem. Ostatnia linijka to funkcja
która robi update naszej kolekcji w gridzie.
Ok teraz przejdźmy do naszej klasy Baza.
W kodzie naszej klasy dodajemy metodę EdytujDane, której nadajemy atrybut public
oraz nie zwracamy nic czyli typ void.
public void EditData(DataGrid dg, int RowNumber, string imie, string nazwisko)
{
SqlCeConnection cn = new SqlCeConnection(_conn);
da = new SqlCeDataAdapter();
da.UpdateCommand = new SqlCeCommand("UPDATE Pracownicy SET Imie=@Imie, Nazwisko=@Nazwisko WHERE ID = @ID", cn);
da.UpdateCommand.Parameters.Add("@Imie", SqlDbType.NVarChar).Value = imie;
da.UpdateCommand.Parameters.Add("@Nazwisko", SqlDbType.NVarChar).Value = nazwisko;
da.UpdateCommand.Parameters.Add("@ID",SqlDbType.Int).Value = RowNumber;
cn.Open();
da.UpdateCommand.ExecuteNonQuery();
cn.Close();
}
W pierwszej kolejności tworzymy obiekt cn, gdzie w konstruktorze przekazujemy stringpołączenia z bazą, również tworzymy obiekt typu DataAdapter - obiekt ten reprezentuje zestaw
poleceń do połączenia z bazą danych jak również manipulacji na tychże danych.
W następnej linijce wywołujemy zapytanie query do naszej bazy danych, gdzie ustawiamy
do Imienia przypisujemy zmienną Imię a do Nazwiska nazwisko.
W następnych linijka jest do naszych edytowanych wierszy przekazywana wartość imienia i nazwiska
które są parametrem metody. dalej otwieramy połączenie, wykonujemy polecenie query i natychmiast
połączenie to zamykamy.
Zrobiłem jeszcze małą modyfikację poprzednich metod, wywaliłem z tamtą odświeżanie
grida i zrobiełm z tego metodę, którą wywołujemy po dodaniu, usunięciu czy edycji danych.
public void UpdateGrid(DataGrid dg)
{
da = new SqlCeDataAdapter();
dt = new DataTable();
dg.ItemsSource = dt.DefaultView;
da.Update(dt); //update grida
}
Całość teraz wygląda tak:
Kod klasy Baza.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;
using System.Windows;
using System.Windows.Controls;
namespace WPF_Baza
{
public class Baza
{
private static string _conn;
public SqlCeDataAdapter da;
public DataTable dt;
///
/// konstruktor
///
///
public Baza(string conn)
{
_conn = conn;
}
///
/// dodawanie danych do bazy
///
public void InsertData(string Imie, string Nazwisko)
{
SqlCeConnection cn = new SqlCeConnection(_conn);
da = new SqlCeDataAdapter();
da.InsertCommand = new SqlCeCommand("INSERT INTO Pracownicy(Imie, Nazwisko) VALUES(@Imie, @Nazwisko)", cn);
da.InsertCommand.Parameters.Add("@Imie", SqlDbType.NVarChar).Value = Imie;
da.InsertCommand.Parameters.Add("@Nazwisko", SqlDbType.NVarChar).Value = Nazwisko;
cn.Open();
da.InsertCommand.ExecuteNonQuery();
cn.Close();
MessageBox.Show("Dodano do bazy!");
}
///
/// wyświetlanie danych z bazy
///
public void ShowData(DataGrid dg)
{
SqlCeConnection cn = new SqlCeConnection(_conn);
dt = new DataTable();
da = new SqlCeDataAdapter();
da.SelectCommand = new SqlCeCommand("SELECT * FROM Pracownicy", cn);
dt.Clear();
da.Fill(dt);
dg.ItemsSource = dt.DefaultView;
da.Update(dt);
}
///
/// usuwanie danych z bazy
///
public void DeleteData(DataGrid dg, int RowNumber)
{
SqlCeConnection cn = new SqlCeConnection(_conn);
da = new SqlCeDataAdapter();
da.DeleteCommand = new SqlCeCommand("DELETE FROM Pracownicy WHERE ID = @ID", cn);
da.DeleteCommand.Parameters.Add("@ID", SqlDbType.Int).Value = RowNumber; //usunięcie numeru wiersza przekazanego jako parametr do metody
cn.Open();
da.DeleteCommand.ExecuteNonQuery();
cn.Close();
}
public void EditData(DataGrid dg, int RowNumber, string imie, string nazwisko)
{
SqlCeConnection cn = new SqlCeConnection(_conn);
da = new SqlCeDataAdapter();
da.UpdateCommand = new SqlCeCommand("UPDATE Pracownicy SET Imie=@Imie, Nazwisko=@Nazwisko WHERE ID = @ID", cn);
da.UpdateCommand.Parameters.Add("@Imie", SqlDbType.NVarChar).Value = imie;
da.UpdateCommand.Parameters.Add("@Nazwisko", SqlDbType.NVarChar).Value = nazwisko;
da.UpdateCommand.Parameters.Add("@ID",SqlDbType.Int).Value = RowNumber;
cn.Open();
da.UpdateCommand.ExecuteNonQuery();
cn.Close();
}
public void UpdateGrid(DataGrid dg)
{
da = new SqlCeDataAdapter();
dt = new DataTable();
dg.ItemsSource = dt.DefaultView;
da.Update(dt); //update grida
}
}
}
Ok to by było na tyle w tym odcinku.Jeśli będziecie mieć jakieś pytania to śmiało piszcie!!
Brak komentarzy:
Prześlij komentarz