【问题标题】:GetChanges from merged datatables returns null来自合并数据表的 GetChanges 返回 null
【发布时间】:2015-07-15 08:37:06
【问题描述】:

我有以下代码:

DataTable datTable3 = new DataTable();
datTable3 = datTable1.Clone();

datTable2.Merge(datTable1);
datTable3 = datTable2.GetChanges();

我想做的是:将 DataTable1 与 DataTable2 进行比较,当 DataTable1 中有不在 DataTable 2 中的行时,将这些行添加到新的 DataTable(3) 中。尽管第一个 dt 中的行不等于我的第二个 dt 中的行,但上面的这段代码每次都给我一个空的 DataTable3。我究竟做错了什么?抱歉,这个问题可能太简单了,但我使用 C# 已有几个月了。

编辑:我发现这个解决方案对我不起作用...为什么?

 DataTable datTable3 = new DataTable();
        datTable3 = datTable1.Clone();

        foreach (DataRow row in datTable1.Rows)
        {
            datTable3.ImportRow(row);
        }

        foreach (DataRow row in datTable3.Rows)
        {
            row.SetAdded();
        }

        datTable2.Merge(datTable3);
        DataTable datTableFinal = datTable2.GetChanges(DataRowState.Added); 
 // shows me a datatable with again the values from datTable1 
 // even if they are already in datTable2!
        datTable2.RejectChanges();
        datTable1.RejectChanges();

【问题讨论】:

标签: c# winforms datatable merge


【解决方案1】:

DataTable.GetChanges() 方法获取 DataTable 的副本,其中包含自加载或上次调用 AcceptChanges 以来对其所做的所有更改。

换句话说,GetChanges() 依赖于 DataRow.RowState 属性。 DataTable.Merge() 将保留其“RowState”属性,或将其重置为“未更改”。

这意味着,当您将两个 DataTable 与具有“未更改”行状态的行合并时,合并后的表也将包含“未更改”行,并且 DataTable.GetChanges 方法将返回 null 或 Nothing。

编辑:您始终可以遍历DataTable 以查看将哪些行添加到合并表中。类似的东西

foreach(DataRow row in datTable2.Rows)
{
     Console.WriteLine("--- Row ---"); // Print separator.
    foreach (var item in row.ItemArray) // Loop over the items.
    {
    Console.Write("Item: "); // Print label.
    Console.WriteLine(item); // Invokes ToString abstract method.
    }
}

【讨论】:

  • @ScorpX 可能不是最高效的解决方案,但它会起作用 - stackoverflow.com/questions/9289475/…。否则,您必须确保修改后的表中的所有行都具有正确的 RowState(已添加或已修改),这在您当前的设计中可能实现,也可能不实现。
  • 我需要比较行,而不是单元格值...这是我的问题。我从这里尝试了解决方案:stackoverflow.com/questions/1702440/… 但即使我更新了我的数据库,他也一直告诉我所有行都已添加......我编辑它
  • 对我不起作用...合并功能有问题。即使它们已经在我的数据表中,它也会以某种方式放入记录。所以在那之后我得到了重复......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多