2012-02-23 61 views
3

我想將dataview rowfilter值轉換爲數據表。我有一個有價值的數據集。現在我使用dataview過濾了這個值。現在,我想轉換數據視圖過濾器值datatable.please幫我複製........dataview rowfilter值到數據錶轉換

我的部分代碼是在這裏:

DataSet5TableAdapters.sp_getallempleaveTableAdapter TA = new DataSet5TableAdapters.sp_getallempleaveTableAdapter(); 
    DataSet5.sp_getallempleaveDataTable DS = TA.GetData(); 
     if (DS.Rows.Count > 0) 
     { 
      DataView datavw = new DataView(); 
      datavw = DS.DefaultView; 
      datavw.RowFilter = "fldempid='" + txtempid.Text + "' and fldempname='" + txtempname.Text + "'"; 
      if (datavw.Count > 0) 
      { 
       DT = datavw.Table; // i want to copy dataview row filter value to datatable 

      } 
     } 

請幫我...

+0

您可以使用DataColumn.Expression直接,無需dataview.rowfilter – 2012-02-23 07:22:58

回答

5

您可以使用

if (datavw.Count > 0)    
    {     
    DT = datavw.ToTable(); // This will copy dataview's RowFilterd values to datatable    
    } 
+0

感謝ü這麼多.. – Fernando 2012-02-23 08:39:54

3

您可以使用DateView.ToTable()將過濾的數據視圖轉換爲數據表。

DataTable DTb = new DataTable(); 
DTb = SortView.ToTable(); 
1

的答案,因爲我有表達式列不適合我的情況下工作。 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;