![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контроль введенных значений в DBGRID-e [D6, 95/98]
Sirus © (2006-08-30 08:15:00)Подскажите, знатоки, как правильно реализовать проверку значений при вводе данных через сетку DBGRID-а. Надо при вводе значения некоторого поля проверить входит ли введенное значение в определенные границы и выдать об этом сообщение, если не входит. Желательно это делать до ввода следующей строки значений.
Буду благодарен за подсказку и совет.
Сайрус 30.08.2006
MsGuns (2006-08-30 15:58:00) [1]>Fay © (30.08.06 15:50) [15]
>Можно поподробнее?
Есть три поля датасета, значения которых должны сличаться с одним и тем же справочником (или разными, сути не меняет).
Если сверка со справочником (например, дин.запросом) будет выполняться каждый раз, когда пользователь изменил содержимое любого из этих трех полей и хочет уйти из соотв.ячейки, то надо будет выполнить 3 запроса (по одному для каждого измененного поля).
Кроме того, переход в другую ячейку не состоится до тех пор, пока не выполнится запрос для "покидаемой" ячейки. Т.е. пока не провериться товар (к примеру), я не смогу ввести кол-во или цену, пока не выполонится проверка.
"Комплексная" проверка выполняется один раз перед постингом и для всех сразу. В приведенным примере три проверки можно выполнить одним запросом (в случае разных таблиц через Union)
Fay (2006-08-30 15:50:00) [2]2 MsGuns © (30.08.06 15:39) [14]
> Да и тормоза будут страшные,
Можно поподробнее?
MsGuns (2006-08-30 15:39:00) [3]"Битие по рукам" во время редактирования в гриде делает программу крайне неудобной (и это мягко сказано) для пользователя, т.к. не дает перейти в другую ячейку пока не введешь корректное значение в текущее. Да и тормоза будут страшные, если содержимое нескольких колонок надо сверять, например, со справочниками.
Самый оптимальный способ - делать комплексную проверку в событии датасета BeforePost с фокусированием в гриде первой ячейки, содержащей ошибку. Текст же ошибки не выводить в модальное окно (ShowMessage), а отрисовывать, например, в статусбаре под гридом.
Fay (2006-08-30 15:07:00) [4]2 Sirus (30.08.06 15:03) [12]
Честно говоря, мне не понятно, чем это я так выделился... 8|
Sirus (2006-08-30 15:03:00) [5]Спасибо всем и персонально FAY, который конкретно помог и прекратил бесполезные разговоры.
Еще раз благодарю.
Sirus.
Fay (2006-08-30 13:19:00) [6]2 Sirus (30.08.06 13:09) [10]
procedure TheForm.TheGridCellClick(Column: TColumnEh);
begin
if Column = TheGrid.Columns[0] then
ShowMessage(Colum.FieldName)
else
ShowMessage('RTFM');
end;
Sirus (2006-08-30 13:09:00) [7]Маленький примерчик, пожалуйста. Буду очень благодарен и тема будет закрыта.
Сайрус.
Reindeer Moss Eater (2006-08-30 12:53:00) [8]И как это всунуть в проверку колонки?
наоборот.
надо в "это" всунуть проверку колонки.
переданной в параметре.
Sirus (2006-08-30 12:46:00) [9]И как это всунуть в проверку колонки? Можно чуть подробнее. Например мне надо проверить соответствует ли значение колонки с именем KOL значению не более 100. В справку я заглядывал, но она очевидно для более подкованных.
Сайрус.
Sergey13 (2006-08-30 11:59:00) [10]> [5] Sirus (30.08.06 11:54)
У хелпа не пробовал спрашивать?
Плохиш (2006-08-30 11:59:00) [11]
> Sirus (30.08.06 11:54) [5]
> А как COLUMN идентифицируется - номером или именем?
А в справку заглянуть религия не позволяет?
type TDBGridClickEvent = procedure (Column: TColumn) of object;
Sirus (2006-08-30 11:54:00) [12]А как COLUMN идентифицируется - номером или именем? Буду благодарен за примерчик.
Сайрус
Fay (2006-08-30 10:47:00) [13]2 Sirus (30.08.06 10:38) [2]
Column - из параметра OnCellClick, запись - текущая. В чём проблема-то?
Sergey13 (2006-08-30 10:47:00) [14]> [2] Sirus (30.08.06 10:38)
> Событие OnCellClick реагирует при клике на любую ячейку,
> а мне надо, чтобы реакция была при нажатии на конкретную.
Реагирует на любую, но передает параметром конкретную, которую можно анализировать.
Sirus (2006-08-30 10:38:00) [15]Спасибо Sergey13 за подсказку. Похоже, что это то, что надо. Но есть дополнительный вопрос по DBGRID. Как определить точно ячейку по которой надо кликнуть в строке DBGRID, чтобы допустим вызвать дополнитедьную форму. Событие OnCellClick реагирует при клике на любую ячейку, а мне надо, чтобы реакция была при нажатии на конкретную. Не знаю, как это сделать. Буду благодарен за конструктивную подсказку.
С уважением- Сайрус.
30.08.2006
Sergey13 (2006-08-30 08:46:00) [16]Нет в гриде данных, они в датасете. Вот там и смотри. Например в BeforePost.