【问题标题】:Binding ObservableCollection to DataGridView将 ObservableCollection 绑定到 DataGridView
【发布时间】:2012-08-18 03:25:04
【问题描述】:

我将一个可观察的集合 (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();
        }
    }
}

【问题讨论】:

  • 我为 foodSource.Foods 可观察集合的表单添加了一个监听器,它确实触发了一个添加事件。也许WinForms中的DataGridView不支持ObservableCollections?我知道 MS 确实在推动 WPF,也许这是 WPF 独有的功能?
  • 请参阅this.ObservableCollection 不适用于 DataGridView:它实现 INotifyCollectionChanged,而不是 IBindingList,并且 DataGridView 不知道 INotifyCollectionChanged。它适用于 WPF 绑定,不用于 Windows 窗体。

标签: c# winforms datagridview


【解决方案1】:

ObservableCollection&lt;T&gt; 不适用于 WinForms 控件。

但是BindingList&lt;T&gt; 将按您期望的方式工作。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 2013-09-07
    • 2019-02-24
    • 2011-05-20
    • 2013-03-03
    • 2012-05-26
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多