2009-04-20 5 views

Répondre

36
dt = DataView.ToTable() 

OU

dt = DataView.Table.Copy(),

OU

dt = DataView.Table.Clone();

+1

Merci, Google me parvient pas assez mal. J'espère que cette page sera très bien classée. – Ravedave

+1

Merci Jose..It travaillé ... –

+8

Remarque: 'DataView.ToTable()' ne copiera que les valeurs de DataView. 'DataView.Table.Copy()' va copier le DataTable source, pas les données filtrées de DataView. 'DataView.Table.Clone()' ne copiera que la structure du DataTable source. – Homer

3

La réponse ne fonctionne pas pour ma situation car j'ai des colonnes avec des expressions. DataView.ToTable() copie uniquement les valeurs, pas les expressions.

D'abord, j'essayé ceci:

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

mais cette solution était très lent, même pour seulement 1000 lignes.

La solution qui a fonctionné pour moi est:

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