Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Creativchik
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 94
1

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

15.09.2016, 10:21. Просмотров 594. Ответов 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
Миниатюры
Сортировка таблицы по нескольким столбцам в датагрид  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2016, 10:21
Ответы с готовыми решениями:

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

Поиск по одному или по нескольким столбцам
Здравствуйте. У меня проблема поиска по столбцам, по всем столбцам я разобрался...

Сортировка данных по столбцам
есть код поиска в datagridview через изменение текста в текстбоксе но на...

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

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

3
Sanya_sa
Модератор
707 / 691 / 301
Регистрация: 03.02.2015
Сообщений: 4,420
Записей в блоге: 8
Завершенные тесты: 3
15.09.2016, 10:38 2
Цитата Сообщение от Creativchik Посмотреть сообщение
Нужно сделать выборку по этому датагриду по нескольким столбцам.
DataGrid - ТОЛЬКО ОТОБРАЖАТЬ должна! Поэтому выборку делать нужно из данных и просто отобразить их в DataGrid , у Вас они (данные) где хранятся?
0
Creativchik
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 94
15.09.2016, 10:40  [ТС] 3
В эксел файле, который подгружается выше
0
Storm23
Эксперт .NETАвтор FAQ
6447 / 3874 / 1435
Регистрация: 11.01.2015
Сообщений: 5,028
Записей в блоге: 32
15.09.2016, 23:21 4
Creativchik, Вам нужно использовать DataView.
После заполнения DataTable:
C#
1
2
var dv = new DataView(dt);
this.dataGridView1.DataSource = dv; //заполняем dataGridView
А у DataView уже можно использовать свойства Sort или RowFilter или все вместе.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2016, 23:21

ДатаГрид и Окошко
Нужно что бы когда я перемещался по записям грида справа появлялось окошко(что...

разнести по текстбоксам и датагрид
пишу программу расчета остатков средств на счетах нужно подгрузить выписку...

Сортировки массива в ДатаГрид
Отсортировать пузырьком, вставками, быстрой сортировками, и вывести новые...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru