【问题标题】:How to get columns from a datarow?如何从数据行中获取列?
【发布时间】:2021-09-16 06:06:38
【问题描述】:

我有一个行集合(DataRow[] 行)。我想将所有行导入另一个 DataTable (DataTable dt)。

但是怎么做呢?

代码

DataTable dt;
if (drs.Length>0)
{
    dt = new DataTable();

    foreach (DataRow row in drs)
    {
        dt.Columns.Add(row???????)
    }

    // If it possible, something like that => dt.Columns.AddRange(????????)

    for(int i = 0; i < drs.Length; i++)
    {
        dt.ImportRow(drs[i]);
    }
}

【问题讨论】:

    标签: c# datatable datarowcollection


    【解决方案1】:

    假设所有行都具有相同的结构,最简单的选择是克隆旧表,省略数据:

    DataTable dt = drs[0].Table.Clone();
    

    或者,类似:

    foreach(DataColumn col in drs[0].Table.Columns)
    {
        dt.Columns.Add(col.ColumnName, col.DataType, col.Expression);
    }
    

    【讨论】:

    • 谢谢你,马克。你是完美的。
    • 如果您使用的是 .NET 3.5,是否可以使用 DataTableExtensions.CopyToDataTable 方法(DataRowCollection / IEnumerable 的扩展)?
    【解决方案2】:

    如果您的 DataRows 来自其中定义了列的数据表,

    DataRow[] rows;
    
    DataTable table = new DataTable();
    var columns = rows[0].Table.Columns;
    
    table.Columns.AddRange(columns.Cast<DataColumn>().ToArray());
    
    foreach (var row in rows)
    {
        table.Rows.Add(row.ItemArray);  
    }
    

    【讨论】:

    • 这个也很好。我更喜欢 AddRange 而不是 foreach。
    【解决方案3】:

    怎么样

    DataTable dt = new DataTable;
    foreach(DataRow dr in drs)
    {
        dt.ImportRow(dr);
    }
    

    请注意,这仅在 drsDataRowCollection 时有效。分离的行(不在DataRowCollection 中的行将被忽略)。

    别忘了调用 AcceptChanges。

    【讨论】:

    • 我做了一个快速检查,并没有添加任何列...所以你得到的行没有任何值 - 不是特别有用。
    • 回复DataRowCollection - 没有任何区别。我的测试样本正在使用来自 DataTable.Rows(DataRowCollection)的附加行 - 它根本不起作用。对不起。
    • 好的,我是从记忆中回答的,而不是测试用例(很难从我的测试环境中来回切换,不要问)。我收回我的回答。
    【解决方案4】:

    试试这个:

    // Assuming you have a DataRow object named row:
    foreach(DataColumn col in row.Table.Columns)
    {
        // Do whatever you need to with these columns
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-22
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多