|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.05.2013, 16:32 | #1 |
Регистрация: 15.05.2013
Сообщений: 6
|
Свойство для DBGrid (Delphi)
Ситуация состоит вот в чем: при редактировании ячейки DBGrid'a необходимо отслеживать, чтобы пользователь не ввел более трех символов после запятой. Создал обработчик для действия OnKeyPress. Обработчик работает, но он срабатывает только при сохранении, когда уже введены больше 3х знаков - то есть не оперативно, не при вводе 4го знака. я считываю вводимый текст при помощи DbGrid.SelectedField.Text, но этот метод мне кажется считывает сохраненное в базе значение, а не вводимый текст. Перечитал документацию, но так и не нашел, каким методом считывается текущее значение в редактируемой ячейке. (Пробовал также методы CurValue и NewValue - та же проблема.) Может, такой возможности в принципе нет и ее нужно программировать? Буду благодарен за любой ответ/совет/ИМХО.
|
15.05.2013, 21:13 | #2 |
Подтвердите свой е-майл
Регистрация: 07.04.2007
Сообщений: 120
|
Можно воспользоваться каким нибудь набором компонентов, например EhLib, там возможно реализовать такую проверку.
Вообще с такой валидацией идеального решения не видел, хотелось бы чтобы можно было ввести только такое число, какое ограничение заданно в БД. Например если Number(5), то только 5 цифр и т.п. Может кто подскажет, где такое реализовано. Последний раз редактировалось Armorer; 15.05.2013 в 21:16. |
15.05.2013, 23:04 | #3 |
Регистрация: 15.05.2013
Сообщений: 6
|
Пока пытаюсь реализовать свою задачу при помощи InplaceEditor. Не могу понять одну вещь: объекту класса TStringGrid этот метод недоступен, а если создать тип на основании TStringGrid :
Код:
|
16.05.2013, 13:19 | #4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Наследнику они доступны, подразумевается для обращения к ним в методах самого наследника, обращаясь же к экземпляру наследника в методе левого класса (в данном случае формы) - нельзя. Сделав потомка, Вы раскрыли область видимости до границ модуля (например из другого модуля обращаясь к dbgridaccess1 вы не сможете вызвать этот метод)
Теория http://www.transl-gunsmoker.ru/2010/07/4-protected.html По теме - я бы выкинул onkeypress и сделал бы на onkeydown, мне кажется , может сработать, особенно если проверять текущий вводимый символ и если его запрещено по логике использовать, то просто делать параметр текущей нажатой кнопки пустым - #0 |
16.05.2013, 19:45 | #5 |
Регистрация: 15.05.2013
Сообщений: 6
|
Задачу решил. Но обработчик сделал не для моего DBGrid'a, а для объекта TOraQuery, данные которого отображаются/редактируются через мой DBGrid (полностью цепочка выглядит так: TOraQuery -> TDataSource -> TDBGrid). Обработчик повесил на действие BeforePost, введенный, но еще не сохраненный текст получил вот так: Query.FieldByName('field_name').Val ue, где Query: TOraQuery, а field_name - имя редактируемого поля. То есть отреагировать и выдать сообщение сразу при вводе 4го знака так и не получилось, но в принципе задание решено. Всем большое спасибо за помощь!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Свойство DBGrid | Ericnex | БД в Delphi | 11 | 11.09.2012 11:33 |
свойство PopupMenu, компонент DBGrid | Jene4ka | Компоненты Delphi | 5 | 19.12.2011 22:17 |
DbGrid свойство Option.dgEditing | RS219 | Общие вопросы Delphi | 5 | 17.11.2010 10:55 |
Изменене свойство копонента DBGrid | Uchqunbek | БД в Delphi | 2 | 19.03.2009 19:54 |
свойство сетки DBGrid | XFilippowX | Общие вопросы Delphi | 6 | 15.02.2009 14:56 |