2009-04-20 30 views

Trả lời

36
dt = DataView.ToTable() 

HOẶC

dt = DataView.Table.Copy(),

HOẶC

dt = DataView.Table.Clone();

+1

Cảm ơn, google đã thất bại tôi khá nặng. Hy vọng rằng trang này sẽ được xếp hạng cao. – Ravedave

+1

Cảm ơn Jose..Đã hoạt động ... –

+8

Lưu ý: 'DataView.ToTable()' sẽ chỉ sao chép các giá trị của DataView. 'DataView.Table.Copy()' sẽ sao chép DataTable nguồn, không phải dữ liệu được lọc của DataView. 'DataView.Table.Clone()' sẽ chỉ sao chép cấu trúc của DataTable nguồn. – Homer

3

Câu trả lời không hoạt động cho trường hợp của tôi vì tôi có các cột có biểu thức. DataView.ToTable() sẽ chỉ sao chép các giá trị, chứ không phải các biểu thức.

Đầu tiên tôi đã cố gắng này:

//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; 

nhưng giải pháp đó là rất chậm, thậm chí với giá chỉ 1000 dòng.

Các giải pháp mà làm việc đối với tôi là:

//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; 
Các vấn đề liên quan