我正在使用實體框架(EF),並有一個BindingList
我可以從上下文(使用DbExtensions.ToBindingList方法),並且我有一個形式與DataGridView
。DataGridView排序拋出異常:控件必須綁定到IBindingList
目的是在DataGridView
顯示EF表中的內容,所以我在窗體的構造以下代碼設置DataGridView
的DataSource
到BindingSource
和BindingSource
的DataSource
到BindingList
從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
必須是數據綁定的(它是),並且按列排序的DataPropertyName
屬性被設置(它是),這導致列的IsDataBound
屬性返回true(當調試它在手錶中顯示false時窗口)
看來這個問題是IsDataBound
是沒有得到更新,但我不知道是什麼SortDataBoundDataGridView_PerformCheck
(方法拋出異常)檢查準確,或者爲什麼IsDataBound
不會被設置。
我試圖提供你需要的所有代碼來理解問題,但讓我知道你是否需要更多。我還檢查了幾個有關S/O的相關問題 - 沒有一個答案有幫助。
編輯:它看起來我可以調用排序只是從任何其他方法罰款除了構造函數。這可能是一個線程問題。
嘗試將datagridview數據源直接設置爲IBindingList。 – 2013-01-16 19:18:42
工作。謝謝!雖然我正在使用'BindingSource'與'BindingNavigator'進行通信,但是我會利用它來看看我能否解決問題。 – mjohnsonengr
編輯指出排序在窗體的構造函數中調用,但可以從其他地方調用。 – mjohnsonengr