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 klasie
to 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 string
połą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; ///Ok to by było na tyle w tym odcinku./// 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 } } }
Jeśli będziecie mieć jakieś pytania to śmiało piszcie!!
Brak komentarzy:
Prześlij komentarz