【问题标题】:ado.net dirty records in datasetado.net 数据集中的脏记录
【发布时间】:2011-01-06 04:38:12
【问题描述】:

我会尽力解释。 我想跟踪绑定到窗口控件 (wpf) 的数据集行中的脏记录。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 只是为了详细说明。我需要这个功能在“表单”上显示指示器,无论数据是否发生变化,在编辑过程中,而不是之后,所以我想我需要在绑定字段以任何方式发生变化时运行检查。
      【解决方案3】:

      您可以检查数据行的rowstate 属性,如果是Modified,则比较CurrentOriginal DataRowVersions 中的值。如果您的第二次更改使值与原始值相同,那么您可以调用RejectChanges,但这将拒绝该行的所有更改。您必须手动跟踪每个字段,因为数据集仅保留每行或每表的更改,并且任何更改都是更改,即使您设置了相同的值。

      【讨论】:

        【解决方案4】:

        嗯,有一些工作,只是想分享。到目前为止,一切都很好。谢谢大家的回答,对我帮助很大。下一步是将此功能构建到自定义控件中:)。

                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++;
                    }
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多