合并数据集后获取更改

时间:2018-04-18 17:31:57

标签: c# .net dataset

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

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

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为null。

我尝试了另一种方式:

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

1 个答案:

答案 0 :(得分:0)

我需要换一行:

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

现在好了。添加行会创建更改