C# 该行已经属于另一个表 的解决方法

当我们使用DataTable的时候,取到其中的一行dataRow,然后将其Add()到另外的一个表。如果直接进行Add()的话,就会出现一个异常 "此行已经属于另一个表"。

简单例子:

复制代码
 1         private void OperateDataTable()
 2         {
 3             DataTable dataTableA = new DataTable("Table A");
 4             DataColumn dataColumn;
 5             DataRow dataRow;
 6 
 7             dataColumn = new DataColumn();
 8             dataColumn.ColumnName = "ID";
 9             dataColumn.DataType = typeof(int); //Type.GetType("System.Int32");
10             dataTableA.Columns.Add(dataColumn);
11 
12             dataColumn = new DataColumn();
13             dataColumn.ColumnName = "Name";
14             dataColumn.DataType = typeof(string);
15             dataTableA.Columns.Add(dataColumn);
16 
17             for (int i = 0; i < 10; i++)
18             {
19                 dataRow = dataTableA.NewRow();
20 
21                 dataRow["ID"] = i;
22                 dataRow["Name"] = $"{i}_Name";
23 
24                 dataTableA.Rows.Add(dataRow);
25             }
26 
27             DataTable dataTableB = new DataTable("Table B");
28 
29             dataColumn = new DataColumn();
30             dataColumn.ColumnName = "ID";
31             dataColumn.DataType = typeof(int); //Type.GetType("System.Int32");
32             dataTableB.Columns.Add(dataColumn);
33 
34             dataColumn = new DataColumn();
35             dataColumn.ColumnName = "Name";
36             dataColumn.DataType = typeof(string);
37             dataTableB.Columns.Add(dataColumn);
38 
39             for (int i = 10; i < 20; i++)
40             {
41                 dataRow = dataTableB.NewRow();
42 
43                 dataRow["ID"] = i;
44                 dataRow["Name"] = $"{i}_Name";
45 
46                 dataTableB.Rows.Add(dataRow);
47             }
48 
49             if (dataTableB.Rows.Count > 0 && dataTableB.Rows[0] != null)
50             {
51                 DataRow row = dataTableB.Rows[0];
52 
53                 dataTableA.Rows.Add(row);  // 这里会出异常
54             }
55         }        
复制代码

解决方案:

复制代码
if (dataTableB.Rows.Count > 0 && dataTableB.Rows[0] != null)
{
    DataRow row = dataTableB.Rows[0];

    dataTableA.Rows.Add(row.ItemArray);
}
复制代码

这样就可以顺利运行,并解决啦!

原文地址:https://www.cnblogs.com/wzihan/p/14758297.html