DataTable.DataRow的復制


經常遇到這種錯誤,“此行已屬於另一個表”的錯誤,導致這個錯誤的語句如下:

dtPriceTable.Rows.InsertAt(aDataRow,i);

或者

dtPriceTable.Rows.Add(aDataRow);

我分析了一下原因,因為DataRow DataTable 都是傳引用調用的。所以一個行在一個表中了,就不能再增加到另外一個表。

具體的改善策略有兩種:

1、   把原始DataRow的每列依次賦值。如下:

DataRow tempRow = dtItemPrice.NewRow();

tempRow ["First"] = aDataRow ["First "]
tempRow ["second"] = aDataRow ["second "]
tempRow ["third"] = aDataRow ["third "]
tempRow ["forth"] = aDataRow ["forth "]
tempRow ["Fifth"] = aDataRow ["Fifth "]
…… 

dtPriceTable.Rows.Add(tempRow)

2、 循環DataTable的每列。如下:

DataRow aDataRow = dtItemPrice.NewRow();

foreach(DataColumn aDataColumn in dtItemPrice.Columns)
{
    aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];
}

InsertConditionType(aDataRow,dtItemPrice); 

測試就可以了。

3、在表結構相同的情況下,如下面所示: 

DataRow aDataRow = dtItemPrice.NewRow(); 
aDataRow.ItemArray = drItemPrices[i].ItemArray; 
dtItemPrice.Rows.Add(aDataRow);

4、使用importRow的方法

 

常用方法 :

有兩個表A和B,兩表結構相同。現在需要將A表中部分行拷貝到B表中。
如果我們直接用 DataTableB.rows.add(dataTableA.rows[0]) 這樣的方法式會報"row已經屬於A表"這樣的錯誤。
所以我們可以用另外的方法。
方法1,使用dataTable.ImportRow()方法。代碼如下:

復制代碼
                        //得到A表中的部分行
                        DataRow[] drA = dtA.Select("aimtype=3");
                        //實例B
                        DataTable dtB = dtA.Clone();               
                        if (drA.Length > 0)
                        {
                            foreach (DataRow drVal in drA)
                            {
                                //向B中增加行
                                dtB.ImportRow(drVal);
                            }
                        }
復制代碼


方法2,使用DataTable.Rows.Add(params object[] values)方法,代碼如下:

復制代碼
                        //得到A表中的部分行
                        DataRow[] drA = dtA.Select("aimtype=3");
                        //實例B
                        DataTable dtB = dtA.Clone();               
                        if (drA.Length > 0)
                        {
                            foreach (DataRow drVal in drA)
                            {
                                //向B中增加行
                                dtB.Rows.Add(drVal.ItemArray);
                            }
                        }
復制代碼

 


免責聲明!

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



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