Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/64: Рейтинг темы: голосов - 64, средняя оценка - 4.97
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75

Сортировка в DataGridView

11.05.2016, 19:41. Показов 12295. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам

Как отсортировать строки в DataGridView, по 3 столбцу но чтобы сортировка шла вместе со строками вместе со стоками?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2016, 19:41
Ответы с готовыми решениями:

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

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

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

17
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.05.2016, 01:34
Очень просто, нужно хранить данные, которые отображаются в dgv, в DataTable
0
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
12.05.2016, 06:52  [ТС]
А можно подробнее, не работал с DataTable
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.05.2016, 12:41
Лучший ответ Сообщение было отмечено Triblaid как решение

Решение

Смотри пример
Вложения
Тип файла: zip WindowsFormsApplication1.zip (16.0 Кб, 169 просмотров)
0
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
13.05.2016, 06:19  [ТС]
Спасибо что потратили время, к сожалению моих знаний не хватает что с таким кодом разобраться...
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
13.05.2016, 08:39
Лучший ответ Сообщение было отмечено Triblaid как решение

Решение

Всё очень просто. Достаточно понять несколько базовых моментов:
  1. Отобразить в таблице можно либо данные из базы данных либо данные о некотором объекте. В твоём случае, если нет базы данных, нужно отображать объект (или набор объектов). Каждый столбец при этом соотвествует определённому свойству объекта. В твоём случае такими свойствами являются: "Место", "Страна", "Кол-во баллов", "Матчей выиграно". Свойства не обязательно так называть, заголовок столбца всегда можно поменять на удобочитаемый.
  2. Чтобы работала сортировка, нужен некий контейнер, который умеет сортировать содержащиеся в нём объекты по их свойствам. И этот контейнер использовать в качестве источника данных для DGV. Проще всего использовать DataTable. Там уже всё сделано.
  3. Последний шаг. Преобразовать список объектов в соответствующую таблицу.
В моём примере, объект описывается классом с тремя свойствами.
C#
1
2
3
4
5
6
public class ClassData
{
    public int SomeProperty1 { get; set; }
    public string SomeProperty2 { get; set; }
    public string SomeProperty3 { get; set; }
}
В конструкторе формы (т.е. при создании экземпляра класса Form1) создаётся некий список моих объектов с заданием свойств для каждого объекта:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public Form1()
{
    InitializeComponent();
    List<ClassData> list = new List<ClassData>
                           {
                               new ClassData {SomeProperty1 = 10, SomeProperty2 = "Value1", SomeProperty3 = "Value13" },
                               new ClassData {SomeProperty1 = 15, SomeProperty2 = "Value2", SomeProperty3 = "Value10" },
                               new ClassData {SomeProperty1 = 3, SomeProperty2 = "Value5", SomeProperty3 = "Value21" },
                               new ClassData {SomeProperty1 = 5, SomeProperty2 = "Value7", SomeProperty3 = "Value02" },
                               new ClassData {SomeProperty1 = 17, SomeProperty2 = "Value11", SomeProperty3 = "Value20" }
                           };
    dataGridView1.DataSource = list.ToTable();
}
В 12 строке список преобразуется в таблицу DataTable с помощью метода расширения, описанного в классе ListExtension. Вникать в его работу тебе нет пока необходимости, просто так удобно.
ListExtension.cs
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
public static class ListExtension
{
        /// <summary>
        /// Преобразование списка данных в таблицу 
        /// </summary>
        /// <typeparam name="T">Тип данных, содержащихся в списке</typeparam>
        /// <param name="list">Список, содержащий некоторые данные</param>
        /// <returns></returns>
        public static DataTable ToTable<T>(this IEnumerable<T> list)
        {
            PropertyDescriptorCollection props =
                TypeDescriptor.GetProperties(typeof(T));
            var table = new DataTable();
            for (var i = 0; i < props.Count; i++)
            {
                PropertyDescriptor prop = props[i];
                if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                    table.Columns.Add(prop.Name, prop.PropertyType.GetGenericArguments()[0]);
                else
                    table.Columns.Add(prop.Name, prop.PropertyType);
            }
            object[] values = new object[props.Count];
            foreach (T item in list)
            {
                for (var i = 0; i < values.Length; i++)
                {
                    values[i] = props[i].GetValue(item);
                }
                table.Rows.Add(values);
            }
            return table;
        }
    }

