【问题标题】:Refreshing datagrid from a different form in wpf c#从 wpf c# 中的不同表单刷新数据网格
【发布时间】:2010-12-23 22:19:27
【问题描述】:

我目前正在使用 WPF 开发 C# 应用程序。我有 2 个表格。 Form1 有 DataGrid,我需要做的是从 form2 更新数据库,然后在 form1 的数据网格中重新加载数据。

我该怎么做。非常感谢

【问题讨论】:

    标签: c# wpf wpfdatagrid


    【解决方案1】:

    您可以使用中间类通过事件交换通知。

    示例:

    public static class ApplicationEvents
    {
        public static event EventHandler DataChanged;
    
        public static void NotifyDataChanged()
        {
            EventHandler temp = DataChanged;
            if (temp != null)
            {
                temp(null, EventArgs.Empty);
            }
        }
    }
    

    现在,在Form1Loadevent 中,您可以注册DataChanged event。

    void Form1_Load()
    {
        ApplicationEvents.DataChanged += new EventHandler(ApplicationEvents_DataChanged);
    }
    
    void ApplicationEvents_DataChanged(object sender, EventArgs e)
    {
        // Write code to update DataGrid
    }
    

    因此,无论何时引发该事件,Form1 都知道更新其 DataGrid

    // Suppose in Form2, on a button click you want Form1 to update its DataGrid
    // You just need to call NotifyDataChanged() method
    void Form2_Button1_Click()
    {
        ApplicationEvents.NotifyDataChanged();
    }
    

    【讨论】:

      【解决方案2】:

      你有很多选择。

      一种选择是在 Form1 上为您的集合提供内部/公共属性,该集合具有绑定到数据网格的数据。当您将记录存储到 Form2 上的数据库时,调用 Form1 上的属性并添加/删除记录,如果您有 ObservableCollection,那么它将自动从集合中添加或删除。如果更新记录,则需要在集合中找到它并更新值,如果每个属性都有 INotifyProperty,则 Form1 上的记录将被更新。

      另一种选择是在 Form1 上使用公共/内部方法 UpdateCustomer,因此当您在 Form2 上保存记录时,您调用 Form1.UpdateCustomer(newCustomer) 并且 Form1 将处理新客户。

      我个人喜欢在 Window1 UpateRecord(Customer updatedCustomer) 上有委托。这种方式不是调用属性或方法,而是从任何窗口调用委托并将新值传递给 Window1。这样任何表单都可以调用委托并将新记录传递给表单。

      顺便说一句,如果您使用的是委托/方法/属性应该在 VM 上的 MVVM。

      【讨论】:

        【解决方案3】:

        一种方法是,如果你使用 MVP,

        保存数据库中数据的模型及其与数据库的通信。

        将模型数据映射到视图的演示者。

        视图 - 数据的 UI 表示(即你的 form1 和 form2)

        这两个视图应该共享相同的模型,该模型具有更新的数据(当表单 2 更新数据时,它实际上更新模型和模型然后更新数据库中的数据),两个视图的演示者(不同的演示者观察使用自定义绑定/事件的模型数据)收到更新数据的通知,然后他们可以更新他们的视图(使用数据绑定)。

        【讨论】:

          猜你喜欢
          • 2011-06-15
          • 1970-01-01
          • 1970-01-01
          • 2014-07-29
          • 2012-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-15
          相关资源
          最近更新 更多