VB.Net Сортировка DataGridView по нескольким столбцам - PullRequest
0 голосов
/ 03 декабря 2018

Я работаю над созданием пользовательского элемента формы в VB.Net, чтобы добавить некоторые дополнительные функции в DataGridView.

Одна из вещей, которые я пытаюсь добавить, - это возможность позволить пользователю сортироватьданные в DGV по нескольким столбцам.

Вот как я хочу, чтобы это работало:

  1. Когда пользователь нажимает на столбец, он сортирует данные соответственно
  2. Если пользователь нажимает клавишу 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 я подумал, что это будет решением, но я не сортирую столбцы вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...