所以,我目前正在开发一个包含大量列标题的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)
由于整个DGV只能按一列或排序,因此您不需要基于列的LastSort类型设置或属性。也就是说,列不是独立于网格排序的。
如果您自己处理这些问题,则只需要模仿DGV的标准SortedColumn
和SortedOrder
属性。如果你自己做这个,我不确定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列进行排序。