在wpf c#中刷新来自不同表单的数据网格

时间:2010-12-23 22:19:27

标签: c# wpf wpfdatagrid

我目前正在使用WPF开发一个C#应用程序。我有两种形式。 Form1有DataGrid,我需要做的是从form2更新数据库,然后在form1上的datagrid中重新加载数据。

我该怎么做?非常感谢

3 个答案:

答案 0 :(得分:1)

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

实施例

public static class ApplicationEvents
{
    public static event EventHandler DataChanged;

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

现在,在Form1的{​​{1}}事件中,您可以注册Load事件。

DataChanged

因此,无论何时提出该事件,void Form1_Load() { ApplicationEvents.DataChanged += new EventHandler(ApplicationEvents_DataChanged); } void ApplicationEvents_DataChanged(object sender, EventArgs e) { // Write code to update DataGrid } 都知道更新其Form1

DataGrid

答案 1 :(得分:0)

你有很多选择。

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

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

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

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

答案 2 :(得分:0)

如果你去MVP,那就是一种方式,

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

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

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

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