【问题标题】:For loop to add empty rows to datatable isn't working将空行添加到数据表的 For 循环不起作用
【发布时间】:2016-06-25 14:12:26
【问题描述】:

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

我试过这个:

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()(有和没有参数)似乎在一次迭代后让我脱离了循环

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

我哪里出错了?

【问题讨论】:

  • 您要添加到的表的架构/布局是什么?
  • 差异值是多少?
  • 您是否在循环的每次迭代中创建一个新的 DataRow 对象 - 关于您的第二次尝试?
  • @inquisitive_mind 一个正整数,根据使用的表而变化,例如 5
  • @DanOrlovsky 是的,它看起来就像 James Dev 的答案(但用 'difference' 而不是 5

标签: c# for-loop datatable datarow


【解决方案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,您还必须检查您“发明”的值是否已经存在,否则它也会失败。

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

【讨论】:

  • 我试过这段代码,所以我认为你对主键的看法一定是对的。这是否意味着我将在添加这些新行之前设置它们的主键?
  • 是的@Sophia,如果数据表有任何主键,你应该在新行中设置该列,因为主键必须是唯一的,如果所有行都是空的,它们将具有相同的主键.
  • 好的,我不知道该怎么做。如果您能提供更多信息,我们将不胜感激:)
  • @Sophia 查看我的更新答案,看看您是否了解所有内容。如果没有看到您的 DataTable 定义,我们将无法为您提供更多帮助。无论如何,您正在尝试的有点奇怪,为什么要让两个表具有相同的行数?也许如果您解释一下为什么我们可以为您提供替代解决方案
  • 这是一个 WinForm 比较两个数据表并突出显示它们之间的差异 :) 和 YAAAAY 您的新代码有效,非常感谢您的所有帮助!
【解决方案2】:

通过这个测试:

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

DataTable 表包含 5 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多