[英]ado.net dirty records in dataset
我会尽力解释。 我想跟踪绑定到窗口(wpf)控件上的数据集行中的脏记录。
工作正常。 可以说我开始编辑绑定到该dataSet中的dataTable的一些文本框。 将一个字符添加到文本框后,数据集被标记为脏。
但是,如果我再次删除该字符(恢复原始值),则数据集仍然很脏。 我想要在将原始值恢复为dataSet之后变得不脏,因为实际上它不再脏了。
我是否需要调用任何方法,以便数据集可以从绑定字段或某些类似方法中重新计算脏记录。 谢谢。
DataRow.CancelEdit()
要么
DataRow.RejectChanges()
要么
DataSet.RejectChanges()
可能会根据您的情况工作。
您需要保留原始实体集的副本以进行比较,并在实际需要知道是否脏的时候进行“ IsDirty”确定,而不是在数据更改时才做出“ IsDirty”确定,因此仅可能是脏的。
您可以检查数据行的rowstate
属性,如果已Modified
则可以比较Current
和Original
DataRowVersions中的值。 如果第二次更改使值与原始值相同,则可以调用RejectChanges
,但这将拒绝该行上的所有更改。 您将必须手动跟踪每个字段,因为数据集仅保留每行或每表更改,并且即使设置了相同的值,任何更改都是更改。
好吧,有什么工作了,只想分享。 到现在为止还挺好。 谢谢大家的回答,对我有很大帮助。 下一步是将此功能构建到自定义控件中:)。
private bool dirty = false;
private int currentRowIndex;
void Products_RowChanged(object sender, System.Data.DataRowChangeEventArgs e)
{
currentRowIndex=ProductsViewSource.View.CurrentPosition;
int i=0;
foreach (object o in originalProducts[currentRowIndex].ItemArray)
{
if (o.Equals(restouranDataSet.Products[currentRowIndex].ItemArray[i]))
dirty = false;
else
{
dirty = true;
return;
}
i++;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.