私は Entity Framework (EF) を使用しており、( DbExtensions.ToBindingListメソッドBindingList
を使用して) コンテキストから取得できるを持っており、 .DataGridView
目的は、EF テーブルの内容を に表示することなので、フォームのコンストラクターに次のコードを追加DataGridView
して、を に設定し、それをEF から に設定します。DataGridView
DataSource
BindingSource
BindingSource
DataSource
BindingList
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
実装します。Sortメソッドは、データ バインドする必要がある (そうである) こと、および列ごとの並べ替えのIBindingList
プロパティが設定されている (そうである)ことを示します。これにより、列のプロパティが true を返します (デバッグ時に、ウォッチ ウィンドウに false が表示されます)。DataGridView
DataPropertyName
IsDataBound
IsDataBound
更新されていないことが問題のようですが、何SortDataBoundDataGridView_PerformCheck
(例外をスローしたメソッド) が正確にチェックするのか、またはなぜ設定されないのかわかりませんIsDataBound
。
質問を理解するために必要なすべてのコードを提供しようとしましたが、さらに必要な場合はお知らせください。また、S/O に関するいくつかの関連する質問も確認しましたが、どれも役に立ちませんでした。
EDIT:コンストラクター以外の他のメソッドからSortをうまく呼び出すことができるようです。これは、スレッドの問題である可能性があります。