在 foreach 或 for 循环中声明 DataRow

Declaring DataRow within a foreach or for Loop

情况是这样的。我有一个 select 查询,它获取我想插入到新数据表中的数据行数组。

但是在尝试添加行时出现以下错误:

"Row already belongs to another Table".

所以我尝试在循环(for 和 foreach 循环)中创建并初始化一个新的 DataRow,然后在初始化 DataRow 时抛出错误:

"Inaccessible due to its protection level"

有什么想法吗?感觉好像错过了一些愚蠢的东西。

我的第一个错误代码:

var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));

        _DTCurrentAuspragung = new DataTable();
        for (int i = 0; i < DRCurrentAuspragung.Length;i++ )
        {
            DataRow RowAdd = DRCurrentAuspragung[i];
            _DTCurrentAuspragung.Rows.Add(RowAdd);
        }

对于第二个错误:

var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));

        _DTCurrentAuspragung = new DataTable();
        foreach (DataRow dr in DRCurrentAuspragung)
        {
            DataRow RowAdd = new DataRow();
            RowAdd = dr;
            _DTCurrentAuspragung.Rows.Add(RowAdd);
        }

提前致谢。

此异常的原因是一个 DataRow 对象不能属于多个 table。一种解决方案是在 ImportRow 方法的帮助下创建此行的副本:

  _DTCurrentAuspragung.ImportRow(RowAdd);

不要忘记在选择行后使用 Clone(),因为这两个 table 必须具有相同的结构:

DataTable _DTCurrentAuspragung = _DTAuspragung.Clone();

所以,结果是:

 var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = " + Convert.ToString(MerkmalID));

 _DTCurrentAuspragung = _DTAuspragung.Clone();
 for (int i = 0; i < DRCurrentAuspragung.Length; i++ )
 {
         DataRow RowAdd = DRCurrentAuspragung[i];
         _DTCurrentAuspragung.ImportRow(RowAdd);
 }

您可能需要使用 ImportRow() 方法。请记住,要向其中导入行的 table 必须与要导入的行所属的 table 具有相同的结构(列名和类型)