【问题标题】:Add X rows to datatable that are virtually the same?将 X 行添加到几乎相同的数据表?
【发布时间】:2014-08-15 15:23:37
【问题描述】:

假设我需要向我的数据表中添加 10 行几乎相同的行,除了一个值。因此,例如,我使用以下代码添加第一行:

row = myTable.NewRow();
row["col1"] = value1;
row["col2"] = value2;
row["col3"] = value3;
row["col4"] = value4;
row["col5"] = value5;
row["col6"] = value6;
myTable.Rows.Add(row);

接下来的 9 行完全相同,唯一的区别是“col4”,因为“value4”在所有 10 行中都不同。

我如何能够插入同一行 X 次而不必复制前面的代码?基本上,它会是:

  1. 创建第 1 行
  2. 用值填充第 1 行
  3. 将第 1 行复制到新的第 2 行
  4. 更改第 2 行["col4"]
  5. 将这两行添加到 myTable

谢谢。

【问题讨论】:

  • 从哪里获得 col4 的值?它是一些值数组吗?
  • 没有。它是基于行创建的字符串。第一行有一个值,第二行有另一个值,依此类推。

标签: c# asp.net .net-4.0 datatable


【解决方案1】:

简单的循环就可以完成这项工作。您还可以使用重载的DataRowCollection.Add 方法,该方法接受用于创建新行的值数组:

// e.g. you have 10 integers for col4
var col4values = new [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

foreach(var col4value in col4values)
  myTable.Rows.Add(value1, value2, value3, col4value, value5, value6);

【讨论】:

  • 我希望声明一个 DataRow row 以便我可以按列名设置值。数据表有 17 个字段。
  • @user3605366 当您传递列值时,会在内部创建和添加新行
  • 请注意自动增量列和缺失列的存在。
【解决方案2】:

您可以使用类似于以下的模式,您只需将值数组作为参数传入并返回一个填充表:

    private DataTable CreateRows(object[] column4Vals)
    {
        DataTable myTable = new DataTable();
        foreach (object col in column4Vals)
        {
            DataRow row = myTable.NewRow();
            row["col1"] = "value1";
            row["col2"] = "value2";
            row["col3"] = "value3";
            row["col4"] = col;
            row["col5"] = "value5";
            row["col6"] = "value6";
            myTable.Rows.Add(row);
        }
        return myTable;
    }

这也是一种更灵活的方式,因此您可以为标准数据分配任何其他值。

    private DataTable CreateRows(object value1, object value2, object value3, object[] column4Vals, object value5, object value6)
    {
        DataTable myTable = new DataTable();
        foreach (object col in column4Vals)
        {
            DataRow row = myTable.NewRow();
            row["col1"] = value1;
            row["col2"] = value2;
            row["col3"] = value3;
            row["col4"] = col;
            row["col5"] = value5;
            row["col6"] = value6;
            myTable.Rows.Add(row);
        }
        return myTable;
    }

【讨论】:

    【解决方案3】:

    在使用“DataRow”时,您应该非常小心。通常,您向表中添加对行的引用,然后更改引用的行,而不是添加新行。

    但是,您可以先复制数据行,然后再将其添加到表中。

    查看:

    http://msdn.microsoft.com/en-us/library/system.data.datatable.importrow(v=vs.110).aspx

    为了更好的解释和示例。

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多