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

DataGridView - поиск, фильтр и сортировка по нескольким условиям

11.05.2021, 17:53. Показов 4213. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, при написании программы столкнулся с некоторой задачей. Как осуществить поиск, фильтрацию и сортировку по нескольким условиям в DataGridView. Например: имеется список авто, у каждого авто есть собственные характеристики (кол-во лошадиных сил, объем двигателя, максимальная скорость). Как сделать так, чтобы по нажатии на кнопку, в DataGridView остались (отфильтровались) только те строки с авто, которые были одновременно отфильтрованы по приоритетности, где сначала отобрались машины где кол-во лошадиных сил лежит в диапазоне 90 < X < 110, а дальше отфильтровались по объему двигателя (Y>1.8) и максимальной скорости (Z>210), после чего в последствии оставшиеся строки отсортировались по следующему принципу: от максимальных значениях до минимальных.

На данный момент имеется код, который выделяет строки, при похожем значении в textBox.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
dataGridView1.CurrentCell = null;
 
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                dataGridView1.Rows[i].Selected = false;
                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                    if (dataGridView1.Rows[i].Cells[j].Value != null)
                        if (dataGridView1.Rows[i].Cells[j].Value.ToString().Contains(textBox1.Text))
                        {
                            dataGridView1.Rows[i].Selected = true;
                            break;
                        }
            }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2021, 17:53
Ответы с готовыми решениями:

Фильтр в Datagridview по нескольким условиям
private void textBox2_TextChanged(object sender, EventArgs e) { if (WHGridView.DataSource ==...

Расширенный фильтр . Поиск значений по нескольким условиям
С помошью расширеннего фильтра найти расходы за март, апрель, май, июнь или июль 1997г. по накладным расходам и материалам сумма которых...

Фильтр по нескольким условиям
Добрый день. Я хочу выводить только те строки таблицы, которые соответствуют введенной информации в html форме. Столкнулась с проблемой:...

5
148 / 92 / 56
Регистрация: 03.02.2021
Сообщений: 284
12.05.2021, 05:25
Лучший ответ Сообщение было отмечено Astus как решение

Решение

Посоветую использовать DataView
C#
1
2
3
4
5
6
7
DataTable dt = new DataTable();
dt.Load(заполняем чем-нибудь)
DataView dv = new DataView(dt);
dataGridView1.DataSource = dv;
// фильтруем и сортируем данные
dv.RowFilter = "X> 90 AND X<110";
dv.Sort = "X";
1
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 93
12.05.2021, 17:06  [ТС]
Цитата Сообщение от sfumatori Посмотреть сообщение
Посоветую использовать DataView
У меня все данные изначально в таблице в dataGridView где имеется 3 столбца. Подскажите пожалуйста, как загрузить dataGridView в DataTable. При Вашем коде, dt.Load(dataGridView1) выдает ошибку. И второй вопрос, как обратиться к столбцам dataGridView при сортировки и фильтрации?
0
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
12.05.2021, 17:37
Лучше заведите класс. В нем опишите переменные и поля вашего класса (машины).
Далее в основном коде заведите переменную типа List<ваш класс машины>, туда занесите все данные о машинах и потом уже отображайте это в dataGridView1.
Потом как хотите можете фильтровать данные через Linq и уже отфильтрованные данные отображать в dataGridView1.
Например:
Пусть переменная с данными машин:
C#
1
2
Cars mycars = new Cars();
List<Cars> cars = new List<Cars>();
Допустим в классе есть поле типа Power (мощность), Сapacity (объем двигателя), MaxSpeed (макс. скорость) и т.п.
Добавляете в переменную:
C#
1
2
3
4
mycars.Power = textBox1.Text;
mycars.Capacity = textBox2.Text;
mycars.MaxSpeed= textBox3.Text;
cars.Add(mycars);
Дальше заполняете dataGridView1:
C#
1
2
3
4
5
6
7
dataGridView1.RowCount = cars.Count;
for (int i = 0; i < cars.Count; i++)
{
  dataGridView1[0, i].Value = cars[i].Power;
  dataGridView1[1, i].Value = cars[i].Capacity;
  dataGridView1[2, i].Value = cars[i].MaxSpeed;
}
А фильтровать примерно так:
C#
1
List<Cars> list = cars.Where(t => (t.Power > 90 & t.Power < 130 & t.Capacity > 1.8 & t.MaxSpeed > 210).OrderByDescending(t => t.Power).ThenBy(t => t.Capacity).ThenBy(t => t.MaxSpeed).ToList();
Ну а дальше либо заполняете dataGridView1 переменной list, либо делаете так:
C#
1
cars = new List<Cars>(list);
И опять заполняете dataGridView1, но уже переменной cars (см. выше).
0
0 / 0 / 0
Регистрация: 26.04.2018
Сообщений: 93
12.05.2021, 18:51  [ТС]
Цитата Сообщение от Tatarin78 Посмотреть сообщение
Лучше заведите класс. В нем опишите переменные и поля вашего класса (машины).
Дело в том, что данные в dataGridView загружаются из таблицы Excel. Таким образом, создание подобных конструкций не целесообразно. Может есть другой вариант?
0
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
13.05.2021, 04:57
Цитата Сообщение от Astus Посмотреть сообщение
Дело в том, что данные в dataGridView загружаются из таблицы Excel. Таким образом, создание подобных конструкций не целесообразно. Может есть другой вариант?
Неважно откуда берутся данные, из Excel, Sql или еще откуда. Это просто данные. А вот, что вы с ними будете делать, зависит от Вас.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2021, 04:57
Помогаю со студенческими работами здесь

Icollectionview Фильтр по нескольким условиям
Всем привет!Народ, подскажите вот какой момент. Есть у меня коллекция, которая содержит экземпляры класса. Таблица из бд, откуда я...

Как создать фильтр по нескольким условиям в поле, где дублируются данные?
Очень прошу помощи - голова закипает... Есть база данных рейсов автомобилей. В основной таблице &quot;рейсы&quot; есть поля: код, дата...

Сортировка массива по нескольким условиям
Условие задачи: &quot;Ввести последовательность натуральных чисел {Aj}j=1...n (n&lt;=1000). Упорядочить последовательность по невозрастанию суммы...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru