我试图设置一个自定义表单元素,该元素是DataGridView的扩展,以添加一些附加功能。现在,我正在尝试通过按住CTRL键,使用户能够按多列对DataGridView中的数据进行排序。这是我目前的代码:
Public Class CustomerDataGrid
Inherits DataGridView
Private _tableData As DataTable = New DataTable()
Private _bindSource As BindingSource = New BindingSource()
Private _sortColumns As List(Of String) = New List(Of String)
Public Sub SetData(ByVal data As DataTable)
_bindSource.Sort = Nothing
_bindSource.DataSource = Nothing
_tableData = data
_bindSource.DataSource = _tableData
Me.DataSource = _bindSource
End Sub
Private Sub Self_ColumnHeaderClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles Me.ColumnHeaderMouseClick
Dim colString As String = ""
If _sortColumns Is Nothing Then _sortColumns = New List(Of String)
If e.Button = MouseButtons.Left Then
If (Control.ModifierKeys And Keys.Control = Keys.Control) Then
_sortColumns.Add(Me.Columns(e.ColumnIndex).Name)
For Each str As String In _sortColumns
colString = colString & str & " ASC, "
Next
colString = colString.Remove(colString.LastIndexOf(","))
_bindSource.Sort = colString
Else
_sortColumns.Clear()
_sortColumns.Add(Me.Columns(e.ColumnIndex).Name)
Else
Return
End If
End Sub
我的代码有一个奇怪的错误,它可以在其中运行,但仅适用于特定的列。例如,我有一个零件列表设置,其中包含以下列:
Part Number | Description | Information | Price
如果我先按信息或价格排序,则可以按住CTRL键,然后按“描述”排序。但是,我不能从描述开始,而要按信息或价格对其进行排序。而且零件编号根本不起作用。
我不确定为什么某些列起作用,而另一些则不起作用。感谢您的协助。