将ObservableCollection绑定到DataGridView

时间:2012-08-18 03:25:04

标签: c# winforms datagridview

我将一个可观察的集合(FoodList)绑定到我的WinForm中的BindingSource。此BindingSource由表单上的数据网格使用。我假设当我向集合中添加一个新项目时,它会引发一个事件,并且我的网格中会出现一个新行。但这不会发生。

namespace Foods
{
    public class FoodList : ObservableCollection<Food>
    {

    }
}

private void frmFoods_Load(object sender, EventArgs e)
{
    try
    {
        foodSource = new Source("Foods.xml");
        foodBindingSource.DataSource = foodSource.Foods;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private void AddFood()
{
    using (frmFood frm = new frmFood())
    {
        frm.ShowDialog(this);
        if (!frm.Canceled)
        {
            foodSource.Foods.Add(frm.Food);     // <-- No new row.
            //foodBindingSource.ResetBindings(false);
            foodDataGridView.ClearSelection();
            foodDataGridView.CurrentCell = foodDataGridView[0, foodDataGridView.Rows.Count - 1];
            foodDataGridView.Focus();
        }
    }
}

1 个答案:

答案 0 :(得分:6)

ObservableCollection<T>不适用于WinForms控件。

然而,BindingList<T>将按您期望的方式运作。