【发布时间】: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<MyType>并在其上定义ICollectionView,这样您就可以根据MyType中的属性名称对集合进行排序. -
它需要能够以编程方式进行排序和绑定,以便在添加/删除/编辑时,DataGridView 会反映这一点。目前我只能得到一个或另一个(虽然编辑工作......只是不能添加/删除)
-
ICollectionView应该为您执行此操作。您可以在 Google 上找到很多示例。 -
Google 搜索让我发现它对 WPF 和 DataGrid 工具很有用。我需要有关 Windows 窗体和 DataGridView 工具的帮助。如果你能为我的情况提供一个例子,那就太好了!
-
糟糕!我完全以为你在谈论 WPF...
标签: c# winforms data-binding datagridview