【发布时间】: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
【问题讨论】: