Reputation: 129
I have a datagridview in my winForm application which is linked to an entity model. This is the code for loading data in datagridview:
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();
Now I want to sort the data upon columnHeader click. I tried this:
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;
}
but, this is throwing exception: Operation can only be performed on cells that belong to a DataGridView control. What should I do?
Upvotes: 0
Views: 1525
Reputation: 717
Just use the Sort method of your datagridview and you get:
DataGridViewColumn column = dgvLoadTable.Columns[e.ColumnIndex];
ListSortDirection direction = isSortAscending ? ListSortDirection.Ascending : ListSortDirection.Descending;
dgvLoadTable.Sort(column, direction);
Upvotes: 2