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

Сортировка таблицы по нескольким столбцам в датагрид

15.09.2016, 10:21. Показов 2510. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Я загружаю экселевский файл в датагрид
Кликните здесь для просмотра всего текста
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
private void button1_Click(object sender, EventArgs e)
        {
            //поиск файла Excel
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = false;
            ofd.DefaultExt = "*.xls;*.xlsx";
            ofd.Filter = "Microsoft Excel (*.xls*)|*.xls*";
            ofd.Title = "Выберите документ Excel";
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("Вы не выбрали файл для открытия", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string xlFileName = ofd.FileName; //имя нашего Excel файла
 
            //рабоата с Excel
            Excel.Range Rng;
            Excel.Workbook xlWB;
            Excel.Worksheet xlSht;
            int iLastRow, iLastCol;
 
            Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel
            xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл           
            xlSht = xlWB.Worksheets["Лист1"]; //или так xlSht = xlWB.ActiveSheet //активный лист
 
            iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А
            iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке
 
            Rng = (Excel.Range)xlSht.Range["A1", xlSht.Cells[iLastRow, iLastCol]]; //пример записи диапазона ячеек в переменную Rng
                                                                                   //Rng = xlSht.get_Range("A1", "B10"); //пример записи диапазона ячеек в переменную Rng
                                                                                   //Rng = xlSht.get_Range("A1:B10"); //пример записи диапазона ячеек в переменную Rng
                                                                                   //Rng = xlSht.UsedRange; //пример записи диапазона ячеек в переменную Rng
 
            var dataArr = (object[,])Rng.Value; //чтение данных из ячеек в массив            
                                                //xlSht.get_Range("K1").get_Resize(dataArr.GetUpperBound(0), dataArr.GetUpperBound(1)).Value = dataArr; //выгрузка массива на лист
 
            //закрытие Excel
            xlWB.Close(true); //сохраняем и закрываем файл
            xlApp.Quit();
            releaseObject(xlSht);
            releaseObject(xlWB);
            releaseObject(xlApp);
 
            //заполняем DataTable для последующего заполнения dataGridView
            DataTable dt = new DataTable();
            DataRow dtRow;
            //добавляем столбцы в DataTable
            for (int i = 1; i <= dataArr.GetUpperBound(1); i++)
                dt.Columns.Add((string)dataArr[1, i]);
 
            //цикл по строкам массива
            for (int i = 2; i <= dataArr.GetUpperBound(0); i++)
            {
                dtRow = dt.NewRow();
                //цикл по столбцам массива
                for (int n = 1; n <= dataArr.GetUpperBound(1); n++)
                {
                    dtRow[n - 1] = dataArr[i, n];
                }
                dt.Rows.Add(dtRow);
            }
 
            this.dataGridView1.DataSource = dt; //заполняем dataGridView
 
            MessageBox.Show("Конец", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information);
 
        
    }
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

Получается такая картинка(см. Картинка 1)
Нужно сделать выборку по этому датагриду по нескольким столбцам.
Например я выбираю сначала услугу газ, у меня остаются строки где услуга только газ.
Далее я выбираю дом 22 например и у меня остаются те же строки с услугой газ, но плюс к этому происходит выборка по дому 22.
Миниатюры
Сортировка таблицы по нескольким столбцам в датагрид  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2016, 10:21
Ответы с готовыми решениями:

Сортировка таблицы по нескольким столбцам
Добрый день! Появилась необходимость рассортировать рабочую таблицу: поскольку объем данных большой, и со временем будет только расти,...

Сортировка строк таблицы по нескольким столбцам
Доброго времени суток. Имеется код сортировки по одному столбцу. Sheets(&quot;Общие списки&quot;).Copy After:=Sheets(&quot;Общие...

Сортировка по нескольким столбцам
Здравствуйте, есть хорошая функция для сортировки по нескольким столбцам: Sub ColorSort() Columns(&quot;A:D&quot;).sort...

3
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
15.09.2016, 10:38
Цитата Сообщение от Creativchik Посмотреть сообщение
Нужно сделать выборку по этому датагриду по нескольким столбцам.
DataGrid - ТОЛЬКО ОТОБРАЖАТЬ должна! Поэтому выборку делать нужно из данных и просто отобразить их в DataGrid , у Вас они (данные) где хранятся?
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 98
15.09.2016, 10:40  [ТС]
В эксел файле, который подгружается выше
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
15.09.2016, 23:21
Creativchik, Вам нужно использовать DataView.
После заполнения DataTable:
C#
1
2
var dv = new DataView(dt);
this.dataGridView1.DataSource = dv; //заполняем dataGridView
А у DataView уже можно использовать свойства Sort или RowFilter или все вместе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.09.2016, 23:21
Помогаю со студенческими работами здесь

Сортировка по нескольким столбцам БД
Привет всем, помогите пожалуйста сделать сортировку БД и так что бы сортировка проводилась по 3 столбцам базы. ПОЖАЛУЙСТА,ПОМОГИТЕ,ОЧЕНЬ...

Сортировка массива по нескольким столбцам.
Надо отсортировать массив, но не по одному столбцу, к примеру, а по двум-трем (аналог ORDER BY в SQL). Проблема в том, что у нас старый SQL...

Фильтрация по нескольким столбцам таблицы
Подскажите пожалуйста как реализовать фильтрацию таблицы по нескольким (более 2) столбцам таблицы. Огромное спасибо

Поиск по нескольким столбцам таблицы
Здравствуйте. Есть скрипт поиска по MySQL: &lt;meta charset=&quot;utf-8&quot; /&gt; &lt;div style=&quot;width:960px;margin:0 auto;&quot;&gt; &lt;form...

Сортировка по нескольким столбцам в компоненте dxDBGRID
Народ! Подскажите как делается сортировка по нескольким столбцам в dxDBGrid? Задал запрос к БД DBase. Связал TDatasource с TQuery...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru