对多个DataGridView列进行排序时出错

时间:2018-12-03 19:36:26

标签: vb.net sorting datagridview

我试图设置一个自定义表单元素,该元素是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键,然后按“描述”排序。但是,我不能从描述开始,而要按信息或价格对其进行排序。而且零件编号根本不起作用。

我不确定为什么某些列起作用,而另一些则不起作用。感谢您的协助。

0 个答案:

没有答案