Сортировка DataGridView

DataGridView Столбцы, по умолчанию, рода функциональность автоматически регистрирует, просто нажав на заголовок столбца, содержащего данные, для которых необходимо для сортировки данных.

Каждая колонка имеет свойство DataGridView SortMode которые мы можем установить в NoSortable, автоматические и программные. Если мы никогда не изменить это свойство, будет на автоматические.

Порядок прекрасно работает, если вы не хотите сортировать числового столбца. Числовые данные сортируются в виде текста, так что заказ не будет правильным. Тогда покажите пример, чтобы вы могли лучше понять.

Например, нам нужен формы и элемента управления DataGridView. Добавьте три столбца с именами фамилией, группой и счет. Вы должны увидеть что-то похожее на следующее изображение:

OrdenandoDatagridview001

Затем добавьте этот код в виде нагрузки, чтобы добавить некоторые записи:

 Private Sub Form1_Load (ByVal отправителя As Object, ByVal электронной Как System.EventArgs) Ручки MyBase.Load DataGridView1.Rows.Add (New String () {"Елисей", "пользователь", 24321}) DataGridView1.Rows.Add ( Новый String () {"Карлоса», «Поддержка», 122}) DataGridView1.Rows.Add (Новый String () {"Хосе", "пользователь", 423}) DataGridView1.Rows.Add (Новый String () {" Себастьян "," руководитель ", 1023}) DataGridView1.Rows.Add (Новый String () {" Хавьер "," пользователь ", 111}) DataGridView1.Rows.Add (Новый String () {" Сью "," Пользователь " , 1}) DataGridView1.Rows.Add (New String () {"Вероника", "руководитель", 24}) DataGridView1.Rows.Add (New String () {"Габриэла", "пользователь", 65}) DataGridView1. Rows.Add (Новый String () {"Августин", "пользователь", 719}) DataGridView1.Rows.Add (Новый String () {"Камила", "руководитель", 4322}) DataGridView1.Rows.Add (новую строку () {"Мелисса", "пользователь", 654}) DataGridView1.Rows.Add (New String () {"Лилиана", "Поддержка", 22}) End Sub 

Теперь, чтобы лучше понять, как они должны запустить программу и тест по заказу трех столбцов. Здесь я покажу вам, как при заказе со счетом колонки:

OrdenandoDatagridview002

Ну, картина совершенно ясна: 1, 1023, 111, 122, 22 ... не правильном порядке. Для решения этой проблемы мы должны изменить порядок столбцов с программными Автоматический рейтинг.

OrdenandoDatagridview003

Ну, это только первый шаг, теперь нужно добавить в нашу форму новый класс, который будет планировать порядок для числовых столбцов, класс выглядит следующим образом:

  Public Class OrdenarColumnaNumerica
     Реализует System.Collections.IComparer

     Частное sortOrderModifier As Integer = 1
     Частное Col As Integer = 0

     Public Sub New (ByVal SortOrder Как SortOrder, ByVal As Integer колонки)
         Col = столбец
         Если SortOrder = sortOrder.Descending Тогда
             sortOrderModifier = -1
         Тогда ElseIf SortOrder = sortOrder.Ascending
             sortOrderModifier = 1
         End If
     End Sub

     Public Function Compare (ByVal X As Object, ByVal Y As Object) As Integer _
         Реализует System.Collections.IComparer.Compare

         DataGridViewRow1 Dim Как DataGridViewRow CType = (х, DataGridViewRow)
         DataGridViewRow2 Dim Как DataGridViewRow CType = (Y, DataGridViewRow)

         Возвращение (Math.Sign (CLng (DataGridViewRow1.Cells (Кол.) Value) -.. CLng (DataGridViewRow2.Cells (Кол.) Значение))) * sortOrderModifier
     End Function
 End Class 

Как только у нас есть класс для обработки числовых порядок столбцов, мы называем это от случая ColumnHeaderMouseClick DataGridView следующим образом:

  DataGridView1_ColumnHeaderMouseClick Private Sub (ByVal отправителя As Object, ByVal электронной Как System.Windows.Forms.DataGridViewCellMouseEventArgs) Ручки DataGridView1.ColumnHeaderMouseClick

         Заказать Статические As Integer = 1

         Если DataGridView1.Rows.Count> 0 Then
             Если DataGridView1.Columns (e.ColumnIndex). Name = "пунктуации" Тогда
                 Если заказ = 1 Тогда
                     DataGridView1.Sort (Новый OrdenarColumnaNumerica (SortOrder.Ascending, e.ColumnIndex))
                     Заказать = 0
                 Другой
                     DataGridView1.Sort (Новый OrdenarColumnaNumerica (SortOrder.Descending, e.ColumnIndex))
                     Заказать = 1
                 End If
             End If
         Конец Если
     End Sub 

Готово! Теперь нужно просто запустить и протестировать программу. Теперь результат будет выглядеть на следующей картинке в правильном порядке:

OrdenandoDatagridview004

Я надеюсь, что вы можете дать хорошее применение этой методике.

9 Ответов на "Сортировка DataGridView"

  1. Bitacoras.com говорит:

    Информация Bitacoras.com ...

    Оценить в Bitacoras.com: DataGridView Столбцы по умолчанию Сортировать функциональность автоматически регистрирует, просто щелкнув на заголовке столбца, содержащего данные, для которых вы хотите отсортировать ......

    • Хосе говорит:

      Здравствуйте и сделали все упражнения, такие как эта, и я получаю ошибки в пунктуации колонну и должны были поместить его котировки ", а также не повелевал и пожалуйста, можете ли вы мне помочь ... Muchas grasias

  2. Омар говорит:

    Привет, я нашел этот пост очень интересный, я задаюсь вопросом, как они могли бы сделать, если столбец имеет даты, проблема в том, что при заполнении сетки с запросом SQL, преобразовал его в VARCHAR, чтобы показывать только мне без даты время и не найти способ, чтобы заказать их из сетки

  3. Наталья говорит:

    Мне нужно заказать DataGrid, который загружается с набором данных запроса по таблице в SQL. CDO я нажимаю на имя столбца, на заказ.

  4. Nerio Espina говорит:

    Спасибо большое, я был мало. Мне нужно, чтобы отсортировать DataGridView управления без пользователю было нажать и с вашей помощью я добился того, чего я хотел.

  5. Альваро говорит:

    Один вопрос, а упорядоченные по дате? Спасибо.

  6. Джоэл говорит:

    хороший друг, мне очень помогло это ...

  7. BGTT говорит:

    привет! У меня есть подобный вопрос, и я не могу решить. кто-нибудь может мне помочь? Если так и Я посылаю к вашей электронной почте более подробные вопросы, которые могут помочь. Спасибо. это моя почта: nelson_nn_0800@hotmail.com ценю, чтобы помочь мне!

  8. стержня говорит:

    Я получаю сообщение об ошибке Если DataGridView1.Columns (e.ColumnIndex). Name = "пунктуации" Тогда

Комментировать