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);
}
復制代碼

這樣就可以順利運行,並解決啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM