c# - 如何确定新创建的对象是否具有用户设置的任何属性值

标签 c# winforms linq datacontext

这可能是软件设计或模式问题。

使用 LINQ to SQL 的 C# Wnforms 解决方案。 有一个表单允许用户编辑客户对象的属性值。

如果用户想要创建一个新的客户,那么将向表单传递一个新的客户。

如果用户想要编辑现有客户,则将表单传递给现有客户。

当用户尝试关闭表单时,系统会检查是否需要保存对属性值的编辑,并提示用户保存更改:

 protected Boolean CanExit()
    {
        Boolean isSaveNeeded = false;
        String message = String.Empty;

        if (dataContext.GetChangeSet().Updates.Contains(lookupObject))
        {
            message = "Save your changes before closing?";
            isSaveNeeded = true;
        }
        else if (dataContext.GetChangeSet().Inserts.Contains(lookupObject))
        {
            message = String.Format("Save new {0} before closing?", lookupSingularName);
            isSaveNeeded = true;
        }

        if (isSaveNeeded && XtraMessageBox.Show(message, "Close Form", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
        { return ActionSave(); }
        else
        { return true; }
    }

这有两个问题:

  1. 提示为未设置属性的新客户保存。

  2. 如果用户编辑了属性值,然后将该值更改回其原始值,则提示保存

我有一个使用 ADO“原始值”解决这两个问题的模式。

使用 DataContext 解决问题的最佳方法是什么?

最佳答案

您可以使用 Memento 设计模式轻松解决它,(这样您可以比较对象 - 编辑前后)

您可以在此处查看 wiki 详细信息。

https://en.wikipedia.org/wiki/Memento_pattern

并且可以查看纪念品上的文章。

http://www.codeproject.com/Articles/186184/Memento-Design-Pattern

关于c# - 如何确定新创建的对象是否具有用户设置的任何属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132561/

相关文章:

c# - 如何使用 Xamarin.Forms 显示相机流。是否可以?

C# 如何对地址进行地理编码

c# - WinForms 标签内的超链接

c# - UltraWinGrid:如何刷新显示的数据

c# - 文本框对象的文本更改事件 : how to perform text change + another action

c# - 如何优雅地卸载有线程运行的子 AppDomain

c# - 数据绑定(bind) Winforms 文本框

asp.net-mvc - 过滤 Kendo UI MVC 网格时构建自定义谓词

c# - 确定 XDocument 文件是否存在

c# - 如何获得符合条件的通用列表元素的平均值?