DataSet içerisinde birden fazla tablo olduğu zaman her tablo için ayrı ayrı DataView nesneleri oluşturup tablo verilerini sorgulamak yerine tüm tablolar için ortak bir sorgulama hazırlamak daha mantıklı olacaktır. Bu işlem için DataSet nesnesinin DataViewManager türünde değer döndüren DefaultViewManager özelliği kullanılır. DataViewManager nesnesi, DataView nesnelerinin bulunduğu koleksiyon için tek bir sorgulama nesnesi oluşturur.
DataViewManager nesnesi, DataSet içerisindeki DataTableCollection koleksiyonundaki tabloları, DataViewSetting denilen nesneler üzerinde sorgular. DataViewSetting nesnesini, her tablo için çalışan DataView nesnelerinin konfigürasyonu olarak düşünebiliriz. Bu nesne üzerinden her tablo için, Sort, RowFilter, RowStateFilter ayarları yapılır.
DataViewManager nesnesi daha çok ilişkili tablolar içeren DataSet yapılarının kullanıldığı windows uygulamalarında büyük kolaylık sağlar. Aşağıdaki şekil, DataSet ve DataViewManager ilişkisini göstermektedir.
DataViewManager nesnesinin önemli üyeleri şunlardır;
- DataSet:
- DataViewSettings:
- CreateDataView():
DataViewManager nesnesinin ilişkili olduğu DataSet nesnesini belirtir.
DataSet içinde her tablo için oluşturulmuş DataViewSettingCollection koleksiyonunu döndürür.
Belirlenmiş bir tablo için DataView nesnesi oluşturur.
Örnek olarak Musteri ve Siparis isminde iki tablo oluşturalım.
'DataSet nesnesi oluşturalım Dim oDs As New DataSet() 'Musteri isminde tablo oluşturalım. Dim oDt As New DataTable("Musteri") 'Musteri tablosunda MusteriId, AdSoyad kolonlarını oluşturalım. Dim oDc As New DataColumn("MusteriId", System.Type.GetType("System.Int32")) oDc.AutoIncrement = True oDc.AutoIncrementSeed = 1 oDt.Columns.Add(oDc) '2.Kolon (AdSoyad kolonu) oDt.Columns.Add("AdSoyad", System.Type.GetType("System.String")) 'Tabloda iki kayıt girelim Dim oDr As DataRow = oDt.NewRow() oDr("AdSoyad") = "Ali Korkmaz" oDt.Rows.Add(oDr) '2.kayıt oDr = oDt.NewRow() oDr("AdSoyad") = "Ayşe Korkmaz" oDt.Rows.Add(oDr) 'Musteri tablosunu DataSet içerisine ekleyelim. oDs.Tables.Add(oDt) 'Siparis tablosunu oluşturalım oDt = New DataTable("Siparis") 'Siparis tablosunda SiparisId,MusteriId,UrunId,Adet,Tarih kolonlarını oluşturalım. oDc = New DataColumn("SiparisId", System.Type. GetType("System.Int32")) oDc.AutoIncrement = True oDc.AutoIncrementSeed = 1 oDt.Columns.Add(oDc) oDt.Columns.Add("MusteriId", System.Type.GetType("System.Int32")) oDt.Columns.Add("UrunId", System.Type.GetType("System.Int32")) oDt.Columns.Add("Adet", System.Type.GetType("System.Int32")) oDt.Columns.Add("Tarih", System.Type.GetType("System.DateTime")) 'Tarih kolonu için default değer tanımlayalım oDt.Columns("Tarih").DefaultValue = DateTime.Now 'Siparis tablosuna kayıtlar girelim oDr = oDt.NewRow() oDr("MusteriId") = 1 'Ali Korkmaz oDr("UrunId") = 10 '10 numaralı ürün oDr("Adet") = 2 oDr("Tarih") = "01/01/2007" oDt.Rows.Add(oDr) oDr = oDt.NewRow() oDr("MusteriId") = 1 'Ali Korkmaz oDr("UrunId") = 12 '12 numaralı ürün oDr("Adet") = 3 oDr("Tarih") = "01/01/2007" oDt.Rows.Add(oDr) oDr = oDt.NewRow() oDr("MusteriId") = 2 'Ayşe Korkmaz oDr("UrunId") = 10 '10 numaralı ürün oDr("Adet") = 1 oDt.Rows.Add(oDr) 'Siparis tablosunu DataSet içerisine ekleyelim. oDs.Tables.Add(oDt)
//DataSet nesnesi oluşturalım DataSet oDs = new DataSet(); //Musteri isminde tablo oluşturalım. DataTable oDt = new DataTable("Musteri"); //Musteri tablosunda MusteriId, AdSoyad kolonlarını oluşturalım. DataColumn oDc = new DataColumn("MusteriId", System.Type.GetType("System.Int32")); oDc.AutoIncrement = true; oDc.AutoIncrementSeed = 1; oDt.Columns.Add(oDc); //2.Kolon (AdSoyad kolonu) oDt.Columns.Add("AdSoyad", System.Type.GetType("System.String")); //Tabloda iki kayıt girelim DataRow oDr = oDt.NewRow(); oDr["AdSoyad"] = "Ali Korkmaz"; oDt.Rows.Add(oDr); //2.kayıt oDr = oDt.NewRow(); oDr["AdSoyad"] = "Ayşe Korkmaz"; oDt.Rows.Add(oDr); //Musteri tablosunu DataSet içerisine ekleyelim. oDs.Tables.Add(oDt); //Siparis tablosunu oluşturalım oDt = new DataTable("Siparis"); //Siparis tablosunda SiparisId,MusteriId,UrunId,Adet,Tarih kolonlarını oluşturalım. oDc = new DataColumn("SiparisId", System.Type.GetType("System.Int32")); oDc.AutoIncrement = true; oDc.AutoIncrementSeed = 1; oDt.Columns.Add(oDc); oDt.Columns.Add("MusteriId", System.Type.GetType("System.Int32")); oDt.Columns.Add("UrunId", System.Type.GetType("System.Int32")); oDt.Columns.Add("Adet", System.Type.GetType("System.Int32")); oDt.Columns.Add("Tarih", System.Type.GetType("System.DateTime")); //Tarih kolonu için default değer tanımlayalım oDt.Columns["Tarih"].DefaultValue = DateTime.Now; //Siparis tablosuna kayıtlar girelim oDr = oDt.NewRow(); oDr["MusteriId"] = 1; //Ali Korkmaz oDr["UrunId"] = 10; //10 numaralı ürün oDr["Adet"] = 2; oDr["Tarih"] = "01/01/2007"; oDt.Rows.Add(oDr); oDr = oDt.NewRow(); oDr["MusteriId"] = 1; //Ali Korkmaz oDr["UrunId"] = 12; //12 numaralı ürün oDr["Adet"] = 3; oDr["Tarih"] = "01/01/2007"; oDt.Rows.Add(oDr); oDr = oDt.NewRow(); oDr["MusteriId"] = 2; //Ayşe Korkmaz oDr["UrunId"] = 10; //10 numaralı ürün oDr["Adet"] = 1; oDt.Rows.Add(oDr); //Siparis tablosunu DataSet içerisine ekleyelim. oDs.Tables.Add(oDt);
DataViewManager nesnesini kullanarak her tablo için ayrı veya ortak ayarlar belirleyelim.
'Her tablo için DataView özelliklerini belirleyelim 'Bunun için DataViewManager nesnesi oluşturulur Dim oDvm As New DataViewManager(oDs) 'DataViewSettings koleksiyonunu döngüye alıp 'her tablo için Sort ve RowFilter kriterlerini belirleyelim Dim oTbName As String = "" For Each oDvs As DataViewSetting In oDvm.DataViewSettings 'Default sıralama özelliğini belirleyelim 'Bütün tablolar için sıralama Birincil anahtar üzerinden yapılacak. oDvs.ApplyDefaultSort = True 'Her tabloya özgü Sort ve RowFilter belirleyelim oTbName = oDvs.Table.ToString() If oTbName = "Musteri" Then oDvs.Sort = "AdSoyad DESC" End If 'Veya tek satırda tanımlama yapabiliriz. 'oDvm.DataViewSettings("Musteri").Sort = "AdSoyad DESC" If oTbName = "Siparis" Then oDvs.RowFilter = "Tarih='01.01.2007'" End If Next 'DataViewManager nesnesinin, tablolara uyguladığı seçenekler Console.WriteLine(oDvm.DataViewSettingCollectionString)
//Her tablo için DataView özelliklerini belirleyelim //Bunun için DataViewManager nesnesi oluşturulur DataViewManager oDvm = new DataViewManager(oDs); //DataViewSettings koleksiyonunu döngüye alıp //her tablo için Sort ve RowFilter kriterlerini belirleyelim string oTbName=""; foreach (DataViewSetting oDvs in oDvm.DataViewSettings) { //Default sıralama özelliğini belirleyelim //Bütün tablolar için sıralama Birincil anahtar üzerinden yapılacak. oDvs.ApplyDefaultSort = true; //Her tabloya özgü Sort ve RowFilter belirleyelim oTbName = oDvs.Table.ToString(); if (oTbName == "Musteri") { oDvs.Sort = "AdSoyad DESC"; } //Veya tek satırda tanımlama yapabiliriz. //oDvm.DataViewSettings["Musteri"].Sort = "AdSoyad DESC"; if (oTbName == "Siparis") { oDvs.RowFilter = "Tarih='01.01.2007'"; } }//foreach //DataViewManager nesnesinin, tablolara uyguladığı seçenekler Console.WriteLine(oDvm.DataViewSettingCollectionString);
RowFilter=""
RowStateFilter="CurrentRows"/>
RowFilter="Tarih='01.01.2007'"
RowStateFilter="CurrentRows"/>
DataViewManager nesnesi üzerinden tanımlanmış ayarlar doğrultusunda Siparis tablosunun kayıtlarını listeleyelim. SettingCollectionString değerinden de görüleceği gibi Siparis tablosunda sadece Tarih alanı, “01.01.2007¨ olan kayıtlar listelenecektir.
'Siparis tablosu için DataView oluşturalım. 'Bu işlemi oDvm üzerinden yaptığımız için yukarıdaki RowFilter, Sort işlemlerini tabloya uyguladıktan sonra tablodan view oluşturur. Dim tbSiparis As DataTable = oDs.Tables("Siparis") Dim oSDv As DataView = oDvm.CreateDataView(tbSiparis) 'View'deki satırları listeyelim For Each oDrv As DataRowView In oSDv For i As Integer = 0 To oSDv.Table.Columns.Count - 1 Console.WriteLine(oSDv.Table.Columns(i).ColumnName _ & ": " & oDrv(i)) Next Console.WriteLine() Next
//Siparis tablosu için DataView oluşturalım.
//Bu işlemi oDvm üzerinden yaptığımız için yukarıdaki RowFilter, Sort işlemlerini tabloya uyguladıktan sonra tablodan view oluşturur.
DataTable tbSiparis = oDs.Tables[“Siparis”];
DataView oSDv = oDvm.CreateDataView(tbSiparis);
//View’deki satırları listeyelim
foreach (DataRowView oDrv in oSDv) {
for (int i = 0; i
SiparisId: 1
MusteriId: 1
UrunId: 10
Adet: 2
Tarih: 01.01.2007 00:00:00
SiparisId: 2
MusteriId: 1
UrunId: 12
Adet: 3
Tarih: 01.01.2007 00:00:00