VB.Net通过多列对DataGridView进行排序

时间:2018-12-03 14:59:50

标签: vb.net sorting datagridview

我正在VB.Net中创建自定义表单元素,以向DataGridView添加一些其他功能。

我要添加的功能之一是允许用户按多列对DGV中的数据进行排序的功能。

这是我希望它的工作方式:

  1. 当用户单击列时,它将对数据进行相应的排序
  2. 如果用户在单击列时按住CTRL键,则除了对先前已排序的列进行排序外,还将对该列进行排序。

所以让我们说我有一个列的DGV:

Parts | Supplier | Category

如果我正常单击Supplier列,它将对数据进行升序或降序排序。现在,如果我已经按住Category并要进行排序,请按住CTRL键并单击Supplier,然后将DGV依次按“供应商”和“类别”进行排序。

这是我到目前为止的代码:

Public Class CustomDataGrid
    Inherits DataGridView

    Private _tableData As DataTable = New DataTable()
    Private _sortColumns As List(Of String) = New List(Of String)
    Private _bindSource As BindingSource = New BindingSource()

    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(","))
                Dim view As DataView = _tableData.DefaultView
                view.Sort = colString
                _bindSource.DataSource = view
            Else
                _sortColumns.Clear()
                _sortColumns.Add(Me.Columns(e.ColumnIndex).Name)
            End If
    End Sub

因此,到目前为止,我已经能够创建要排序的列的列表,并且如果用户不按住CTRL键,它将被重置。我的代码存在一些问题,例如,我需要弄清楚如何检查该列是否已排序以及如何进行管理。

但是我不确定该怎么做才能准确地对列进行排序。因此,我能得到的任何帮助将不胜感激。谢谢。

编辑:用我尝试过的方法更新了代码。仍然无法使它正常工作:\

编辑2:进行另一次编辑,更新代码块以显示我尝试过的无效的代码。我认为添加绑定源是一种解决方案,但是我根本没有对列进行排序。

0 个答案:

没有答案