2013-08-23 60 views
7

Đọc một số dữ liệu (từ tệp excel) trong một DataTable và bây giờ tôi muốn lọc và chỉ sao chép các cột cụ thể sang cột khác!Sao chép các cột cụ thể từ một DataTable này sang một DataTable khác

DataTable định dạng:

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

some data đại diện cho bảng dữ liệu khác không liên quan đến Cola-ColC

Làm thế nào tôi có thể sao chép Cola-ColC với xxxx vào DataTable mới?

Thx

Trả lời

16

Sao chép toàn bộ bảng và xóa các cột bạn không muốn.

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

hoặc

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

Tôi đã sử dụng tính năng này để sao chép các cột chỉ bằng cách thêm câu lệnh ".clear()" sau khi sao chép(). – Enrico

21

Bạn chỉ có thể làm điều đó bằng cách sử dụng 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: Cột 'xxx' không thuộc về bảng cơ bản – leon22

+1

Nó có nghĩa là cột 'xxx' không có trong' DataTable' của bạn. – Arshad

+0

Tôi nghĩ rằng vấn đề là tôi có dữ liệu này (một số dữ liệu) trong tiêu đề của DataTable và các cột mong muốn dưới đây. Cột xxx chắc chắn là trong bảng! – leon22

2

hãy kiểm tra này

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

Ví dụ trên giả định rằng cả hai bảng có cùng số, loại và thứ tự cột.

đây là thực tế link

1

Xác định DataTable sao chép của bạn chỉ với các cột sở thích. Bạn có thể lặp trên các cột của hàng nguồn và thiết lập các giá trị cho các hàng mục tiêu với mẫu mã này:

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

Phương pháp này nhận được một bảng dữ liệu (TextFileTable) như một tham số và tiến hành sao chép nội dung được lựa chọn của TextFileTable vào tblFormat table.In câu lệnh thêm hàng số cột, phải khớp với số cột trong bảng ted mục tiêu, mặc dù hai bảng có thể có kích thước khác nhau.

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