2016-10-13 14 views
1

私は、Entity Frameworkライブラリを使用してリモートのmysqlデータベースに接続するWindowsフォームアプリケーションを実装しました。 、データが正しく表示されます。ただし、列見出しをクリックすると、昇順または降順でデータが並べ替えられません。DbSetコレクションにバインドされたDatagridViewをソートする方法クリックしたカラムのヘッダ値の順に

さらに詳細:

は、私が使用してのDataGridViewのデータソースを設定します。このコードは、私が表示しようとしているフォームのlistLoadイベント上で実行される

using (databaseContext db = new databaseContext()) 
{ 
    myDataGridView.DataSource = db.someTable.ToArray(); 
    foreach (DataGridViewColumn column in myDataGridView.Columns) 
    { 

     myDataGridView.Columns[column.Name].SortMode = DataGridViewColumnSortMode.Automatic; 
    } 
} 

答えて

1

ソートモードがAutomaticになるようにするには、ソートをサポートするIBindingListの実装を使用する必要があります。 DbSet<T>LocalプロパティのToBindingList方法は、ソート可能なBindingList<T>を返し、Entity Frameworkの使い方:

//using System.Data.Entity; 
using (var db = new MyDbContext()) 
{ 
    db.SomeTable.Load(); 
    dataGridView1.DataSource = db.SomeTable.Local.ToBindingList(); 
} 

注: は、あなたが最初にIQueryableを列挙し、実際にそれを変換するためにLoadまたはToList()を呼び出すことにより、DbSetにデータをロードする必要がありますデータ。次に、データはLocalプロパティに格納されます。

Loadは、IQueryableの拡張メソッドであり、ToListを呼び出して実際にリストを作成するオーバーヘッドなしにリストを投げるのと同じです。

+0

私はそれを使ってみましたが、フォームを表示すると、テーブル自体のデータは表示されません。 –

+0

最初にデータを読み込む必要があります。データをロードすることを忘れている可能性があります。 –

+0

IQueryableを列挙して実際のデータに変換するには、まず 'Load'または' ToList() 'を呼び出すことによってデータを 'DbSet'に' Load'する必要があります。次に、データは 'Local'プロパティにあります。 –

関連する問題