代码之家  ›  专栏  ›  技术社区  ›  Skitzafreak

排序多个DataGridView列时出错

  •  0
  • Skitzafreak  · 技术社区  · 6 年前

    我正在尝试设置一个自定义表单元素,该元素是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 回复  |  直到 6 年前