А может я всё зря это написал и данные у тебя берутся из базы данных. Тогда всё ещё проще...
1
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
13.05.2016, 09:34
ViterAlex, не зря написал, спасибо!
0
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
15.05.2016, 10:43  [ТС]
Я почти разобрался с Data Table Но возникли вопросы которые не дают решить задачу:
1) Как поменять имя столбцам, чтобы оно было в два и более слова;
2) Как сделать так чтобы столбцы создавались со 2, а не с первого а первый был не зависим от остальных;
3)
C#
1
2
3
4
5
6
7
8
List<ClassData> list = new List<ClassData>
                           {
                               new ClassData {SomeProperty1 = 10, SomeProperty2 = "Value1", SomeProperty3 = "Value13" },
                               new ClassData {SomeProperty1 = 15, SomeProperty2 = "Value2", SomeProperty3 = "Value10" },
                               new ClassData {SomeProperty1 = 3, SomeProperty2 = "Value5", SomeProperty3 = "Value21" },
                               new ClassData {SomeProperty1 = 5, SomeProperty2 = "Value7", SomeProperty3 = "Value02" },
                               new ClassData {SomeProperty1 = 17, SomeProperty2 = "Value11", SomeProperty3 = "Value20" }
                           };
Как создать не заданное кол-во данных а массив?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.05.2016, 11:57
Цитата Сообщение от Triblaid Посмотреть сообщение
Как поменять имя столбцам, чтобы оно было в два и более слова
У столбца есть свойство HeaderText
Цитата Сообщение от Triblaid Посмотреть сообщение
Как сделать так чтобы столбцы создавались со 2, а не с первого а первый был не зависим от остальных;
В предложенном мной варианте — никак. Если dgv привязан к источнику данных, то добавить свои столбцы нельзя. Нужно добавлять свойство в источник данных, чтобы оно отображалось. Зачем тебе понадобился отдельный независимый столбец?

Добавлено через 1 минуту
Цитата Сообщение от Triblaid Посмотреть сообщение
Как создать не заданное кол-во данных а массив?
Массив не удобен в работе. Добавляй в список, когда тебе удобно. Только потом нужно обновлять DataTable
1
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
15.05.2016, 19:28  [ТС]
Большое вам спасибо, что потратили столько времени на меня, я разобрался и все сделал как хотел.

Добавлено через 5 часов 7 минут
И опять все не как у людей вот теперь оказывается что нужно сделать сортировку сразу по двум столбцам
то вообще возможно?
0
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
15.05.2016, 19:46  [ТС]
Вот моя программа, ввод данных сделал а вот с сортировкой проблемы не знаю как сортировать по двум столбцам одновременно по кол-ву баллов и матчей выиграно.
Вложения
Тип файла: rar MyWork 2016.rar (72.3 Кб, 26 просмотров)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.05.2016, 20:15
Это не сложно если мы уже используем DataTable. Нудно использовать метод Sort. Приеду домой и накидаю пример
1
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.05.2016, 03:33
Попытайся разобраться. Чтобы отсортировать по нескольким столбцам, нужно нажать Ctrl и кликнуть по заголовкам столбцов, в том порядке, в котором они должны участвовать в сортировке. В принципе ничего сложного.
Нужно реагировать на клик по заголовку столбца и определять в каком направлении его сортировать. Составить строку сортировки и передать её в таблицу.
Там много кода, который относится только к dgv. Есть смысл сделать производный класс от dgv и реализовать всё в нём, и уже в проекте использовать этот класс вместо обычного dgv. Тем более, что у тебя их в проекте несколько.

По поводу твоего проекта. Вбивать название стран — пустая трата времени. Не так часто на глобусе появляются новые. Поэтому есть смысл поставить выпадающий список и вбить в него все названия стран ещё в дизайнере. Список можно взять хоть здесь.
Вложения
Тип файла: zip WindowsFormsApplication1.zip (18.4 Кб, 45 просмотров)
1
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
16.05.2016, 05:16  [ТС]
Так сортировка должна идти автоматически без участия пользователя.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.05.2016, 06:18
Ну так нужно сразу же говорить! вот эту строку
C#
1
dataGridView1.DataSource = list.ToTable();
нужно немного дополнить
C#
1
2
3
4
DataTable dt = list.ToTable();
dt.DefaultView.Sort = "ИмяСтолбца1 ASC,ИмяСтолбца2 ASC";
dt = dt.DefaultView.ToTable();
dataGridView1.DataSource = dt;
Таким образом данные всегда будут отсортированы по двум столбцам по возрастанию
0
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 75
16.05.2016, 07:31  [ТС]
А что-то типа reverse есть чтобы по убыванию было?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.05.2016, 07:39
DESC
0
0 / 0 / 0
Регистрация: 21.09.2017
Сообщений: 1
21.09.2017, 17:03
Помогло. Спасибо. Если есть возможность, объясните код в ListExtension.cs.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2017, 17:03
Помогаю со студенческими работами здесь

DataGridView сортировка
Скажите а как в DataGridView, указать на то что бы новые поля появлялись в верху, оттесняя старые вниз, а не наоборот добавлялись в низ?

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

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

сортировка datagridview
Cоздаю DataTable ResData = new DataTable(ClassName); ResData.Columns.Add(nominal , typeof(string)); ResData.Columns.Add(moshnost ,...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru