2013-08-23 78 views
7

在DataTable中讀取一些數據(來自excel文件),現在我想過濾這個數據並只將特定的列複製到另一個列!從一個DataTable複製特定列到另一個

dataTable的格式:

some data 
ColA|ColB|ColC 
xxxx|xxxx|xxxx 
some data 

some data代表不相關的可樂COLC其他表數據

我怎麼能與XXXX複製可樂COLC到新的DataTable?

Thx

回答

16

複製整個表格並刪除不需要的列。

DataTable copyDataTable; 
copyDataTable = table.Copy(); 
copyDataTable.Columns.Remove("ColB"); 

int columnIndex = 1;//this will remove the second column 
DataTable copyDataTable; 
copyDataTable = table.Copy(); 
copyDataTable.Columns.RemoveAt(columnIndex); 
+1

我只加入了「.clear()」做副本後聲明()用這個複製的列。 – Enrico

21

你可以簡單地通過使用DataView.ToTable()做到這一點:

System.Data.DataView view = new System.Data.DataView(yourOriginalTable); 
System.Data.DataTable selected = 
     view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3"); 
+0

System.ArgumentException:列'xxx'不屬於基礎表 – leon22

+1

這意味着'xxx'列不存在於'DataTable'中。 – Arshad

+0

我認爲問題在於我在DataTable的頭部中有這些其他數據(有些數據),並且所需的列在下面。 xxx列絕對在桌上! – leon22

2

請檢查該

foreach (DataRow dr in dataTable1.Rows) { 
    if (/* some condition */) 
     dataTable2.Rows.Add(dr.ItemArray); 
    } 

上面的例子假設兩個表有相同的數量,類型和順序列。

這裏是實際link

1

定義您的副本的DataTable只與興趣的列。可以循環在源行的列並將該值設置到目標行與此示例代碼:

public void IntegrateRow(DataRow p_RowCible, DataRow p_RowSource) 
     { 
      try 
      { 
       foreach (DataColumn v_Column in p_RowCible.Table.Columns) 
       { 
        string ColumnName = v_Column.ColumnName; 
        if (p_RowSource.Table.Columns.Contains(ColumnName)) 
        { 
         p_RowCible[ColumnName] = p_RowSource[ColumnName]; 
        } 
       } 
      } 
      catch (Exception e) 
      { 
... 
0

這個方法接收的數據表(TextFileTable)作爲參數,並進行到TextFileTable的被選擇的內容複製到tblFormat表。在添加行語句中,列數必須與目標特德表中的列數相匹配,即使這兩個表可以具有不同的大小。

public DataTable CopyTable (DataTable TextFileTable) 
     { 
      DataTable tblFormat = new DataTable(); 

       tblFormat.Columns.Add("ColumnA"); 
       tblFormat.Columns.Add("ColumnB"); 
       tblFormat.Columns.Add("ColumnC"); 
       tblFormat.Columns.Add("ColumnD"); 
       tblFormat.Columns.Add("ColumnE"); 

       for (int i = 0; i < TextFileTable.Rows.Count; i++) 
       { 

        tblFormat.Rows.Add(new string[] { TextFileTable.Rows[i][0].ToString(), TextFileTable.Rows[i][1].ToString(), 
        TextFileTable.Rows[i][2].ToString(), TextFileTable.Rows[i][8].ToString(), TextFileTable.Rows[i][9].ToString() }); 

       } 


      return tblFormat; 
     } 
相關問題