我在winform应用程序上使用实体框架5。我的表单上有一个datagridView,它包含来自我的数据库的数据:
public partial class Form1 : Form
{
etudiantEntities cont = new etudiantEntities();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cont.etudiant1.Load();
etudiant1DataGridView.DataSource = cont.etudiant1.Local;
}
现在,每件事情都是完美的。 现在,我希望在其他表单中发生更新时重新加载数据。我想定期重新加载它。 有没有办法用实体框架来做到这一点? 谢谢!
答案 0 :(得分:1)
你一次有五个问题。写一个正确的答案需要一本书(我建议你去读一读),所以这个答案是你可以用来了解更多的总结。
首先,您需要详细说明"当其他形式的更新发生时#34; 。您需要检测此更改。如何做到这一点取决于该形式的工作原理。希望它确实使用数据绑定和INotifyPropertyChanged
,请参阅Raise an event whenever a property's value changed?。
然后在这些"其他表格"上,您订阅了他们的模型PropertyChanged
事件,并将其作为每个表单上的事件传播。请务必在适当的时候取消订阅。在表单的PropertyChanged
事件处理程序中,您引发了一个特定于该表单的事件,例如MyModelChanged
。
现在您有一个表单可以通过订阅该事件来通知感兴趣的各方事件。
这样的事情:
var yourEditForm = new YourEditForm();
yourEditForm.MyModelChanged += this.YourEditForm_MyModelChanged;
yourEditForm.Show();
现在放置此代码非常重要。使用多个表单时,您需要彼此通信,您需要某种"控制器" (或给它一个名字),知道与你的申请相关的所有表格和他们的活动,并将它们联系在一起。
因此,在您的控制器中,您现在拥有上述代码和此事件处理程序:
private void YourEditForm_MyModelChanged(object sender, EventArgs e)
{
}
现在在那个事件处理程序中,您可以让恰当命名的Form1
重新加载其数据。你可以通过公开一个公共方法来做到这一点:
public void RefreshGrid()
{
cont.etudiant1.Load();
etudiant1DataGridView.DataSource = cont.etudiant1.Local;
}
你的"刷新"。您可以在上面显示的事件处理程序中调用form1.RefreshGrid()
。
请注意,所有这些都是一起被黑客攻击。去阅读一两个关于WinForms中的数据绑定的教程,以便正确处理,因为手动操作将是一个难以维护的问题。
您可以先阅读MSDN上的Data Binding and Windows Forms和Change Notification in Windows Forms Data Binding。