Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2012, 11:56   #1
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию Фильтрация в ячейке DBGrid

Часто видел в разных БД-таблицах (в том же одинэсе) реализацию фильтра, когда пользователь вводит маску в произвольную ячейку нужного столбца. Вооот. Но не могу найти каких-нибудь туториалов, как такое организовать в дбгриде в тёплой ламповой дельфи7. Может кто-нибудь знает?
yaapelsinko вне форума Ответить с цитированием
Старый 02.02.2012, 12:00   #2
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

И ещё уточню. В принципе не было бы проблемой написать обработчик события. Мол, если нажимаем кнопку в ячейке в режиме редактирования, то редактируем, а если просто в выделенной ячейке, то отображаем какое-нибудь оконце ввода фильтра (хотя как его совместить с ячейкой всё ещё не очень ясно).

Но я что-то не вижу способов узнать, хотябы в режиме редактирования датасет или нет. Вооот.
yaapelsinko вне форума Ответить с цитированием
Старый 02.02.2012, 12:27   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для пользователя достаточно сложно будет переключать в режим редактирования или ввода фильтра, будет постоянная путанница, ИМХО. По существу - создайте Field-ы в DataSet, в событии OnSetText Field-ов в режиме задания условия фильтра не пишите в Field.Value, а организуйте инициализацию фильтровки. Следует учесть, что DataSet.Edit все равно отработает, хотя данные в поле и не изменятся, соответственно и DataSet.Post сработает, даже если вы не захочете этого (например при смене указателя записи).
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.02.2012, 16:43   #4
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

В принципе-то, в моём случае я предполагаю, что редактирования данных в гриде всё равно не будет - только поиск. То есть, он будет ридонли, и пользователь может колотить клавишами сколько хочет. В режим редактирования он не попадёт в любом случае.

Про создание полей не совсем понял, имеется в вижу, чтобы текст из режима редактирования перехватывать и использовать для фильтра?
yaapelsinko вне форума Ответить с цитированием
Старый 02.02.2012, 17:00   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
имеется в вижу, чтобы текст из режима редактирования перехватывать и использовать для фильтра?
Именно это. И в ReadOnly не получится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2012, 18:44   #6
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

У меня тут возникла гениальная идея. Можно ведь просто завести один банальный Edit, а при щелчке по колонке рисовать его над соответстующей ячейкой/колонкой, ну и другие свойства там менять, чтобы фильтр правильно применялся - это уже детали. Но, опять встала неразрешимая проблема - как узнать координаты хотя бы колонки, я уж не говорю о йчейке. :D Гуглю, гуглю, а ничё дельного не гуглится.
yaapelsinko вне форума Ответить с цитированием
Старый 04.02.2012, 19:00   #7
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

а событи в DBGrid - OnColEnter OnColExit не могут помочь?
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 04.02.2012, 19:12   #8
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

Да там я смотрю вообще никаких данных не передаётся. Нет, нашёл решение - в событии ондровколумнцэлл передаётся нужный рект, а поскольку при клике и выделении ячейки перерисовывается именно нужная ячейка (максимум - выделенная строка), то и рект получаю нужный, проверив, фокусед ли ячейка или нет. Вот теперь-то заживём!
yaapelsinko вне форума Ответить с цитированием
Старый 04.02.2012, 19:15   #9
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

в помощь тоже стоит заглядывать

OnColEnter, OnColExit
-----------------
The SelectedField or SelectedIndex property is set.
Read the SelectedField or SelectedIndex property to determine which cell was just entered.
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 04.02.2012, 19:43   #10
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

А у меня в семёрке дельфовский хелп не работет.
yaapelsinko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация по дв.клику DBGrid. sanchosss БД в Delphi 3 07.12.2011 13:52
Фильтрация DBGrid Delphi7 MrMorozko Помощь студентам 1 22.11.2010 15:40
Сортирование и фильтрация DBGrid Stranger333 Помощь студентам 2 08.03.2010 20:49
фильтрация в DBGrid ГОСЕАН БД в Delphi 4 17.07.2007 17:05
Фильтрация по месяцу DBgrid .... khaz БД в Delphi 5 28.04.2007 14:03