17

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

数据表格式:

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

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

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

谢谢

4

7 回答 7

45

您可以使用DataView.ToTable()简单地做到这一点:

System.Data.DataView view = new System.Data.DataView(yourOriginalTable);
System.Data.DataTable selected = 
        view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");
于 2013-08-23T12:06:53.980 回答
29

复制整个表格并删除不需要的列。

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);
于 2013-08-23T12:03:31.673 回答
2

请检查这个

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

上面的示例假定两个表具有相同的列数、类型和顺序。

这是实际的链接

于 2013-08-23T12:08:33.087 回答
2

仅使用兴趣列定义您的副本 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)
            {
...
于 2013-08-23T12:21:15.413 回答
1

可以使用 LINQ 来实现

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

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

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

DataColumn下面的代码会将特定数据复制到DataColumn另一个DataTable。假设两个表具有相同的行数。

int rowIdx = 0;
dtDestination.AsEnumerable().All(row => { row["colName"] = dtSource.Rows[rowIdx++]["colName"]; return true; });
于 2018-09-04T07:28:00.370 回答
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;
        }
于 2015-12-01T06:45:29.427 回答
0

vb.net 中的相同修复

将视图暗淡为 DataView = New DataView(TB) 暗淡选择为 DataTable = view.ToTable("Selected", False, "id", "col1", "col2")

于 2020-06-19T05:54:09.983 回答