private void dataGridView1_ColumnHeaderMouseClick(
object sender, DataGridViewCellMouseEventArgs e)
{
...
// Sort the selected column.
dataGridView1.Sort(newColumn, direction);
newColumn.HeaderCell.SortGlyphDirection =
direction == ListSortDirection.Ascending ?
SortOrder.Ascending : SortOrder.Descending;
}
public CustomersListWrapper(DataGridView gridView)
{
_gridView = gridView;
_gridView.CellClick += dgwCustomersList_CellContentClick;
_gridView.ColumnHeaderMouseClick += dgwCustomersList_ColumnHeaderMouseClick;
ClearGrid();
SetCustomersListHeader();
....
}
private void ClearGrid()
{
_gridView.Rows.Clear();
_gridView.Columns.Clear();
}
private void SetCustomersListHeader()
{
_gridView.Columns.Add(DataGridViewColumnNames.Customers.ID, "Id");
_gridView.Columns.Add(DataGridViewColumnNames.Customers.NAME, "Ime");
_gridView.Columns[1].Width = 360;
_gridView.Columns.Add(DataGridViewColumnNames.Customers.SURNAME, "Priimek");
_gridView.Columns[2].Width = 360;
_gridView.Columns.Add(DataGridViewColumnNames.Customers.ACCOUNT_NUMBER, "Št. računa");
_gridView.Columns[3].Width = 120;
_gridView.Columns.Add(DataGridViewColumnNames.Customers.CUSTOMER_NUMBER, "Št. stranke");
_gridView.Columns[4].Width = 120;
int nLastColumn = _gridView.Columns.Count - 1;
for (int i = 0; i < _gridView.Columns.Count; i++)
{
if (nLastColumn == i)
{
_gridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
...
}
but the problem is that sorting is not working it is always Ascending. I am binding every time new data to the grid dynamically and looks like this reset the grid sorting,
newColumn.HeaderCell.SortGlyphDirection
has correct value but after binding data data is lost and SortGlyphDirection
is None again.
can I somehow remember value of the Column of the gridview after binding?
I suppose you are binding data source from DataTable right? Changing data source resets previous sorting, I think there is more ways how handle this issue:
- store last used sorting order in variable and use DataGridView.DataSourceChanged or DataGridView.DataBindingComplete events to sort your new data source and refresh grid
- store last used sorting order and before attaching new data source sort your source DataTable to sorting order used in DataGridView and change datasource after this