VEZIVANJE PODATAKA U WINDOWS FORMAMA

ADO.NET pruža jak i fleksibilan način vezivanja podataka za svojstva kontrola. To ne moraju biti samo vidljiva svojstva kao što su Text, Items, Checked... već može biti bilo koje svojstvo kontrole. Kontrole Windows forme podržavaju dve različite vrste povezivanja podataka: prosto i složeno. Svojstva forme koja sadrže samo jednu vrednost (TextBox, Label...) su jednostavno povezane, dok svojstva koja sadrže višestruke vrednosti, kao što je lista, komboboks ili grid su složeno povezani.

PROSTO POVEZIVANJE SVOJSTAVA KONTROLE
Svako svojstvo kontrole koje sadrži jednu vrednost može biti jednostavno povezano za jednu vrednost iz izvora podataka. Pri tom se moraju definisati tri vrednosti: naziv svojstva koje hoćemo da povežemo, izvor podataka i navigacioni put u izvoru podataka koji će nam vratiti jednu vrednost. Prosto povezivanje se vrši preko svojstva kontrile DataBindings. To je kolekcija, te nove parametre dodajemo metodom Add. pr. (DataSet ds je kreiran i napunjen podacima iz tabele country)
textBox1.DataBindings.Add("Text", ds.Tables[0], "Name"); textBox2.DataBindings.Add("Text", ds.Tables[0], "capital"); textBox3.DataBindings.Add("Text", ds.Tables[0], "continent");

svojstvo textbox-a (string)

izvor podataka (object)

navigacioni put (string)

Ovde je u okviru izvora podataka pored DataSet-a navedena i konkretna tabela, pa se navigacioni put sastoji samo iz naziva kolone. U slučaju da za izvor podataka navedemo samo DataSet, navigacioni put se sastoji od imena tabele i kolone razdvojenih tačkom. Kada DataSet punimo metodom Fill tabela se automatski dodaje i puni podacima. Takva tabela dobija generičko ime Table, te bi prosto povezivanje izgledalo ovako:
textBox1.DataBindings.Add("Text", ds, "Table.capital");

Pre punjenja DataSet-a, možemo sami dodati tabelu, dati joj ime, a zatim je navesti u okviru metode Fill:
ds.Clear(); ds.Tables.Add("drzave"); adapt.Fill(ds.Tables[0]); textBox1.DataBindings.Add("Text", ds, "drzave.Name");//veličina slova nije bitna textBox2.DataBindings.Add("Text", ds, "drzave.capital");

Još jedan način za povezivanje podataka je korišćenje objekta BindingSource koji nam je dostupan u okviru Toolbox-a. Za njega su nam bitna dva svojstva: DataSource kojim se specifikuje DataSet iz koga uzimamo podatke tipa Object, i DataMember ime tabele tipa string:
bindingSource1.DataSource = ds; bindingSource1.DataMember = ds.Tables[0].TableName; label1.DataBindings.Add("Text", bindingSource1, "Name"); label2.DataBindings.Add("Text", bindingSource1, "Capital");

Ako želimo sinhronizovano prikazivanje podataka u kontrolama (da se sve vrednosti menjaju kad promenimo aktivan red u tabeli), te kontrole moraju imati identične vrednosti drugog argumenta u svojstvu DataBindings. SLOŽENO POVEZIVANJE PODATAKA Najčešći primeri kontrola za složeno povezivanje su lista, padajuća lista (ComboBox) u kojima prikazujemo sadržaj cele kolone, ili DataGridView gde prikazujemo sadržaj cele tabele. U suštini, bilo koje svojstvo koje prihvata višestruke vrednosti može biti složeno povezano. Za kontrole koje prikazuju sadržaj jedne kolone definišemo svojstvo DataSource gde navodimo izvor podataka tipa object, a zatim svojstvo DisplayMember gde navodimo ime kolone tipa string: listbox1.DataSource=ds.Tables[0]; ili korišćenjem definisanog povezivača bindingSource listbox1.DataSource= bindingSource1; a zatim navodimo ime kolone tipa string listbox1.DisplayMember="capital"; ili listbox1.DisplayMember=ds.Tables[0].Columns[2].ColumnName; Povezivanje DataGridView-a DataGridView1.DataSource=ds; DataGridView1.DataMember=ds.Tables[0]; ili korišćenjem definisanog povezivača bindingSource dovoljno je navesti samo DataSource svojstvo: DataGridView1.DataSource= bindingSource1;

KLASA BindingManagerBase I KRETANJE KROZ IZVOR PODATAKA Klasa BindingManagerBase omogućava sinhronizaciju podataka u kontrolama koje su vezane za isti izvor. Pomoću nje se možemo kretati kroz izvor podataka korišćenjem celobrojnog svojstva Position (pozicioniranje kreće od 0). To je apstraktna klasa, što znači da preko nje ne možemo kreirati objekat(ne poseduje konstruktor). Iz nje se izvodi klasa BindingContext koja kao svojstvo postoji za svaku kontrolu. Objekat BindingManagerBase pravimo tako što mu dodeljujemo vrednost svojstva BindingContext koje obično pripada nekom kontejneru. Za svaki izvor podataka za koji su povezane sinhronizovane kontrole pravi se po jedan objekat BindingManagerBase. pr. Imamo 4 textBox-a: po dva su sinhronizovana. Kroz prva dva se krećemo red po red, a kroz druga dva prikazujemo svaki drugi red:
textBox1.DataBindings.Add("Text", ds, "drzave.Name"); textBox2.DataBindings.Add("Text", ds, "drzave.capital"); textBox3.DataBindings.Add("Text", bindingSource1, "Name"); textBox4.DataBindings.Add("Text", bindingSource1,"capital"); BindingManagerBase bmb1,bmb2; bmb1 = (BindingManagerBase)BindingContext[ds.Tables[0]]; bmb2 = (BindingManagerBase)BindingContext[bindingSource1];

Bez obzira što su svi textBox-ovi povezani za istu tabelu, poseduju različito definisano svojstvo DataBindings, te su samo parovi sinhronizovani (oni sa istim svojstvom). Zbog toga pravimo 2 objekta BindingManagerBase (za svaki izvor po jedan) na gore navedeni način. Pošto BindingContext nasleđuje klasu BindingManagerBase, možemo izvršiti navedenu konverziju i dodeliti ga promenljivoj tipa BindingManagerBase. Pomeranje pozicije:
bmb1.Position += 1; bmb2.Position += 2;

Postavljanje na prvi red:
bmb1.Position = 0;

Postavljanje na poslednji red:
bmb1.Position = bmb1.Count - 1;//Svojstvo count daje ukupan broj redova u izvoru podataka

Kretanje unazad:
bmb1.Position = bmb1.Position - 1;

Na osnovu primera smo videli da u tabeli DataSeta ne postoji koncept aktivnog reda kao što to imamo na nivou same baze ili u okviru DataGridView-a. Zbog toga na tabeli možemo održavati više kursora koji se nezavisno pomeraju.

Pomeranje pomoću BindingSource objekta
Sve kontrole koje su vezane za izvor podataka preko jednog BindingSource mogu da vrše rifreš svojih podataka preko svog BindingSource-a. On poseduje mogućnost kretanja kroz izvor podataka metodama MoveNext, MovePrevious, MoveFirst, MoveLast, kao i pomoću svojstva Position:
bindingSource1.DataSource = ds; bindingSource1.DataMember = ds.Tables[0].TableName; bindingSource2.DataSource = ds; bindingSource2.DataMember = ds.Tables[0].TableName; textBox1.DataBindings.Add("Text", bindingSource1, "Name"); textBox2.DataBindings.Add("Text", bindingSource2, "Name"); bindingSource1.MoveNext();//pomera na sledeći red bindingSource2.MovePrevious();//pomera na prethodni red bindingSource1.MoveFirst();//pomera na prvi red bindingSource2.MoveLast();//pomera na poslednji red

Pomeranje pomoću BindingNavigator objekta
Prevlačenjem iz Toolbox-a na formi dobijamo navigacionu traku bindingNavigator1 gde pored kretanja kroz izvor imamo mogućnost dodavanja novih redova ili brisanje postojećih u ds-u. Vezujemo ga preko

BindingSource za izvor podataka. Efekat pomeranja kursora će biti samo na kontrolama koje su vezane za izvor preko istog BindingSource-a.

Sign up to vote on this title
UsefulNot useful