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

Фильтрация данных по нескольким полям

02.06.2014, 18:15. Показов 3176. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
работаю в С# c субд Ms Sql Server пытаюсь отфильтровать записи в DataGridView по не скольким данным введенным в поля, при этом я не знаю какие поля заполнены. Использую технологию ef 4.0 раньше я создал sql запросы, но это настоящий говнокод. Не подскажите как это можно реализовать по другому??
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.06.2014, 18:15
Ответы с готовыми решениями:

Фильтрация по нескольким полям
Помогите, надо сделать фильтрация по несколько полям (Фамилия, имя, отчество и телефон). Покидайте примеры,а то найти не могу. Задали по...

Фильтрация по всем полям C#+MS Access
Помогите пожалуйста :) Хотелось бы сделать фильтрацию по всем полям в сетке c помощью одного textBox ...

Фильтрация данных в БД по нескольким полям (TextBox, SQL)
Всем привет. Имеется приложение, допустим, телефонная книга. В нем несколько текстовых полей (см. скриншот): Осуществлено...

5
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 22
05.06.2014, 17:11  [ТС]
Сегодня я решил вернуться к этой проблеме, и немного присмотревшись я увидел что все очень просто. Вообщем, как я уже говорил у меня были поля которые заполнены и не заполнены. Я должен был на основе заполненных полей, формировать запрос, проблема была в том, что я не знал какие поля заполнены. Поэтому было придумано такое решение, мы фильтруем данные по первому найденному значению. Записываем данные в коллекцию, а потом проверяем следующее поле, и фильтруем уже полученную коллекцию опять, после чего ее перезаписываем. И так пока не пройдемся по всем полям...
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
05.06.2014, 17:18
Цитата Сообщение от Кирилл77 Посмотреть сообщение
Поэтому было придумано такое решение, мы фильтруем данные по первому найденному значению. Записываем данные в коллекцию, а потом проверяем следующее поле, и фильтруем уже полученную коллекцию опять, после чего ее перезаписываем. И так пока не пройдемся по всем полям...
не самое удачное решение.
определяешь какие поля заполнены с помощью
C#
1
string.IsNullOrWhiteSpace(textBox.Text)
и если заполнены то добавляешь в условие фильтрации
1
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 22
05.06.2014, 17:39  [ТС]
я так и делал, вот мой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (!string.IsNullOrEmpty(cbNameCabinetFilter.Text) && _listCabinet!=null)
            {
                _listCabinet = _listCabinet.Where(c => c.Name == cbNameCabinetFilter.Text).ToList();
            }
 
            if (!string.IsNullOrEmpty(cbNumberCabinetFilter.Text) && !string.IsNullOrEmpty(cbToNumberCabinetFilter.Text)
                && _listCabinet != null)
            {
                var fromNumber = Convert.ToInt32(cbNumberCabinetFilter.Text);
                var toNumber = Convert.ToInt32(cbToNumberCabinetFilter.Text);
                _listCabinet = _listCabinet.Where(c => c.Number >= fromNumber && c.Number <= toNumber).ToList();
            }
            if (!string.IsNullOrEmpty(cbTelefonCabinetFilter.Text) && _listCabinet != null)
            {
                var mobile = Convert.ToInt32(cbTelefonCabinetFilter.Text);
                _listCabinet = _listCabinet.Where(c => c.Mobile == mobile).ToList();
            }
            lbCabinets.DataSource = _listCabinet;
Добавлено через 3 минуты
В этом способе есть вполне очевидный минус, при огромном количестве данных, будет долго выполняться фильтрация...
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
05.06.2014, 17:51
Цитата Сообщение от Кирилл77 Посмотреть сообщение
я так и делал, вот мой код
нет , я имею ввиду сразу по всем критериям искать. зачем гонять ЦП на лишнюю работу если можно все сделать за один раз нада учиться сразу писать красивый, хороший код. а не на потом откладывать.
как вариант на скорую руку

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            if (_listCabinet != null)
            {
                _listCabinet = _listCabinet.Where(c =>
                    (string.IsNullOrEmpty(cbNameCabinetFilter.Text) ? true : c.Name == cbNameCabinetFilter.Text)
                    &&
                    (string.IsNullOrEmpty(cbNumberCabinetFilter.Text) || string.IsNullOrEmpty(cbToNumberCabinetFilter.Text)
                            ? true : (c.Number >= int.Parse(cbNumberCabinetFilter.Text)
                                && c.Number <= int.Parse(cbToNumberCabinetFilter.Text)))
                    &&
                    (string.IsNullOrEmpty(cbTelefonCabinetFilter.Text) ? true : 
                        c.Mobile == int.Parse(cbTelefonCabinetFilter.Text))).ToList();
 
                lbCabinets.DataSource = _listCabinet;
            }
1
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 22
05.06.2014, 18:19  [ТС]
этот код быстрее, но читать его другому человеку будет трудно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2014, 18:19
Помогаю со студенческими работами здесь

Фильтрация по нескольким полям
Есть БД в Access. На форме datagridview с данными о преподавателях. Нужно сделать поиск по всем полям(или по максимально возможному...

Фильтрация в БД по нескольким полям
Пытаюсь сделать фильтр о нескольким полям. выдаёт ошибку. помогите разобраться. void __fastcall TForm1::Button10Click(TObject *Sender) ...

Фильтрация грида по нескольким полям одновременно
как реализовать фильтрацию по нескольким полям использую ADOTable или же ADOQwery?

Фильтрация по нескольким полям как в интернет магазинах
как реализовать фильтр по набору данных, например, как на сайте яндекс маркет. там фильтрация выглядит следующим образом. например, хотим...

Фильтрация результатов формы по нескольким полям и полю со списком
Доброго времени суток! Понимаю, что вопросы по фильтрации поднимались не раз, но не знаю как решить проблему фильтрации либо одному из...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru