【问题标题】:Get changes after merging datasets合并数据集后获取更改
【发布时间】:2018-09-29 01:13:36
【问题描述】:

您好,我有两个具有相同架构的数据集,我需要在其中两个之间进行更改。

可以使用以下代码创建数据集:

DataSet First = new DataSet("DSStore");
DataTable Footer = new DataTable("Footer");
DataColumn Column = new DataColumn("Value", Type.GetType("System.Int32"), "");
DataColumn[] PK = new DataColumn[1];
PK[0] = Column;
DataSet changes;
First.Tables.Add(Footer);
Footer.Columns.Add(Column);
Footer.PrimaryKey = PK;
//Clone to create second one
changes = First.Clone();

现在只需用数据填充两者:

for (int i = 0; i < 10; i++)
{
     var row2 = changes.Tables["Footer"].NewRow();
     row2["Value"] = i;
     changes.Tables["Footer"].Rows.Add(row2);
}
var firstRow = First.Tables["Footer"].NewRow();
firstRow["Value"] = 8;
First.Tables["Footer"].Rows.Add(firstRow);
First.AcceptChanges();
changes.AcceptChanges();

现在,当我们准备好所有数据后,我们就可以开始尝试了:

我尝试合并它们:

First.Merge(changes);
if (First.HasChanges())
    Console.WriteLine("has changes");
else
    Console.WriteLine("Doesnt");

但不幸的是,合并不会更改行状态,因此在接受行后 hasChanges 返回 false 并且 getchanges 为空。

我尝试了另一种方法:

IEnumerable<DataRow> added = changes.Tables["Footer"].AsEnumerable().Except(First.Tables["Footer"].AsEnumerable(),DataRowComparer.Default);
Console.WriteLine("Added:");
foreach (var row in added)
{
    Console.WriteLine(row["Value"]);
}

现在我收到了一些结果,但它打印的所有 9 行都是正确的。所以我尝试将更改插入到第一个数据集:

foreach(var row in added)
{
   changes2.Tables["Footer"].Rows.Add(row);
}
if (changes2.HasChanges())
   Console.WriteLine("has changes");
else
   Console.WriteLine("Doesnt");

但在尝试添加行后,我收到了ArgumentException

【问题讨论】:

    标签: c# .net dataset


    【解决方案1】:

    我需要更改一行:

    foreach(var row in added)
    {
         changes2.Tables["Footer"].Rows.Add(row.ItemArray);
    }
    

    现在可以了。添加线条会产生变化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多