Я работаю над созданием пользовательского элемента формы в VB.Net, чтобы добавить некоторые дополнительные функции в DataGridView.
Одна из вещей, которые я пытаюсь добавить, - это возможность позволить пользователю сортироватьданные в DGV по нескольким столбцам.
Вот как я хочу, чтобы это работало:
- Когда пользователь нажимает на столбец, он сортирует данные соответственно
- Если пользователь нажимает клавишу CTRL при нажатии на столбец, он будет сортировать этот столбец в дополнение к любым ранее отсортированным столбцам.
Итак, допустим, у меня есть DGV со столбцами:
Parts | Supplier | Category
Если я щелкну по столбцу Supplier
обычным образом, он отсортирует данные по возрастанию или по убыванию.Теперь, если я удерживаю клавишу CTRL и нажимаю Category
после того, как уже настроил 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: Другое редактирование, обновляя блок кода, чтобы показать то, что я попробовал, это не работает.Добавление в Binding Source я подумал, что это будет решением, но я не сортирую столбцы вообще.