DataTable.Clone() Hakkında

15 02 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);
}

Advertisements

Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: