【问题标题】:Add item to Grid's DataSource without rebinding将项目添加到 Grid 的 DataSource 而不重新绑定
【发布时间】:2018-03-20 02:51:36
【问题描述】:

My DataGrid(Windows 窗体应用程序)绑定到匿名类型项目列表。因为它是一个基类,所以我不知道究竟什么匿名类型绑定到网格。

我想访问该列表并添加一个新项目。 我可以使用以下方法提取列表项类型:ListBindingHelper.GetListItemType

我可以使用Activator.CreateInstance创建一个新的完全相同类型的项目

但我找不到从数据源访问List<anonymous> 并将创建的项目添加到列表中的方法。

我当然可以这样做:

var dsList = ((IEnumerable)this.TheGrid.DataSource).OfType<object>().ToList();
dsList.Add(nItem0);
this.TheGrid.DataSource = dsList;

但它会导致重新绑定,我想避免它。只想添加 1 个新行,而不是重新绑定网格中存在的数千个。

有人可以帮忙吗?

【问题讨论】:

  • 抱歉,我没有提到 - 它是一个 Windows 窗体应用程序。我现在已将其添加到我的问题中。
  • DataBinding 101:使用BindingList 而不是List
  • 假设我正在使用匿名类型的 BindingList。我仍然必须能够从我的基类访问它。如果我只能访问作为对象的 DataSource,如何向其中添加项目。?我需要转换它,但我必须对 BindingList 进行转换

标签: c# winforms datagrid datasource anonymous-types


【解决方案1】:

正如Plutonix 建议的那样,我将绑定更改为 BindingSource,现在我可以将 DataSource 对象转换为 BindingSource。

var dsList = this.TheGrid.DataSource as BindingSource;

并添加一个新项目

dsList.Add(nItem0);

无需完全重新绑定。它解决了我的问题。

感谢Plutonix 的好建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2019-07-04
    • 2013-06-14
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多