我正在VB.Net中创建自定义表单元素,以向DataGridView添加一些其他功能。
我要添加的功能之一是允许用户按多列对DGV中的数据进行排序的功能。
这是我希望它的工作方式:
所以让我们说我有一个列的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:进行另一次编辑,更新代码块以显示我尝试过的无效的代码。我认为添加绑定源是一种解决方案,但是我根本没有对列进行排序。