Привязка данных ADO.NET Entity Framework к ListBox - PullRequest
1 голос
/ 19 августа 2010

Я пытаюсь присоединить объектный класс 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 Ответ

1 голос
/ 19 августа 2010

Это потому, что 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)

...