我有一些代码来比较两个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循环适当的次数,但只添加一个新行
我哪里错了?
答案 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行。