我会试着解释一下。 我想跟踪绑定到窗口(wpf)上的控件的数据集行中的脏记录。
工作正常。假设我开始编辑一些绑定到该dataSet中的dataTable的文本框。在我向文本框添加一个字符后,数据集被标记为脏。
但如果我再次删除该字符(恢复原始值),数据集仍然很脏。 我希望在将原始值恢复到dataSet后变得不脏,因为在实际上它不再是脏的。
我是否需要调用任何方法,因此数据集可以从绑定字段或类似的方法重新计算脏记录。感谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
您需要保留原始实体集的副本以进行比较,并在您实际需要知道它是否脏的时候进行“IsDirty”确定,而不是在数据被更改的时候,因此只有可能变脏了。
答案 2 :(得分:1)
您可以检查数据行的rowstate
属性,如果Modified
,则比较Current
和Original
DataRowVersions中的值。如果您的第二次更改使值与原始值相同,那么您可以调用RejectChanges
,但这将拒绝该行上的所有更改。您必须手动跟踪每个字段,因为数据集仅保留每行或每个表的更改,并且任何更改都是更改,即使您设置了相同的值。
答案 3 :(得分:1)
嗯,有一些工作,只是想分享。到现在为止还挺好。谢谢大家的答案,帮助了我很多。下一步是将此功能构建到自定义控件中:)。
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++;
}
}