将特定列从一个DataTable复制到另一个DataTable

时间:2013-08-23 12:01:12

标签: c# .net datatable

在DataTable中读取一些数据(来自excel文件),现在我想过滤它并仅将特定列复制到另一个列中!

dataTable格式:

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

some data表示与ColA-ColC无关的其他表格数据

如何将带有xxxx的ColA-ColC复制到新的DataTable?

THX

7 个答案:

答案 0 :(得分:32)

您只需使用DataView.ToTable()

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

答案 1 :(得分:21)

复制整个表并删除您不想要的列。

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

答案 2 :(得分:2)

请检查

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

上面的例子假设两个表都有相同的数量,类型和列顺序。

这是实际的link

答案 3 :(得分: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)
            {
...

答案 4 :(得分:0)

此方法接收数据表(TextFileTable)作为参数,并继续将TextFileTable的选定内容复制到tblFormat表中。在add row语句中,列数必须与目标ted表中的列数相匹配,即使两个表可以有不同的大小。

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

答案 5 :(得分:0)

可以使用LINQ来实现

假设我们有两个DataTable。 1. dtSource和2. dtDestination

如果dtDestination没有行,则使用下面的代码生成空白行。

dtSource.AsEnumerable().All(row => { dtDestination.Rows.Add(); return true; });

下面的代码会将特定的DataColumn数据复制到另一个DataColumn的{​​{1}}中。假设两个表的行数相同。

DataTable

答案 6 :(得分:0)

vb.net中的修复

作为DataView的昏暗视图=新的DataView(TB) 选择Dim作为DataTable = view.ToTable(“ Selected”,False,“ id”,“ col1”,“ col2”)