我正在使用实体框架 (EF),并且BindingList
可以从上下文中获取一个(使用DbExtensions.ToBindingList方法),并且我有一个带有DataGridView
.
目的是在 上显示 EF 表的内容,因此我在表单的构造函数中DataGridView
有以下代码将's设置为 a和 that 's到from EF:DataGridView
DataSource
BindingSource
BindingSource
DataSource
BindingList
categoryBindSrc.DataSource = _context.Categories.Local.ToBindingList();
categoryDataGrid.Sort(categoryDataGrid.Columns["categorySortIdColumn"], ListSortDirection.Ascending);
在此之前,在 Form 生成的代码中,存在以下几行:
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
必须是数据绑定的(它是)并且设置了按列排序的属性DataPropertyName
(它是)这导致列的IsDataBound
属性返回 true(调试时它在监视窗口中显示为 false)
似乎问题在于IsDataBound
没有得到更新,但我不知道SortDataBoundDataGridView_PerformCheck
确切检查什么(引发异常的方法),或者为什么IsDataBound
不设置。
我试图提供您理解问题所需的所有代码,但如果您需要更多代码,请告诉我。我还检查了几个关于 S/O 的相关问题——没有一个答案有帮助。
编辑:看来我可以从构造函数以外的任何其他方法调用 Sort 。这可能是线程问题。