DataTable.Clone() Hakkında

February 15, 2007

Belki geç kalmış bir bilgi ama yakın zamanda başıma geldiği için dikkat çekmek istedim,

Diyelim ki içinde veriler bulunan bir tabloyu çoğaltmak için DataTable.Clone() + ImportRow() yapmak istiyorsunuz, böyle bir durumda bu DataTable örneğine ait DefaultView (yani varsayılan DataView) e atanmış bir filtre (DataView.RowFilter) tanımlanmışsa bu filtrenin klonlanarak oluşturulmuş yeni DataTable'da yer almayacağını unutmamalısınız...

Örneğin : DataTable dtOrijinal = new DataTable(); ... dtOrijinal.DefaultView.RowFilter = "Isim = 'Ahmet'"; Console.WriteLine("Orijinal Filtre: " + dtOrijinal.DefaultView.RowFilter); ... DataTable dtClone = dtOrijinal.Clone(); Console.WriteLine("Klonun Filtresi: " + dtClone.DefaultView.RowFilter); şeklindeki bir kod parçacığı...

Orijinal Filtre: Isim = 'Ahmet' Klonun Filtresi:
şeklinde bir çıktı oluşturur.

Kısaca belirtmek gerekirse klonlar veriyi içermediği gibi filtreleri de içermiyor!

Ek olarak filtrelenmiş bir DataTable'ın satırları içinde dolaşırken filtre dışında kalan satırlara da ulaşırsınız. Dolayısıyla filtre edilmiş bir DataTable'daki verileri bir klona aktarırken satırları değil de DefaultView satırlarını dolaşmalısınız.

Örneğin sadece filtre kuralına uyan satırları import etmek istenen bir durumda aşağıdaki kod parçası istenen sonucu üretmez: foreach (DataRow dr in dtOrijinal.Rows) { this.dtClone.ImportRow(dr); } ...ama aşağıdaki kod parçası ile sadece filtre kuralıana uyan satırlar alınabilir: foreach (DataRowView drv in this.dtOrijinal.DefaultView) { this.dtClone.ImportRow(drv.Row); }

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading