gpt4 book ai didi

c# - DataGridView 排序抛出异常: Control must be bound to IBindingList

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:46 26 4
gpt4 key购买 nike

我正在使用 Entity Framework (EF),并且有一个 BindingList 我可以从上下文中获取(使用 DbExtensions.ToBindingList 方法),并且我有一个带有 DataGridView 的表单

目标是在 DataGridView 上显示 EF 表的内容,所以我在表单的构造函数中有以下代码 来设置 DataGridViewDataSourceBindingSource 并且 BindingSourceDataSourceBindingList 来自 EF:

categoryBindSrc.DataSource = _context.Categories.Local.ToBindingList();
categoryDataGrid.Sort(categoryDataGrid.Columns["categorySortIdColumn"], ListSortDirection.Ascending);

在此之前,在表单生成的代码中,存在这些行:

categoryDataGrid.DataSource = categoryBindSrc;
categorySortIdColumn.DataPropertyName = "SortId";

此代码在表单的构造函数中,但当我运行它时,出现以下异常(我截断了堆栈跟踪):

System.InvalidOperationException was unhandled
HResult=-2146233079
Message=DataGridView control must be bound to an IBindingList object to be sorted.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.DataGridView.SortDataBoundDataGridView_PerformCheck(DataGridViewColumn dataGridViewColumn)
at System.Windows.Forms.DataGridView.SortInternal(IComparer comparer, DataGridViewColumn dataGridViewColumn, ListSortDirection direction)
at System.Windows.Forms.DataGridView.Sort(DataGridViewColumn dataGridViewColumn, ListSortDirection direction)

据我了解,BindingList 确实实现了 IBindingList,所以这不应该是问题所在。 Sort方法说明 DataGridView 必须是数据绑定(bind)的(它是)并且设置了按列排序的 DataPropertyName 属性(它是)导致列的IsDataBound 属性返回 true(调试时在监 window 口中显示 false)

看来问题是 IsDataBound 没有得到更新,但我不知道 SortDataBoundDataGridView_PerformCheck(抛出异常的方法)究竟检查了什么,或者为什么 IsDataBound 不会被设置。

我试图提供您理解问题所需的所有代码,但如果您需要更多,请告诉我。我还检查了 S/O 上的几个相关问题——没有一个答案有帮助。

编辑: 看来我可以从构造函数以外的任何其他方法调用 Sort 就好了。这可能是线程问题。

最佳答案

看起来 categoryBindSrc.DataSource = _context.Categories.Local.ToBindingList(); 行必须调用另一个在调用 Sort 时尚未完成的线程,所以有几个属性是由 SortDataBoundDataGridView_PerformCheck 检查尚未更新。

因此,解决方案是在该线程完成后调用该方法。放置它的一个好地方是重写表单的 OnLoad 方法并在那里调用 Sort,这样它仍然可以在用户看到数据成员之前实现对数据成员进行排序的效果。

关于c# - DataGridView 排序抛出异常: Control must be bound to IBindingList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com