【问题标题】:DataGridView not updating when bound BindingList is changed更改绑定的 BindingList 时 DataGridView 不更新
【发布时间】:2013-06-10 01:53:57
【问题描述】:

问题:我有一个 C# DataGridView(Windows 窗体)。我已将其 DataSource 设置为我在网上找到的自定义 SortableBindingList。当我在绑定列表中添加/删除项目时,DataGridView 不会更新,直到我重置 DataSource。但是,如果我不使用这个自定义的 SortableBindingList 并使用标准的 BindingList,那么它会按预期工作。但我需要能够排序。我正在使用 EntityFramework,如果有帮助的话。

我试过了:让我的实体继承INotifyPropertyChanged。无论出于何种原因,这都无济于事。我还尝试了来自网络的各种 SortableBindingLists,但没有找到一个在我的上下文中需要它来工作。我试过修改我发现的这个,但到目前为止还没有运气。如果不让这篇文章达到 10,000 行长,很难具体说明。

要求: 一个工作的 SortableBindingList,可以以编程方式排序并具有绑定(从列表中添加/删除反映在 DataGridView 上)。理想情况下,它的使用方式与我目前在下面的代码中使用它的方式类似(以防止过多的重构)。或者对我做错的事情进行一些修复,因为它可能真的很明显。我使用的 SortableBindingList 取自 this article

一些可能有帮助的代码:

使用以下正确绑定并按预期添加/删除,但我无法排序:

this.binding.DataSource = this.context.SomeEntityList.Local.ToBindingList();

其中“SomeEntityList”的类型为IDbSet<SomeEntity>

--

使用以下任何代码都可以进行排序,但不会按预期添加/删除:

this.binding.DataSouce = new SortableBindingList<SomeEntity>(this.context.SomeEntityList);
this.binding.DataSouce = new SortableBindingList<SomeEntity>(this.context.SomeEntityList.ToList());
this.binding.DataSouce = new SortableBindingList<SomeEntity>(this.context.SomeEntityList.Local);
this.binding.DataSouce = new SortableBindingList<SomeEntity>(this.context.SomeEntityList.Local.ToList());
this.binding.DataSouce = new SortableBindingList<SomeEntity>(this.context.SomeEntityList.Local.ToBindingList());

--

我正在像这样设置 DataGridView 的 DataSouce:

this.DataGridView.DataSouce = this.binding;

--

非常感谢任何帮助!

谢谢,安迪

【问题讨论】:

  • 如果您的意图只是对列表进行排序,您可以使用ObservableCollection&lt;MyType&gt; 并在其上定义ICollectionView,这样您就可以根据MyType 中的属性名称对集合进行排序.
  • 它需要能够以编程方式进行排序和绑定,以便在添加/删除/编辑时,DataGridView 会反映这一点。目前我只能得到一个或另一个(虽然编辑工作......只是不能添加/删除)
  • ICollectionView 应该为您执行此操作。您可以在 Google 上找到很多示例。
  • Google 搜索让我发现它对 WPF 和 DataGrid 工具很有用。我需要有关 Windows 窗体和 DataGridView 工具的帮助。如果你能为我的情况提供一个例子,那就太好了!
  • 糟糕!我完全以为你在谈论 WPF...

标签: c# winforms data-binding datagridview


【解决方案1】:

我感受到了你的痛苦,我在同一个问题上挣扎了好几个小时。事实证明,您无法对自定义对象列表进行排序,无论它是 SortableBindingList 还是 BindingList。

尝试改用 BindingListView:http://blw.sourceforge.net/ 使用 BindingListView 作为 DataGridView 的来源。这将允许您拥有一个可排序的列表,并且在添加或删除项目后更新它没有问题。

如果您需要示例解决方案,请告诉我。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多