DataView Sınıfı
DataView sınıfı Ado.Net içerisinde performası açısından önemli bir yere sahiptir. DataView nesnesini Sql Server’da bulunan View nesneleri göz önüne alınarak oluşturulan bir sınıftır. Bilindiği gibi view’ler önceden derlenen nesneler oldukları için performansı çok yüksektir. Ado.Net tarafında da DataView nesneler performans ve hız açısından avantajlıdır. DataView nesnesini kullanabilmek için DataTable nesnesine ihtiyacımız olduğunu da belirteyim. Bunu Sql Server’da bulunan tablolara benzetebilirsiniz. Eğer bu makaleyi okuyorsanız View ve Tablo arasındaki ilişkiyi biliyorsunuz demektir. DataView nesnemizi RowFilter özelliği sayesinde filtreleyebiliyoruz. RowFilter özelliğinde filtrede kullanılacak alanların veri tipine göre bazı semboller kullanmamız gerekmektedir. Aşağıdaki tabloda hangi veri tipinde hangi sembollerin kullanılacağı belirtilmiştir.
Veri Tipi | Karakter | Örnek |
Metinsel Alanlar İçin | ‘(Tek Tırnak) | il=’İstanbul’ |
Tarihsel Alanlar için | # | FaturaTarihi=#01/01/2014# |
Sayısal Alanlar İçin | Özel karakter yok | Tutar>=250 |
T-Sql tarafında kullanmış olduğumuz IN,LIKE gibi filtremele kelimelerini de kullanabiliriz. Tabi ki and,or ile mantıksal birleştirmeler de yapabiliriz.
Ben örneğimde AdventureWorks veritabanının Production.Product tablosunu kullanarak tek bir DataTable veri çekip 3 farklı DataView oluşturarak 3 farklı görünüm elde etmiş olacağım. Örneğimde RowFilter kullanımını da göstereceğim.
[csharp]
string db = "Data Source=.;Initial Catalog=AdventureWorks2012;User ID=sa;Password=1";
SqlConnection con = new SqlConnection(db);
SqlDataAdapter da = new SqlDataAdapter("select ProductID,Name,ListPrice,SellStartDate from Production.Product", con);
DataTable dt = new DataTable();
da.Fill(dt);
//1. Default View Kullanımı
DataView dv_TumUrunler = dt.DefaultView;
//Oluşturulan DataTable’nin varsayılan olarak oluşturulan view’ini veriyorum. DataTable’de bulunan tüm kayıtlar varsayılan DefaultView’de tutulmaktadır.
grdData1.DataSource = dv_TumUrunler;
//2. Satışa Çıkış Tarihi 01.01.2005 yılından büyük olan kayıtların bulunduğu bir DataView oluşturuyorum.
DataView dv_TarihFiltreli = new DataView(dt);
dv_TarihFiltreli.RowFilter = "SellStartDate>=#01.01.2005#";
grdData2.DataSource = dv_TarihFiltreli;
//3. DataTable nesnemizde bulunan kayıtları bu sefer oluşturacağımız DataView ile Satışa çıkış tarihine göre ters sıralayacağız.
DataView dv_UrunKoduAd = new DataView(dt);
dv_UrunKoduAd.Sort = "SellStartDate DESC";
grdData3.DataSource = dv_UrunKoduAd;
//4. Ürün Adı sadece S ile başlayan kayıtlarımızı gösterelim.
DataView dv_SileBaslayanlar = new DataView(dt);
dv_SileBaslayanlar.RowFilter="Name Like ‘S*’";
grdData4.DataSource=dv_SileBaslayanlar;
[/csharp]
Faydalı olması dileğiyle…