DataGridViewColumn initial sort direction

2019-04-28 22:49发布

I'm working in VS2008 on a C# WinForms app. By default when clicking on a column header in a DataGridView it sorts that column Ascending, you can then click on the column header again to sort it Descending.

I am trying to reverse this, so the initial click sorts Descending then the second click sorts Ascending and I haven't been able to figure out how to do this. Does anyone know?

Thanks

4条回答
来,给爷笑一个
2楼-- · 2019-04-28 23:26

I suggest below code

MyDGV.Sort(MyDGV.Columns[column_Index], ListSortDirection.Ascending);
查看更多
祖国的老花朵
3楼-- · 2019-04-28 23:33

Take a look at DataGridView.SortCompare. See slightly modified version of the msdn example below:

private void dataGridView1_SortCompare(object sender,
        DataGridViewSortCompareEventArgs e)
    {
        // Try to sort based on the cells in the current column.
        e.SortResult = System.String.Compare(
            e.CellValue2.ToString(), e.CellValue1.ToString()); // descending sort

        e.Handled = true;
    }
查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-04-28 23:34
foreach (DataGridViewColumn column in DataGridView1.Columns)
{
    column.SortMode = DataGridViewColumnSortMode.Programmatic;
}

and

private void DataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    var column = DataGridView1.Columns[e.ColumnIndex];
    if (column.SortMode != DataGridViewColumnSortMode.Programmatic)
        return;

    var sortGlyph = column.HeaderCell.SortGlyphDirection;
    switch (sortGlyph)
    {
        case SortOrder.None:
        case SortOrder.Ascending:
            DataGridView1.Sort(column, ListSortDirection.Descending);
            column.HeaderCell.SortGlyphDirection = SortOrder.Descending;
            break;
        case SortOrder.Descending:
            DataGridView1.Sort(column, ListSortDirection.Ascending);
            column.HeaderCell.SortGlyphDirection = SortOrder.Ascending;
            break;
    }
}
查看更多
Explosion°爆炸
5楼-- · 2019-04-28 23:38

You can set the HeaderCell SortGlyphDirection to Ascending, and then the next click will give you the descending order. The default is none.

dataGridView1.Sort(Column1, ListSortDirection.Ascending);
this.Column1.HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
查看更多
登录 后发表回答