2014-12-22 42 views
0

我在我的winForm應用程序鏈接到一個實體模型datagridview。這是在datagridview中加載數據的代碼:在數據綁定gridview不能正常工作

var rawData = context.GetType().GetProperty(TableName).GetValue(context, null); 
var truncatedData = ((IQueryable<object>)rawData).ToList(); 
crudBindingSource.DataSource = new BindingSource { DataSource = truncatedData }; 
dgvLoadTable.DataSource = crudBindingSource; 
dgvLoadTable.Refresh(); 

現在我想按columnHeader點擊排序數據。我嘗試這樣做:

private void dgvLoadTable_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    DataGridViewColumn column = dgvLoadTable.Columns[e.ColumnIndex]; 
    DataGridViewColumn _sortColumn = null; 
    bool isSortAscending = false; 
    isSortAscending = (_sortColumn == null || isSortAscending == false); 
    string direction = isSortAscending ? "ASC" : "DESC"; 
    crudBindingSource.DataSource = context.TableName.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; 
    //exception here 
    _sortColumn = column; 
} 

但是,這引發異常:操作只能在屬於DataGridView控件的細胞來進行。我該怎麼辦?

+0

沒有DataGrid中做排序已經當您啓用了嗎?你想要做一些自定義排序嗎? – Sefa

+0

不,它不自己排序,我正在嘗試手動執行 – Paradox

+0

您不需要實現您自己的排序算法,請嘗試使數據源可排序。 [This](http://stackoverflow.com/a/5556482/815938)可能會幫助你。 – kennyzx

回答

2

只需使用你的datagridview的Sort方法,你會得到:

DataGridViewColumn column = dgvLoadTable.Columns[e.ColumnIndex]; 
ListSortDirection direction = isSortAscending ? ListSortDirection.Ascending : ListSortDirection.Descending; 

dgvLoadTable.Sort(column, direction); 
+1

中有一些不必要的陳述,你可以寫一個SortAscending.checked(radiobutton)而不是一個我們不知道如何分配它的變量(根據它在鼠標點擊事件) – niceman

+0

如果DataGridView控件綁定到不支持排序的IBindingList,則無法排序 – Paradox

+0

這裏是一個鏈接到與DataGridView排序有關的以前的帖子[鏈接](http://stackoverflow.com/questions/1699642/how -to-排序數據綁定-datagridview的列?RQ = 1) – Paradise228