如何判断datagridview列的当前排序方向是什么?

时间:2014-06-09 14:56:45

标签: c# vb.net sorting datagridview

所以,我目前正在开发一个包含大量列标题的datagridview表。我希望标题文本“真正”居中(没有排序图标)。所以我正在删除排序功能,而是编写代码,以便在单击列标题时,如果它按一种方式排序(升序)以另一种方式排序(降序)。

问题:是否有属性或简单方法来说明列当前是如何排序的?我有字符串和整数列。

   Private Sub CameraTable_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles cameraTable.ColumnHeaderMouseClick

    'in case edits aren't committed
    If cameraTable.IsCurrentRowDirty Or cameraTable.IsCurrentCellInEditMode Then
        cameraTable.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If

    Dim selectedColumn As DataGridViewColumn = _
    cameraTable.Columns(e.ColumnIndex)

  'pseudo code

     if selectedcolumn.isDesecnding() then 
        cameraTable.Sort(selectedColumn, System.ComponentModel.ListSortDirection.Ascending)
     End if 


End Sub

1 个答案:

答案 0 :(得分:0)

由于整个DGV只能按一列排序,因此您不需要基于列的LastSort类型设置或属性。也就是说,列不是独立于网格排序的。

如果您自己处理这些问题,则只需要模仿DGV的标准SortedColumnSortedOrder属性。如果你自己做这个,我不确定DGV会更新这些。

 Public Sub SortBy(colIndex As Integer, sortOrd As SortOrder)

      ' if this sort is on a new column, start with ASC
      ' else flip the order
      If colIndex <> SortedColumn Then
          SortedOrder = SortOrder.Asc
      Else
          SortedOrder = If(SortedOrder = SortOrder.Asc, 
                               SortOrder.Desc, SortOrder.Asc)
      End if

      SortedColumn = colIndex

      ' exec the sort
      ApplySort(sortType)
  End Sub

根据您的排序方式,您可能需要自己的IComparer(s)来处理Text和Value列。同时,您的代码将不得不拒绝对Date和Combo Type列进行排序。