首页 > 解决方案 > DataGridView 列排序方向始终为 asc

问题描述

我正在尝试使用来自数据表的数据源的总行对 datagridview 进行排序。我想要实现的是在每次用户单击数据网格列时排除总行排序。我正在使用 DataGridViewCellMouseEventArgs 来捕获此事件。这是我的代码:

    private void dgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {  
        DataGridView dgv = sender as DataGridView;
        var columnSortDirection = string.Empty;
        var columnName = dgv.SortedColumn.DataPropertyName;

        if (dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection == SortOrder.Descending)
        {
            columnSortDirection = "DESC";
        }
        else
        {
            columnSortDirection = "ASC";
        }

        //remove total row before sort
        var lastRow = dt.Rows[dt.Rows.Count - 1];
        dt.Rows.Remove(lastRow);

        //sort datatable
        DataView dv = dt.DefaultView;
        dv.Sort = string.Format("{0} {1}", columnName, columnSortDirection);
        DataTable sortedDt = dv.ToTable();

        //reinserting total row after dt is sorted
        InsertTotalRow(sortedDt); 
        dgv.DataSource = sortedDt;
    }

该代码仅适用于升序,但不适用于其他。无论出于何种原因,当用户再次单击该列时,它永远不会将方向更改为下降。我在这里做错了什么?

标签: c#winformssortingdatagridview

解决方案


推荐阅读