Как определить текущее направление сортировки столбца datagridview?

1

Итак, я сейчас работаю над таблицей 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
  • 0
    Я бы добавил в форму пользовательское свойство для хранения порядка сортировки.
  • 0
    Есть свойство datagridview.sortorder, которое говорит вам, как оно в целом отсортировано, но я говорю больше о встроенных столбцах. Я больше надеялся увидеть, смогу ли я получить текущий столбец, на который смотрю, а затем посмотреть, как он отсортирован прямо сейчас.
Показать ещё 1 комментарий
Теги:
sorting
datagridview

1 ответ

0

Поскольку весь DGV можно сортировать только по одному столбцу или другому, вам не нужно устанавливать тип или свойство типа LastSort на основе столбцов. То есть столбцы не сортируются независимо от сетки.

Если вы сами обрабатываете сортировку, вам просто нужно будет подражать стандартным SortedColumn и SortedOrder DGV. Я не уверен, что 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 для обработки столбцов Text и Value. Между тем, ваш код придется отклонять для сортировки столбцов Date и Combo Type.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню