2010-12-16 9 views
18

にリンクされているDataGridViewがあります。 BindingSourceは、エンティティのIQueryableリストにリンクされているマイEF4エンティティにリンクされているバインディングソースにバインドされたDataGridViewを並べ替える方法

public void BindTo(IQueryable elements) 
    { 
     BindingSource source = new BindingSource(); 
     source.DataSource = elements; 

     bindingNavigator1.BindingSource = source; 
     dataGridView1.DataSource = source; 

    } 

私は、ユーザーがデータをソートするために、グリッドのヘッダーをクリックできるようにしたいと思っています - これは仕事を得るのに苦労します。出来ますか?もしそうなら、どうすればいいですか?

+0

注:DataGridViewはWPFではなくWindowsフォームであるようです。 WPF DataGridの並べ替えの問題の解決策を見つけることを希望していた人々のために。 – OneWorld

答えて

11

私は最近、この同じ問題で苦労しました。 IQueryableインターフェイスはデータを自動的にソートする方法を知るためにDataViewGridに十分な情報を提供していないようです。あなたはそれを使用するか、私がやったんや手動で並べ替え機能を扱うことができるものを使用してエンティティソースからあなたのコレクションを再パッケージ化するかがあります。

 private void myDataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
    DataGridViewColumn column = myDataGridView.Columns[e.ColumnIndex]; 

    _isSortAscending = (_sortColumn == null || _isSortAscending == false); 

    string direction = _isSortAscending ? "ASC" : "DESC"; 

    myBindingSource.DataSource = _context.MyEntities.OrderBy(
     string.Format("it.{0} {1}", column.DataPropertyName, direction)).ToList(); 

    if (_sortColumn != null) _sortColumn.HeaderCell.SortGlyphDirection = SortOrder.None; 
    column.HeaderCell.SortGlyphDirection = _isSortAscending ? SortOrder.Ascending : SortOrder.Descending; 
    _sortColumn = column; 
    } 

私はそれが役に立てば幸い。

+0

更新を許可する際にこれを行う方法はありますか? ToList()を使用すると、一時リストに書き込むことができます。ToListを使用しないと、DataGridViewはIOrderedEnumerableにバインドされているレコードを追加することを無効にしているようです... –

+1

ObjectQuery.OrderByを呼び出し、IEnumerable.OrderByではなく、更新可能なバインディングを維持します。 –

0

VB.NET

あなたはLINQの構文でのBindingSourceを使用している場合は、エンティティのframworkオブジェクト「NCFileからのDataGridViewに関連付けられているbindningsourceをロードするときは、この場合、この

のようなあなたのデータを並べ替えることができますNCFilePartSet 『

bsFileSections.DataSource = From ncfps In NCFile.NCFilePartSet Order By ncfps.Sort Select ncfps 

またはこのような

」のリストに、外国の列を有します』
bsFileSections.DataSource = NCFile.NCFilePartSet.OrderBy(Function(ncfps) ncfps.Sort) 
「ソート」は実体上のNCFilePartSet

の列

アップデートで

はい、EFに結合したときに簡単にソート可能なDGVを持っている可能それをで作業を続けると、データベースに戻し

+2

OPは「[let] my users ...グリッドヘッダーをクリックしてデータを並べ替える」ソート列をハードコーディングすると答えが出ますが、ユーザーがソート列を変更して編集/追加したデータを失わないようにするにはどうすればデータバインディングを処理できますか?私はそれがここで本当の挑戦だと思う。 – Pat

0

を反映していますデータ。 BLW libraryBindingListViewHow do I implement automatic sorting of DataGridView?もご覧ください)を使用してください。私のテストで

public void BindTo(IQueryable elements) 
{ 
    BindingSource source = new BindingSource(); 
    source.DataSource = new BindingListView(elements.ToList()); 

    bindingNavigator1.BindingSource = source; 
    dataGridView1.DataSource = source; 

} 

.ToList()は、(上記のように)、コンストラクタ内で呼び出された場合でも、変更は私を驚かせたDBに増殖させました。

関連する問題