2

私は Entity Framework (EF) を使用しており、( DbExtensions.ToBindingListメソッドBindingListを使用して) コンテキストから取得できるを持っており、 .DataGridView

目的は、EF テーブルの内容を に表示することなので、フォームのコンストラクターに次のコードを追加DataGridViewして、を に設定し、それをEF から に設定します。DataGridViewDataSourceBindingSourceBindingSourceDataSourceBindingList

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 が表示されます)。DataGridViewDataPropertyNameIsDataBound

IsDataBound更新されていないことが問題のようですが、何SortDataBoundDataGridView_PerformCheck(例外をスローしたメソッド) が正確にチェックするのか、またはなぜ設定されないのかわかりませんIsDataBound

質問を理解するために必要なすべてのコードを提供しようとしましたが、さらに必要な場合はお知らせください。また、S/O に関するいくつかの関連する質問も確認しましたが、どれも役に立ちませんでした。

EDIT:コンストラクター以外の他のメソッドからSortをうまく呼び出すことができるようです。これは、スレッドの問題である可能性があります。

4

1 に答える 1

1

categoryBindSrc.DataSource = _context.Categories.Local.ToBindingList();Sort が呼び出されたときに終了していない別のスレッドを呼び出している必要があるように見えるため、チェックされるいくつかのプロパティがSortDataBoundDataGridView_PerformCheckまだ更新されていません。

したがって、解決策は、そのスレッドが終了した後でメソッドを呼び出すことです。フォームの OnLoad メソッドをオーバーライドし、そこで Sort を呼び出すことで、ユーザーがデータ メンバーを確認する前にデータ メンバーを並べ替えるという効果が得られるように配置するのに適した場所です。

于 2013-01-17T14:23:01.887 に答える