Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Контроль введенных значений в 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо