Objekat DataView sličan je objektu view u SQL Server-u s tim što objekat DataView prikazuje podatke iz samo jedne tabele. Sadrži podskup podataka iz objekta DataTable nad kojim je definisan. Kreira se korišćenjem konstruktora DataView tako što mu se kao ulazni parametar prosledi objekat DataTable koji se nalazi u DataSetu:
DataView view = new DataView(ds.Tables["Customers"]); |
Svaki objekat DataTable poseduje svojstvo DefaultView:
DataView view = ds.Tables["Customers"].DefaultView; |
Ovo svojstvo vraća DataView objekat nad tabelom koji se može iskoristiti za filtriranje i sortiranje podataka u tabeli.
DataView objekat omogućava filtriranje podataka korišćenjem svojstva RowFilter. Svojstvu RowFilter se pridružuje string koji odgovara WHERE klauzuli prilikom pisanja običnog SELECT upita sa filtriranjem podataka (npr. dvKorisnik.RowFilter = "Country = 'UK'"). Svojstvo Sort omogućava sortiranje podataka. Svojstvu Sort se pridružuje string koji odgovara klauzuli ORDER BY prilikom sortiranja podataka u običnom SELECT upitu. Svaka tabela ima DefaultView. Povezivanje podataka u Windows obrascima uvek se radi posredstvom odgovarajućeg view objekta iako se to ne naglašava uvek eksplicitno:
dataGrid1.DataSource = ds.Tables["Customers"].DefaultView; |
DataViewManager klasa predstavlja view celog DataSet-a. DataGrid je jedina Windows kontrola koja može da vrši povezivanje podataka iz celog DataSeta.
Svojstvo Table služi da se postavi ili pročita odgovarajući objekta DataTable za koji je View vezan. DataRowView predstavlja view definisan za objekat DataRow. Odnosno DataRowView se može shvatiti kao red unutar DataView objekta.Metoda Find() objekta DataView nalazi vrstu u odgovarajućem objektu DataView sa specificiranom vrednošću atributa po kome se sortira. Metoda Find vraća indeks vrste koja odgovara traženom kriterijumu.
DataView dvKorisnik = new DataView(myDataSet.Tables["Customers"]); dvKorisnik.RowFilter = "Country = 'UK'"; dvKorisnik.Sort = "CustomerID ASC"; int indeksVrste = dvKorisnik.Find("ISLAT"); Console.WriteLine(dvKorisnik[indeksVrste][0]); Console.WriteLine(dvKorisnik[indeksVrste][1]); foreach (DataRowView mojDataRowView in dvKorisnik) { for (int count = 0; count < dvKorisnik.Table.Columns.Count; count++) { Console.WriteLine(mojDataRowView[count]); } Console.WriteLine(""); } |
Kreiran je objekat DataView nad tabelom Customers koja se nalazi u DataSetu. DataView prikazuje samo one redove tabele Customers kod kojih atribut Country ima vrednost UK. Redovi se prikazuju sortirani po atributu CustomerID u rastućem poretku. Korišćenjem metode Find objekta DataView traži se indeks reda u objektu DataView kod koga je vrednost atributa CustomerID jednaka ISLAT. Odgovarajućem DataRowView objektu se pristupa korišćenjem izraza dvKorisnik[indeksVrste] gde je indeksVrste vrednost koju je vratila metoda Find. Prvom atributu ovog DataRowView objekta pristupa se korišćenjem izraza dvKorisnik[indeksVrste][0], drugom dvKorisnik[indeksVrste][1] itd. Broj kolona tabele nad kojom je View definisan može se dobiti korišćenjem izraza dvKorisnik.Table.Columns.Count jer svojstvo Table vraća odgovarajući DataTable objekat koji ima Column kolekciju. Broj članova kolekcije Columns se dobija korišćenjem svojstva Count a to je ujedno i broj kolona te tabele odnosno objekta DataView koji je nad njom definisan.
DataView pogled2 = new DataView(myDataSet.Tables["Customers"]); Console.WriteLine(vrsta["CustomerID"].ToString() + " odgovara."); |
Ova metoda vraća niz objekata DataRowView koji odgovaraju zadatoj vrednosti atributa po kome se vrši sortiranje objekta DataView. Za kretanje kroz ovaj skup DataRowView objekata može se iskoristiti foreach naredba na način predstavljen na slajdu. U primeru se štampa atribut CustomerID za sve vrste iz DataView-a koje odgovarju kriterijumu traženja.
DataView dvKorisnik = new DataView(); dvKorisnik.Table = tabelaKorisnik; dvKorisnik.RowFilter = "Country = 'UK'"; // dodaj novi DataRowView //-------------------------------------------------- DataRowView korisnikDRV = dvKorisnik.AddNew(); korisnikDRV.BeginEdit(); korisnikDRV["CustomerID"] = "J7COM"; korisnikDRV["CompanyName"] = "J7 Company"; korisnikDRV["Country"] = "UK"; Console.WriteLine("korisnikDRV.IsNew = " + korisnikDRV.IsNew); Console.WriteLine("korisnikDRV.IsEdit = " + korisnikDRV.IsEdit); korisnikDRV.EndEdit(); prikazi(dvKorisnik); |
Dodavanje redova u DataTable objekat je moguće uraditi kroz DataView. To se postiže dodavanjem objekta DataRowView u objekat DataView. Pozivanjem metode AddNew objekta DataView kreira se objekat DataRowView čija je šema identična šemi odgovarajućeg DataView objekta. Objekat DataRowView ima metodu BeginEdit koja ozbačava da se objekat nalazi u režimu editovanja. Ukoliko želimo da sačuvamo promenu u DataRowView objektu na kraju editovanja pozivamo metodu EndEdit ili CancelEdit ukoliko želimo da poništimo promene.
// EDITOVANJE PRVE VRSTE dvKorisnik[0].BeginEdit(); dvKorisnik[0]["CompanyName"] = "Link group."; Console.WriteLine("dvKorisnik[0][" CustomerID"] = " + dvKorisnik[0]["CustomerID"]); Console.WriteLine("dvKorisnik[0][" CompanyName"] = " + dvKorisnik[0]["CompanyName"]); Console.WriteLine("dvKorisnik[0].IsNew = " + dvKorisnik[0].IsNew); Console.WriteLine("dvKorisnik[0].IsEdit = " + dvKorisnik[0].IsEdit); dvKorisnik[0].EndEdit(); prikazi(dvKorisnik); |
Odgovarajućem DataRowView objektu koje se nalazi unutar DataView objekta pristupamo na osnovu indeksa vrste. Indeks može biti definisan ukoliko se unapred zna indeks vrste koju treba editovati ili se može naći na osnovu nekog kriterijuma koristeći metodu Find objekta DataView na već opisani način. Posle pozicioniranja na odgovarajući red pristupa se editovanju željenih atributa npr. dvKorisnik[0]["CompanyName"] ="Link group." tj. atribut CompanyName prve vrste u DataView objektu dobija novu vrednost Link group. Pre početka editovanja poziva se metoda BeginEdit a po završetku editovanja metoda EndEdit.
dvKorisnik.Delete(1); Console.WriteLine("dvKorisnik[1].IsNew = " + dvKorisnik[1].IsNew); Console.WriteLine("dvKorisnik[1].IsEdit = " + dvKorisnik[1].IsEdit); prikazi(dvKorisnik); |
Da bi se izbrisao DataRowView objekat iz objekta DataView poziva se Delete metoda objekta DataView i prosleđuje joj se kao parametar indeks vrste koju treba obrisati. Indeks može biti definisan ukoliko se unapred zna indeks vrste koju treba obrisati ili se može naći na osnovu nekog kriterijuma koristeći metodu Find objekta DataView na već opisani način.