1

我有这样的代码:

DataTable dtLevel1 = dtCategories.Clone();
DataTable dtLevel2 = dtCategories.Clone();

// i can workaround this with CopyToDataTable()
dtLevel1.Rows.Add(dtCategories.Select("id = 123")); // error


// but here similar situation, I cant use CopyToDataTable() method here
// because it will overwrite whole table in next loop run
foreach (DataRow dr in dtLevel1.Rows)
{
    dtLevel2.Rows.Add(dtCategories.Select("[pid] = " + dr["id"].ToString()));
}

在最后一行我收到错误消息:

输入数组长于此表中的列数。

为什么?

稍后编辑/添加:

如何解决?

4

2 回答 2

1

我将按如下方式解决此问题:

    foreach (var row in dtCategories.Select("id = 123"))
    {
        dtLevel1.ImportRow(row);
    }

问题是您试图将行数组传递给 Add()。Add() 需要单行或包含列的对象数组。相反,您应该迭代返回的结果并使用 ImportRow 方法来保留任何属性设置。

于 2013-09-25T19:45:19.280 回答
1

dtCategories.Select("id = 123")返回满足您的选择条件的数组,DataRow例如 5 行。

dtLevel1.Rows.Add 的重载object[]实际上得到了一个列值数组,换句话说,它需要一行。您的代码将 Row 与行数组弄乱了。

于 2013-09-25T19:39:00.097 回答