Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
1

Сортировка колонки DataGridView по значениям другой колонки

14.11.2015, 21:20. Показов 2127. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите решение проблемы.

Есть Grid.

Нулевая колонка (с именем NOMER) содержит цифровые значения, которые удобно хранить в символьном формате. Из-за этого сортировка по столбцу работает некорректно.

Я добавил в Grid скрытую колонку с именем NOMER2 в которой номера стоят с ведущими нулями (тоже в символьном формате).

Нужно чтобы при клике на заголовке колонки NOMER сортировка выполнялась по значениям колонки NOMER2.
Миниатюры
Сортировка колонки DataGridView по значениям другой колонки  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2015, 21:20
Ответы с готовыми решениями:

Переупорядочить колонки DataGridView
Есть DataGridView. В нем надо переупорядочить колонки. Поступаем так: ...

Изменить цвет колонки DataGridView
Всем здравствуйте. Вот пример как закрасить строку...

Заполнение колонки DataGridView массивом
Добрый день, товарищи. Есть DataGridView1 с 3 колонками. 1 колонка - название 2 колонка -...

Добавить в CheckedListBox данные из колонки DataGridView
Истина где-то рядом :) Dim Str As String = "" For i As Integer = 0 To...

2
178 / 178 / 52
Регистрация: 11.03.2014
Сообщений: 200
15.11.2015, 11:08 2
А все так же:
VB.NET
1
2
3
4
5
6
Private Sub DataGridView1_ColumnHeaderMouseClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
        If e.ColumnIndex = номер_столбца_NOMER2 Then
        DataGridView1.Sort(DataGridView1.Columns(номер_столбца_NOMER), System.ComponentModel.ListSortDirection.Ascending)
        Else
        DataGridView1.Sort(DataGridView1.Columns(e.ColumnIndex), System.ComponentModel.ListSortDirection.Ascending)
    End Sub
0
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
15.11.2015, 13:10  [ТС] 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Простите, я не понял. Вы пишите:

VB.NET
1
If e.ColumnIndex = номер_столбца_NOMER2 Then
Но я же написал в описании проблемы, что колонка NOMER2 - СКРЫТАЯ.

Поэтому вышеприведенное условие НИКОГДА НЕ БУДЕТ ВЫПОЛНЕНО.

Добавлено через 6 минут
Странное дело. Вот процедура, которая сейчас используется в программе:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Public Module M_Grd_Click_Header
 
    '=================================================================================================='
    '                                            PROCEDURE                                             ' 
    '                             Обработка Click-а по DataGridView Header                             '
    '=================================================================================================='
 
    Public Sub Grd_Click_Header(ByRef DGV As DataGridView, ByVal ColInd As Integer)
        If ColInd >= 2 Then
            Return
        End If
 
        If ColInd = 0 Then
            Select DGV.SortOrder
                Case SortOrder.None
                    MsgBox("0 None")
                    DGV.Sort(DGV.Columns("NOMER2"), System.ComponentModel.ListSortDirection.Ascending)
        
                Case SortOrder.Ascending
                    MsgBox("0 Asc")
                    DGV.Sort(DGV.Columns("NOMER2"), System.ComponentModel.ListSortDirection.Descending)
        
                Case SortOrder.Descending
                    MsgBox("0 Desc")
                    DGV.Sort(DGV.Columns("NOMER2"), System.ComponentModel.ListSortDirection.Ascending)
        
            End Select
 
            Return
        End If
        
        '----ColInd = 1
        
        Select DGV.SortOrder
            Case SortOrder.None
                MsgBox("1 None")
                DGV.Sort(DGV.Columns("BUT_FLD"), System.ComponentModel.ListSortDirection.Ascending)
 
            Case SortOrder.Ascending
                MsgBox("1 Asc")
                DGV.Sort(DGV.Columns("BUT_FLD"), System.ComponentModel.ListSortDirection.Descending)
 
            Case SortOrder.Descending
                MsgBox("1 Desc")
                DGV.Sort(DGV.Columns("BUT_FLD"), System.ComponentModel.ListSortDirection.Ascending)
 
        End Select
 
    End Sub
 
End Module
При клике по заголовку столбца с номером 1 все работает как надо.

А при клике на столбце с номером 0 MsgBox всегда показывает: 0 Asc. Совершенно непонятно, в чем дело.

Добавлено через 2 минуты
Вот вызов методы в классе формы:

VB.NET
1
2
3
4
    Private Sub DGV2_ColumnHeaderMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DGV2.ColumnHeaderMouseClick
        Call Grd_Click_Header(Me.DGV2, e.ColumnIndex)
 
    End Sub
DGV2 - Это имя проблемного DataGridView

Добавлено через 21 минуту
Решилась проблема.

Оказывается перед отработкой метода DataGridView_ColumnHeaderMouseClick отрабатывало стандартное действие по сортировке столбца.

Надо при формировании Grid-а добавить установку свойства колонки:

VB.NET
1
        Me.DGV2.Columns(0).SortMode = DataGridViewColumnSortMode.Programmatic
Добавлено через 47 секунд
Всем спасибо. Тема исчерпана.
0
15.11.2015, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2015, 13:10
Помогаю со студенческими работами здесь

Вывод названия колонки из DataGridView в TextBox
Задача стоит в том, чтобы при выделении ячейки DataGridView, в TextBox отображалось название...

Определить Name колонки, зная Headertext в Datagridview
Есть конструкция: dataGridView1.Columns(0).Name = "Recipe" т.е. по индексу задается имя как...

Сделать выборку данных из одной колонки в DataGridView и скопировать их в Textbox
Привет всем любителям и профессионалам программирования. Сам занимаюсь программированием не так...

Datagridview - загрузка с файла через делитель слов со второй колонки
Есть созданые 4 колонки в Datagridview (в первой картинка). Есть текстовый файл с содержимым: ......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru