DBGrid - кнопка фильтра как в Excel

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
alegzz
незнакомец
Сообщения: 4
Зарегистрирован: 15.03.2017 18:57:59

DBGrid - кнопка фильтра как в Excel

Сообщение alegzz »

Здравствуйте.

Начал разбираться с Lazarus, так как Excel уже не подходит для задач, но хотелось бы перенести плюшки.
Как бы добавить к каждому столбцу кнопку фильтр, чтобы при нажатии появлялось окошко, в которое можно ввести часть текста и в отфильтрованном списке можно было бы выбрать варианты (или при нажатии Enter сразу бы фильтровалось по тому, что уже нашлось)? При этом нужно учитывать фильтры других столбцов
Deimos
постоялец
Сообщения: 174
Зарегистрирован: 16.01.2010 23:31:30

Сообщение Deimos »

Буду удивлен, если буду не прав, но эта хотелка из разряда МНОГО своего кода. Для БД смотреть LIKE и локальный (самодельный) поиск по гридам. Я копал-бы в эту сторону...
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

Вам никто не может предоставить "кнопки как в Excel-е", кроме как в самом Excel-е.. Майкрософт придумала данный компонент, включила функционал для удобства своих клиентов, и то не сразу.
Это их фишичка.. на который вы подсели..

Хотя не все так печально. Есть компоненты которые предоставляют похожий функционал:
http://www.ehlib.com
https://www.devexpress.com/
http://www.tmssoftware.com/
и др..
можно тут, крупная база компонентов, поискать
http://torry.net/

вообще если вы умеете делать визуальные компоненты - то за один вечер вы сможете нарисовать кнопку.. Ну нужен опыт.
Nick74
новенький
Сообщения: 25
Зарегистрирован: 15.03.2017 12:55:06
Откуда: Москва

Сообщение Nick74 »

И ждут вас на этом пути многие овраги и ямы... ))
У меня в программе (Правда на Дельфи, но смысл один) используется похожее.
Использую компоненты EhLib. Там есть очень похожий на Excel-ный фильтр, но с ограниченным функционалом, в основном хорошо работающий локально в памяти. Никакие визуальные компоненты править/писать не придется.
Но для таблицы в 30 строк все это лишнее, зато когда в таблице 50000 строк (Хотя бы), или, не дай бог, пара миллионов строк, все это начинает ощутимо подтормаживать (Дико тормозить), приходится переносить фильтры в SQL запрос, а это требует парсинга SQL-запроса, чтобы вставить в него нужные where/having и т.д. и т.п.
Впрочем у меня это все писалось в крайне общем случае для сферической лошади, возможно у вас все это будет сильно проще.

P.S. У меня был EhLib 5.6/6.0, сейчас смотрю есть уже 9-й, правда дико дорогой. А вдруг там уже все это сделали и ничего делать не надо вообще (Помечтал немножко...)
java73
постоялец
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Сообщение java73 »

А в RXDGGrid случаем нет подобного? Итоговые всякие строки как в "умных" таблицах там есть, я использую. А фильтр скорее всего придется писать самому, т.к. это же разные компоненты - таблица только за внешнее отображение отвечает, а фильтруется уже сама таблица БД через SQL запросы...
alegzz
незнакомец
Сообщения: 4
Зарегистрирован: 15.03.2017 18:57:59

Сообщение alegzz »

мне бы понять, как рюшечки делать: запихнуть значок фильтр к столбцам и нарисовать окошко. обработку по-любому писать, так как там связанные таблицы. а то я сейчас даже смотрю на DBGrid и в печали: края не прилипают к краям формы...
java73
постоялец
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Сообщение java73 »

Края к форме - привязку надо в редакторе anchors поставить и все будет прилипать, или align свойство
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

Быстрый фильтр/сортировка в памяти делается очень просто - для отображения используется вторичная (виртуальная) таблица, которая не содержит данных, только ссылки на элементы первичной (реальной) таблицы. При изменении условия фильтра/сортировки нужно перезаполнить вторичную таблицу, это может занять ощутимое время (около секунды для миллиона строк), но зато скроллинг и прочие манипуляции пользователя тормозить не будут.
alegzz
незнакомец
Сообщения: 4
Зарегистрирован: 15.03.2017 18:57:59

Сообщение alegzz »

serbod сделать еще один dbgrid? а в колонках как можно добавить иконку фильтра? стандартный компонент работы с MySQL какой-то убогий - при любой проблеме все падает, есть смысл с zeos заморочиться или есть что лучше?
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

alegzz писал(а):сделать еще один dbgrid?

Боюсь, вы неправильно меня поняли. Поправочка - все просто, если вы умеете работать с реальными и виртуальными датасетами. А если хочется готовое, то выше накидали ссылок с компонентами. Они наверняка платные, но тут либо долго учиться и делать все самому, либо платить и получать результат сразу.
alegzz
незнакомец
Сообщения: 4
Зарегистрирован: 15.03.2017 18:57:59

Сообщение alegzz »

serbod, вроде понял - смутило то, что речь про таблицы шла. осталось попробовать. а по рюшечкам где посмотреть?
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

java73 писал(а):А в RXDGGrid случаем нет подобного?


Есть!
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

alegzz писал(а):мне бы понять, как рюшечки делать: запихнуть значок фильтр к столбцам и нарисовать окошко.

http://citforum.ru/programming/delphi/nogrid/
java73
постоялец
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Сообщение java73 »

Вон сколько экстра-свойств есть у RxDBGrid, там это можно прикрутить я так думаю!
Изображение
Ответить