1

ADO EFオブジェクトクラス(Materials)を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();
    }
}
4

1 に答える 1

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(このコードは、クラスが新しいアイテムをDBに追加し、プロパティを介して公開することを前提としていNewMaterialます)

于 2010-08-18T22:10:52.277 に答える