Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716

DataGridView Сортировка

26.07.2018, 01:11. Показов 6354. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, есть 2 стобца Name и Value.
Исходные данные Value 1,2,3,4,5
Но отображатся как 1b 1a 23g и т.д, сортирует по алфавиту и поэтому не правильно. Как можно сделать сортировку по исходным данным, важно чтобы кликая по заголовку.


C#
1
private List<Data> ListData = new List<Data>();
C#
1
2
3
4
5
6
7
8
 
List.Add(new Data("Lena",124));
List.Add(new Data("Nickj",63224));
 
foreach (Data data in ListData)
{
dgvLog.Rows.Add(data.Name, data.NormValue)
}
Грубо говоря 124 будет 55g
63224 будет преобразован в 1a
Поэтому будет отсортировано и выведено
Nickj 1a
Lena 55g

а надо сделать сортировку по скрытым значениям 124 и 63224, которые не показаны в datagridview

Lena 55g
Nickj 1a

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  public struct Data
    {
        public Data(string name,long value)
        {
            Name = name;
            Value = value;
            //
            //Получаем NormValue
            //
        }
        public string Name { get; }
        public long Value { get; }
        public string normValue { get; }
        
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2018, 01:11
Ответы с готовыми решениями:

DataGridView, сортировка
Помогите пжлст сделать сортировку. Таблицу сделал в SQL.

Сортировка в DataGridView
Как отсортировать строки в DataGridView, по 3 столбцу но чтобы сортировка шла вместе со строками вместе со стоками?

Сортировка DataGridView
Добрый день. Возникли проблемы с пониманием сортировки DataGridView. Вычитал с msdn следующие вещи: 1) Программная сортировка ...

4
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
26.07.2018, 06:55
Цитата Сообщение от Defences Посмотреть сообщение
а надо сделать сортировку по скрытым значениям
почему вы решили что они скрытые если у вас стоит public ?
ListDatas.Sort(x => x.Value);

Добавлено через 2 минуты
Цитата Сообщение от Defences Посмотреть сообщение
которые не показаны в datagridview
они не скрытые у вас их там вообще нет так нельзя делать
сделайте так dgvLog.DataSource = ListData;

Добавлено через 1 минуту
а если в вашем варианте что крайне не рекомендую то добавьте скрытый столбец
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
26.07.2018, 09:00  [ТС]
Wolflind, под скрытым я имею ввиду, что структура Data содержит 3(Name, Value, NormValue) в dgv добавляется только 2 Name и NormValue и как бы сортировка должна проходить по Value, а отображатся NormValue
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
26.07.2018, 10:10
Лучший ответ Сообщение было отмечено Defences как решение

Решение

Цитата Сообщение от Defences Посмотреть сообщение
Грубо говоря 124 будет 55g
63224 будет преобразован в 1a
Есть какой-то алгоритм преобразования? Или это просто какие-то рандомные значения?

C#
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        private List<Data> ListData = new List<Data>();
 
        private DataRowComparer comparer = new DataRowComparer();
 
        public Form1()
        {
            InitializeComponent();
 
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Name", HeaderText = "Name", Name = "Column1" });
            dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "NormValue", HeaderText = "NormValue", Name = "Column2" });
 
            ListData.Add(new Data("Lena", 124));
            ListData.Add(new Data("Test", 56));
            ListData.Add(new Data("Nickj", 63224));
 
            dataGridView1.DataSource = ListData;
        }
 
        private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            comparer.SortColumn = e.ColumnIndex;
            comparer.Order = comparer.Order == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
 
            ListData.Sort(comparer);
 
            dataGridView1.Refresh();
        }
    }
 
    public class Data
    {
        static Dictionary<long, string> convertData = new Dictionary<long, string>
        {
            [124] = "55g",
            [56] = "666",
            [63224] = "1a"
        };
 
        public Data(string name, long value)
        {
            Name = name;
            Value = value;
            //
            //Получаем NormValue
            //
            NormValue = convertData[value];
        }
        public string Name { get; }
        public long Value { get; }
        public string NormValue { get; }
    }
 
    public class DataRowComparer : IComparer<Data>
    {
        public int SortColumn { get; set; } = 0;
        public SortOrder Order { get; set; } = SortOrder.Ascending;
 
        public int Compare(Data x, Data y)
        {
            int result = 0;
 
            switch (SortColumn)
            {
                case 0:
                    result = x.Name.CompareTo(y.Name);
                    break;
                case 1:
                    result = x.Value.CompareTo(y.Value);
                    break;
            }
 
            if (Order == SortOrder.Ascending)
                return result;
            else
                return -result;
        }
    }
}
1
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
26.07.2018, 12:05  [ТС]
Someone007, да, сортирует как надо, спасибо! Попробую реализовать в своем проекте. Если получится отмечу как ответ.

P.s а если мы новые значения добавим, как обновить datagridview?
C#
1
2
3
   ListData.Add(new Data("Lena2", 124));
            ListData.Add(new Data("Test2", 56));
            ListData.Add(new Data("Nickj2", 63224));

Я читал, там без костылей на подобии этого не обойтись, иначе никак?

C#
1
2
 dataGridView1.DataSource = null;
 dataGridView1.DataSource = ListData;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2018, 12:05
Помогаю со студенческими работами здесь

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

Сортировка в DataGridView
Помогите пожалуйста) При выборе пункта «Отсортировать» строки таблицы сортируются по фамилии в лексико-графическом порядке.

Сортировка в Datagridview
Прошу помощи, нужно отсортировать второй столбец, вот код и что получилось, но там небольшой косяк есть, не пойму как исправить, сортирует...

Сортировка в DataGridView
Помогите с сортировкой,умоляю !!!!!не понимаю какой именно код надо написать что бы работала сортировка .. using System; using...

Сортировка в dataGridView
Здравствуйте. Вывожу данные из файла в dataGridView. Нужно реализовать сортировку на пример вот так: нажимаешь на кнопку 'Sort Column 1'...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru