我正在尝试设置一个自定义表单元素,该元素是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键,然后按说明排序。不过,我不能从描述开始,然后按信息或价格排序。零件号根本不起作用。
我不清楚为什么有些专栏有效,而有些则不行。任何帮助都是值得感谢的。