Итак, я сейчас работаю над таблицей 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
Поскольку весь 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.