ado.net数据集中的脏记录

时间:2010-01-18 00:02:19

标签: c# wpf visual-studio ado.net dataset

我会试着解释一下。 我想跟踪绑定到窗口(wpf)上的控件的数据集行中的脏记录。

工作正常。假设我开始编辑一些绑定到该dataSet中的dataTable的文本框。在我向文本框添加一个字符后,数据集被标记为脏。

但如果我再次删除该字符(恢复原始值),数据集仍然很脏。 我希望在将原始值恢复到dataSet后变得不脏,因为在实际上它不再是脏的。

我是否需要调用任何方法,因此数据集可以从绑定字段或类似的方法重新计算脏记录。感谢。

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您需要保留原始实体集的副本以进行比较,并在您实际需要知道它是否脏的时候进行“IsDirty”确定,而不是在数据被更改的时候,因此只有可能变脏了。

答案 2 :(得分:1)

您可以检查数据行的rowstate属性,如果Modified,则比较CurrentOriginal 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++;
            }
        }