Databind ADO.NET实体框架到ListBox

时间:2010-08-18 21:36:49

标签: c# data-binding ado.net-entity-data-model

我正在尝试将ADO EF对象类(材质)附加到ListBox,并在将新材质添加到数据库时自动更新。

在我目前的代码中,它会在设置控件数据源之前显示数据库中的所有项目,但不会更新。

我知道我在这里缺少一些基本的东西。非常感谢任何帮助!

public partial class Main : KryptonForm
{
    private AGAEntities db = new AGAEntities();
    public Main()
    {
        InitializeComponent();
    }

    private void Main_Load(object sender, EventArgs e)
    {
        matList.DataSource = db.Materials;
        matList.DisplayMember = "Name";
    }

    private void newMat_Click(object sender, EventArgs e)
    {
        AddMaterial form = new AddMaterial();
        form.ShowDialog();
    }
}

1 个答案:

答案 0 :(得分:1)

这是因为db.Materials在添加项目时不会发出通知。您应该使用BindingList<T>作为DataSource

private BindingList<Material> _materials;

private void Main_Load(object sender, EventArgs e)
{
    _materials = new BindingList<Material>(db.Materials);
    matList.DataSource = _materials;
    matList.DisplayMember = "Name";
}

private void newMat_Click(object sender, EventArgs e)
{
    AddMaterial form = new AddMaterial();
    if (form.ShowDialog() == DialogResult.OK)
    {
        _materials.Add(form.NewMaterial);
    }
}

(此代码假定您的AddMaterial类将新项目添加到数据库并通过NewMaterial属性公开)