使用实体框架5

时间:2016-04-06 09:58:21

标签: c# entity-framework

我在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;
    }

现在,每件事情都是完美的。 现在,我希望在其他表单中发生更新时重新加载数据。我想定期重新加载它。 有没有办法用实体框架来做到这一点? 谢谢!

1 个答案:

答案 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 FormsChange Notification in Windows Forms Data Binding