我正在尝试将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();
}
}
答案 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
属性公开)