2009-04-20 9 views

risposta

36
dt = DataView.ToTable() 

O

dt = DataView.Table.Copy(),

O

dt = DataView.Table.Clone();

+1

Grazie, google mi stava venendo a mancare piuttosto male. Speriamo che questa pagina si classifichi altamente. – Ravedave

+1

Grazie Jose ... Ha funzionato ... –

+8

Nota: 'DataView.ToTable()' copierà solo i valori di DataView. 'DataView.Table.Copy()' copierà il DataTable di origine, non i dati filtrati di DataView. 'DataView.Table.Clone()' copierà solo la struttura del DataTable di origine. – Homer

3

La risposta non funziona per la mia situazione perché ho colonne con espressioni. DataView.ToTable() copierà solo i valori, non le espressioni.

Per prima cosa ho provato questo:

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

ma questa soluzione era molto lento, anche solo per 1000 righe.

La soluzione che ha funzionato per me è:

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