是否可以通过一次调用向DataTable添加几行?
问题是我需要创建一个DataTable,其中每个列在写入DataTable之前需要先前的处理。逐行写作会很不方便。
即,我需要创建一个包含N个空行的DataTable,然后以列为基础写入值。
答案 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” - 花费太多时间。 我接下来做:
这是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);