我目前正在使用WPF开发一个C#应用程序。我有两种形式。 Form1有DataGrid,我需要做的是从form2更新数据库,然后在form1上的datagrid中重新加载数据。
我该怎么做?非常感谢
答案 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更新数据时它实际更新模型和模型然后更新数据库中的数据),两个视图的演示者(不同的演示者观察通过更新数据通知使用自定义绑定/事件的模型数据,然后他们可以更新视图(使用数据绑定)。