将空行添加到数据表的循环不起作用

For loop to add empty rows to datatable isn't working

我有一些代码可以比较两个数据表。如果一个 table 的行数比另一个多,我希望能够添加空白行,直到它们的行数相等。

我试过这个:

for (int i = 0; i < difference; i++)
{
    table.Rows.Add();
}

以及

DataRow newRow = table.NewRow();
table.ImportRow(newRow);

DataRow newRow = table.NewRow();
table.Rows.Add(newRow);

None 这些似乎有效。

table.Rows.Add()(有和没有参数)似乎在一次迭代后让我脱离了循环

ImportRow 循环了适当的次数,但只添加了一个新行

我哪里错了?

通过此测试:

        var table = new DataTable();
        for (int i = 0; i < 5; i++)
        {
            var row = table.NewRow();
            table.Rows.Add(row);
        }

DataTable table 包含 5 行。

以下代码对我来说没问题:

DataTable dtable = new DataTable();
dtable.Columns.Add("Column1");
dtable.Columns.Add("Column2");

for (int i = 0; i < 10; i++)
{
      DataRow newRow = dtable.NewRow();
      dtable.Rows.Add(newRow);
}

正如预期的那样,它向我的 DataTable 添加了 10 个空行。如果这对您不起作用,则可能是您的 DataTable 具有主键或其他限制,阻止添加这些空行。在这种情况下向我们展示您的 DataTable 定义。

编辑

在这个例子中我在前面的基础上定义了一个主键,所以这段代码不起作用:

DataTable dtable = new DataTable();
dtable.Columns.Add("Key");
dtable.Columns.Add("Column2");
dtable.PrimaryKey = new DataColumn[]{dtable.Columns[0]};

for (int i = 0; i < 10; i++)
{
    DataRow newRow = dtable.NewRow();
    dtable.Rows.Add(newRow);
}

失败并显示 NoNullAllowedException,即主键不能为空。

以下代码有效:

for (int i = 0; i < 10; i++)
{
    DataRow newRow = dtable.NewRow();
    newRow["Key"] = i;
    dtable.Rows.Add(newRow);

}

因为我正在为主键设置一个值。在你的情况下,这取决于你的主键的数据类型,你还必须检查你的值 "inventing" 是否已经存在,否则它也会失败。

我希望你现在已经清楚了。