Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Запрет редактирования поля в dbgrid при условии

Автор: optimized
Дата сообщения: 05.12.2011 20:17
Нужно запретить редактирование поля таблицы в dbgrid, при условии определенного значения в другом.
dbgrid заполняется с запроса adoquery, поля типа char.
Предполагаю должно быть что-то вроде этого:

Код: if (ADOQuery->FieldByName("pole1")->Value=="char")
ADOQuery->FieldByName("pole2")->ReadOnly=true;
Автор: YuriyRR
Дата сообщения: 05.12.2011 23:42
optimized

Цитата:
Нужно запретить редактирование поля таблицы в dbgrid, при условии определенного значения в другом.

Проверяй при переходе с записи на запись в датасете. (AfterScroll)
Автор: ekemov
Дата сообщения: 06.12.2011 13:24
Можно в гриде при событии на клик мышки или попытки ввода символа ячейки.
Автор: optimized
Дата сообщения: 07.12.2011 11:03
Спасибо, куда вставить код теперь понятно, а теперь сам код нужно подправить)
При таком варианте кода

Код: if (ADOQuery->FieldByName("pole1")->Value=="char")
Автор: wasilissk
Дата сообщения: 07.12.2011 11:27
optimized

Цитата:
То в readonly получается весь столбец

Естественно, т.к. этот код ADOQuery->FieldByName("pole2")->ReadOnly=true; делает readonly весь столбец. Вам тогда надо отслеживать изменение ячейки и ее делать readonly.
Автор: optimized
Дата сообщения: 08.12.2011 20:47
Косяк понял, благодарю)
Автор: rrromano
Дата сообщения: 09.12.2011 16:01
Я бы обрабатывал изменения поля в датасете, устанавливая необходимое поле в ридонли. Таким образом мы не зависим от грида и реализуем функционал на уровне данных. Опять же, в таком случае можно спокойно сменить грид на другой или на что-то ещё - функционал сохранится ).
Автор: wasilissk
Дата сообщения: 09.12.2011 19:46
rrromano
Так он же так и делал.
Автор: perceptron
Дата сообщения: 09.12.2011 22:26
Можно в OnColEnter проверить значение и недать стать на этот столбец курсору:

Код:
procedure TfrmH_z92_like.dgeHColEnter(Sender: TObject);
begin
if TDBGrid(Sender).SelectedIndex = TDBGrid(Sender).FieldColumns['Col1'].Index then
TDBGrid(Sender).SelectedIndex := TDBGrid(Sender).FieldColumns['Col1'].Index + 1;
end;
Автор: optimized
Дата сообщения: 17.12.2011 23:15
Сделал через datasource, на ondatachange, но никак не найду как выделить только одно поле, в той строке со значением, при котором мы запрещаем редактирование.
Автор: mmm_home
Дата сообщения: 18.12.2011 15:11
а можно подробнее что именно нужно:
- запретить пользователю входить в редактор поля
- сохранять изменения поля в базе?

оба варианта ReadOnly, но внешне выглядят по разному

Страницы: 1

Предыдущая тема: Лингвистический транслятор на Delphi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.