将空行添加到DataTable

时间:2014-10-30 13:38:56

标签: c# .net datatable

是否可以通过一次调用向DataTable添加几行?

问题是我需要创建一个DataTable,其中每个列在写入DataTable之前需要先前的处理。逐行写作会很不方便。

即,我需要创建一个包含N个空行的DataTable,然后以列为基础写入值。

3 个答案:

答案 0 :(得分:7)

如果没有循环,则无法添加多行。如果您要将n行添加到DataTable,其中所有列都为"为空"使用不带参数的DataRowCollection.Add

for(int i = 0; i < n; i++)
    table.Rows.Add();  // all fields get their default value

答案 1 :(得分:1)

对于有很多行的表格,更好的解决方案是使用“表格预制件”。 让我们看一个例子。 我们需要更新目标 (DST) 表的 100k 行。我们有外部源 (SRC) 表。我们知道 SRC 中的某些行可能不存在,这意味着该特定行的列是 DBNULL。 如果我们只是将 SRC 合并到 DST,旧数据仍将在 DST 中。因此,为了清除该数据,我们首先需要清除将从 SRC 导入数据的列中的所有数据,并保存另一个数据(实际上是从另一个源表中获取的)。

不推荐使用“For...Next” - 花费太多时间。 我接下来做:

  1. 创建临时表 (TMP),其中只有 PrimaryKey 匹配 DST.PriaryKey 的列(没有任何行)
  2. 将数据从 DST 合并到 TMP - 这将只创建行
  3. 手动添加与 SRC 匹配的列 - 这将创建“空”行
  4. 将 TMP 合并到 DST
  5. 然后将 SRC 合并到 DST

这是VB中的代码:

Dim tmp As DataTable = New DataTable
Dim pk(dst.PrimaryKey.Length - 1) As DataColumn
For Each col As DataColumn In dst.PrimaryKey
    pk(j) = tmp.Columns.Add(col.ColumnName, col.DataType)
    j += 1
Next
tmp.PrimaryKey = pk
tmp.Merge(src, False, MissingSchemaAction.Ignore) 'add rows
For Each col As DataColumn In src.Columns 'add empty columns
    If dst.Columns.Contains(col.ColumnName) _
    AndAlso Not tmp.Columns.Contains(col.ColumnName) _
    Then tmp.Columns.Add(col.ColumnName, col.DataType)
Next
dst.Merge(tmp, True, MissingSchemaAction.Ignore) 'clear destination columns

答案 2 :(得分:0)

在您的for循环中(显然需要一个forloop来添加多行),您想使用

DataRow newBlankRow = reqList.NewRow();
reqList.Rows.InsertAt(newBlankRow, reqList.Rows.Count);