You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nepracuji s DB na serveru, kopie DB v paměti aplikace, po skončení odešleme změny do DB
Komfortnější práce s daty
Vhodné jsou tabulky, které často používám
ORM (objektově relační mapování)
Připojený režim - přímý - SQL přístup
Odpojený režim - paměťový - objektový přístup
Adapter - zprostředkuje komunikaci mezi DB a lokální sadou. Pracuje buďto v metodě FILL (naplní lokální sadu), nebo v metodě UPDATE (synchronizace)
Pro práci v odpojeném režimu používáme:
třídu DataSet - lokální sada
třídu DataTable - lokální tabulky
Musíme mít připojený namespace System.Data
Vytvoření lokální sady
V aplikaci přidám nový Item DataSet pomocí Add > New Item a pojmenuju ho LokalniSada
Přetáhneme tabulky z DB Server Exploreru do tabulky pomocí Project > NewItem
Vytvoříme si pomocnou třídu, ve které budou vnořené třídy pro konverzi pomocí ToString() pro každou tabulku zvlášť
partialclassLokalniSada{// Vnořená třida pro KnihapartialclassKnihaRow{// Upravení metody ToStringpublicoverridestringToString(){returnAutor_prijmeni+" "+Nazev+" "+PocetKs;}}partialclassPujckyRow{// Upravení metody TostringpublicoverridestringToString(){returnZakaznik_prijmeni+" "+Datum_vypujceni;}}}
Metoda pro zobrazení bez toString
privatevoidBtnZobtaz_Click(objectsender,EventArgse){// Zobrazení knih// Nejdřív LBX vymažemeLbxKniha.Items.Clear();// Postupnë procházim jednotlivé položky (řádky) lokálni tabulkyforeach(LokalniSada.KnihaRowkinsada.Kniha){stringzaznam=k.Autor_prijmeni+"\t "+k.Nazev+"\t "+k.PocetKs;LbxKniha.Items.Add(zaznam);}// Zobrazení z PůjčekLbxPujcky.Items.Clear();foreach(LokalniSada.PujckyRowpinsada.Pujcky){stringzaznam=p.Zakaznik_prijmeni+"\t"+p.Datum_vypujceni;LbxPujcky.Items.Add(zaznam);}}
// Instance Ls a adapterLokalniSadasada=newLokalniSada():LokalniSadaTableAdapters.KnihaTableAdapter adapterkniha =newLokalniSadaTableAdapters.KnihaTableAdapter();Lokalnisada.KnihaDataTabletabulkaKnihy;// Lokalní tabulkaprivatevoidForm1_Load(objectsender,EventArgse){// Naplnění lokalní sadytabulkaKnihy=sada.Kniha;// Do lokalni tabulky přiřadím hodnoty z LS Kniha// Naplnění přes adapter použijí metodu FilladapterKniha.Fill(tabulkaKnihy);// Zobrazime hodnoty v ListBoxuLbxKnihovna.Items.AddRange(tabulkaKnihy.ToArray());}
Přídání nového záznamu do lokální tabulky
privatevoidBtnNovy_Click(objectsender,EventArgse){// Přidání nového záznamuLokalniSada.KnihaRownovyZaznam=tabulkaKnihy.AddKnihaRow("Božena","Němcová","Babička",2,1999);LbxKnihovna.Items.Add(novyZaznam);}
Update již existujícího záznamu
privatevoidBtnZmena_click(objectsender,EventArgse){// Změníme nějakou hodnotu u vybrané položky// Kontrola zda je v listboxu vybraná položka, pokud ne zobrazí se info v messageboxif(LbxKnihovna.SelectedItem==null)MessageBox.Show("nutno vybrat položku ze seznamu");// Vybranou položku přiřadíme do proměnnéLokalniSada.KnihaRowvybranaKniha(LokalniSada.KnihaRow)LbxKnihovna.SelectedItem;// Měníme název Knihy na POKUSvybranaKniha.Nazev="POKUS";// Aby se projevila změna v listboxu tak ho musime znovu přepsat// Zjistíme indexintindex=LbxKnihovna.SelectedIndex;LbxKnihovna.Items[index]=Lbxknihovna.Items[index];}
Smazání záznamu
Mažeme vybranou položku
privatevoidBtnvymaz_click(objectsender,EventArgse){// Vymažeme položku, kterou v LBX vybereme// Pokud nemáme nic vybráno zobrazí se info v messageboxif(LbxKnihovna.SelectedItem==nul11)MessageBox.Show("vyberte položku v seznamu");else{// Mám něco vybrané// Zapíši vybranou hodnotu do proměnnéLokalniSada.KnihaRowvybranyZaznam=(LokalniSada.KnihaRow)LbxKnihovna.SelectedItem;// Smazání z lokální tabulkyvybranyzaznam.Delete();// Odstranění z lbxLbxKnihovna.Items.Remove(vybranyZaznam);}}
Zkontrolujeme jestli se vybraná položka opravdu smazala
privatevoidBtnPosmazani_Click(objectsender,EventArgse){// Kontrola počtu řádků v tabulce lokálníMessageBox.Show("počet záznamů v tabulce: "+tabulkaKnihy.Rows.Count);// Zobrazení do messageboxu záznamystringzaznam="";foreach(LokalniSada.KnihaRowzintabulkaKnihy)// Při zobrazování hodnot v MessageBox se zobrazí chybové hlášení, protože v LT se smazaná hodnota označí, ale nesmaže => nejde zobrazit// Ošetříme podmínkouif(z.RowState!=DataRowState.Deleted)zaznam+=z+Environment.NewLine;MessageBox.Show(zaznam);}
Filtrování dat v tabulce
publicpartialclassForm1:Form{LokalniSadasada=newLokalniSada();// Instance lokalni sady// Instance adapteruLokalniSadaTableAdapters.KnihaTableAdapteradapterKniha=newLokalniSadaTableAdapters.KnihaTableAdapter();// Proměnná pro lokální tabulkuLokalniSada.KnihaDataTabletabulkaKniha=newLokalnisada.KnihaDataTable();publicForm1(){InitializeComponent();}// Stáhnu celou tabulku do LS a filtruji až tamprivatevoidBtnLs_Click(objectsender,EventArgse){// Naplnění tabulkyadapterkniha.Fill(tabulkaKniha);// Chci zobrazit V lbx pouze knihy se zadanym nazvem ve formustringnazev=TxtNazev.Text;// Knížek může byt více tak to přidám postuně do poleDataRow[]vybrane=tabulkaKniha.Select("Nazev ='"+nazev+"'","PocetKs");LbxKniha.Items.Clear();LbxKniha.Items.AddRange(vybrane);}}
Filtr na serveru
Pro úpravu lokální sady kliknu na tabulku poté Add > Query..., až se proklikám až k oknu dotazem přepíšu select a pojmenuji metodu jako FillByNazev
privatevoldBTNServer_click(objectsender,EventArgse){stringnazev=TxtNazev.Text;// Naplnění tabulkyadapterkniha.FillByNazev(tabulkaKniha,nazev);LbxKniha.Items.Clear();// Zobrazení tabulkyLbxKniha.Items.AddRange(tabulkaKniha.ToArray());// V listboxu zobrazim LT}