2009-04-20 4 views

答えて

36
dt = DataView.ToTable() 

OR

dt = DataView.Table.Copy()

OR

dt = DataView.Table.Clone()

+1

おかげで、Googleがかなりひどく私を失敗していました。うまくいけば、このページは高く評価されます。 – Ravedave

+1

ありがとうございましたJose..It worked ... –

+8

注: 'DataView.ToTable()'はDataViewの値だけをコピーします。 'DataView.Table.Copy()'は、DataViewのフィルタリングされたデータではなく、元のDataTableをコピーします。 'DataView.Table.Clone()'はソースDataTableの構造体だけをコピーします。 – Homer

3

私は式がある列があるため、私の状況では答えは機能しません。 DataView.ToTable()は、式ではなく値のみをコピーします。

まず私はこの試みた:

//clone the source table 
DataTable filtered = dt.Clone(); 

//fill the clone with the filtered rows 
foreach (DataRowView drv in dt.DefaultView) 
{ 
    filtered.Rows.Add(drv.Row.ItemArray); 
} 
dt = filtered; 

をしかし、そのソリューションは、ただでさえ1000行のために、非常に遅かったです。私のために働いた

解決策は以下のとおりです。

//create a DataTable from the filtered DataView 
DataTable filtered = dt.DefaultView.ToTable(); 

//loop through the columns of the source table and copy the expression to the new table 
foreach (DataColumn dc in dt.Columns) 
{ 
    if (dc.Expression != "") 
    { 
     filtered.Columns[dc.ColumnName].Expression = dc.Expression; 
    } 
} 
dt = filtered; 
関連する問題