There's an example of how to control the sorting in the documentation:
DataGridView.ColumnHeaderMouseClick Event (System.Windows.Forms) | Microsoft Docs[
^]
You just need to determine the default sort order based on the sort column in the
ColumnHeaderMouseClick
event handler.
DataGridViewColumn newColumn = dataGridView1.Columns[e.ColumnIndex];
DataGridViewColumn oldColumn = dataGridView1.SortedColumn;
ListSortDirection direction;
if (oldColumn == newColumn)
{
direction = dataGridView1.SortOrder == SortOrder.Ascending
? ListSortDirection.Descending
: ListSortDirection.Ascending;
}
else
{
switch (column.Name)
{
case "XYZ":
direction = ListSortDirection.Descending;
break;
default:
direction = ListSortDirection.Ascending;
break;
}
if (oldColumn != null)
{
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
dataGridView1.Sort(newColumn, direction);
newColumn.HeaderCell.SortGlyphDirection = direction == ListSortDirection.Ascending
? SortOrder.Ascending
: SortOrder.Descending;