for循环向数据表添加空行不起作用

时间:2016-03-10 16:02:58

标签: c# for-loop datatable datarow

我有一些代码来比较两个DataTables。如果一个表的行数多于另一个表,我希望能够添加空行,直到它们具有相同的行数。

我试过这个:

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);

这些似乎都不起作用。

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

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

我哪里错了?

2 个答案:

答案 0 :(得分:1)

以下代码对我有用:

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);

}

因为我正在为主键设置值。在您的情况下,它取决于您的PrimaryKey的DataType,并且您还必须检查您是否是&#34;发明&#34;已经存在或者也会失败。

我希望现在对你来说很清楚。

答案 1 :(得分:0)

通过这个测试:

{{1}}

DataTable表包含5行。