ImportRow()没有在C#中将DataRows复制到DataTable

时间:2016-12-07 02:47:40

标签: c# .net datatable

我有两张桌子,我希望"加入"一起。第一个列具有第二个列的所有列,但数据不完整。两个表都有一个ID,我将用它们将它们拼接在一起。合并不起作用,因为第二个表有更多行,并且它包含相同ID的不同时间。
这个例子将更好地解释它:

OldTable1:
+----+-------+---------+--------+
| ID | Name  | PhoneNr | Address|  
+----+-------+---------+--------+
| 1  | Tim   | 0       |        |  
+----+-------+---------+--------+
| 2  | Frank | 0       |        | 
+----+-------+---------+--------+

OldTable2
+----+---------+--------+
| ID | PhoneNr | Address|  
+----+---------+--------+
| 1  | 12345   | Avenue |  
+----+---------+--------+
| 1  | 67890   | Street | 
+----+---------+--------+
| 2  | 55555   | Alley  | 
+----+---------+--------+

NewTable:
+----+-------+---------+---------+
| ID | Name  | PhoneNr | Address |
+----+-------+---------+---------+
| 1  | Tim   | 12345   | Avenue  |
+----+-------+---------+---------+
| 1  | Tim   | 67890   | Street  |
+----+-------+---------+---------+
| 2  | Frank | 55555   | Alley   |
+----+-------+---------+---------+

这是我的代码:

DataTable newTable = oldTable1.Clone();

    foreach (DataRow drOld1 in oldTable1.Rows)
    {
        foreach (DataRow drOld2 in oldTable2.Rows)
        {
            if (drOld1["ID"].Equals(drOld2["ID"]))
            {
                DataRow newRow = oldTable1.NewRow();
                newRow.ItemArray = drOld1.ItemArray.Clone() as object[];

                newRow["PhoneNr"] = drOld2["PhoneNr"];
                newRow["Address"] = drOld2["Address"];
                newTable.ImportRow(newRow);
            }
        }
    }

我不知道出了什么问题。在我使用ImportRow进行操作之前,一切似乎都有效。 newRow包含所有正确的信息,它不会将行添加到newTable。我查看了几个相关的问题,没有一个答案可以解决我的问题。我无法用Add()替换ImportRow(),因为它是另一个DataTable。 OldTable1和newTable具有完全相同的列,因为我从OldTable1创建了newTable克隆方案。我在这里缺少什么?

SOLUTION:
正如aguertin正确指出的那样,它不起作用的原因如下:

  

方法NewRow()分离将导致ImportRow()的行   要被忽略的方法,也不会抛出任何异常。

我的个人解决方案是使用第一个表的旧行而不是创建一个新行。现在一切都按预期工作了。

DataTable newTable = oldTable1.Clone();

        foreach (DataRow drOld1 in oldTable1.Rows)
        {
            foreach (DataRow drOld2 in oldTable2.Rows)
            {
                if (drOld1["ID"].Equals(drOld2["ID"]))
                {
                    drOld1["PhoneNr"] = drOld2["PhoneNr"];
                    drOld1["Address"] = drOld2["Address"];
                    newTable.ImportRow(drOld1);
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

NewRow()方法将该行分离,这将导致ImportRow()方法被忽略,并且不会抛出任何异常。

使用Add()....即使你说不能只创建一个临时字典/表并将值存储在那里。