DataViewManager Nesnesi

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:
  • DataViewManager nesnesinin ilişkili olduğu DataSet nesnesini belirtir.

  • DataViewSettings:
  • DataSet içinde her tablo için oluşturulmuş DataViewSettingCollection koleksiyonunu döndürür.

  • CreateDataView():
  • 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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir