Форум: "Базы";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизРедактирование ячейки TDBGrid только при нажатии Enter Найти похожие ветки
← →
Alithay (2006-09-14 11:21) [0]Подскажите как сделать так, чтобы в компоненте DBGrid редактировать ячейку можно было только при нажатии Enter. Установка свойства Always ShowEditor В FALSE не помагает.
А то получается случайно кнопку нажал и все уже ячейка редактируется.
Использую Delphi 6.
В других компонентах (InfoPower, EhLib, Quantum) та же проблема
← →
ЮЮ © (2006-09-14 11:27) [1]
> В других компонентах (InfoPower, EhLib, Quantum) та же проблема
Это не проблема, а общепринятый пользовательский интерфейс
> А то получается случайно кнопку нажал и все уже ячейка редактируется.
Нажми осознано кнопочку "Esc" и будет тебе счастье.
При таких кривых пальзах вообще не стоит редактировать в гриде, только на модальной форме по одной записи :)
← →
MsGuns © (2006-09-14 11:48) [2]При программировании "гридного" редактирования вообще преступление пускать управление "на самотек". Возникновение пустых записей, "пропажа" нужных полей и целых записей, нечаянное изменение "правильных" данных на "неправильные" и т.д. - вот неполный список "батонокидательной" технологии использования ДБГридов.
Для "отлова" кнопок лучше всего использовать соотв. акции с назначенными им "авто"-кнопками. В этим случае при нажатии, например, Ins, грид вместо того, чтобы тупо вставить пустую строку, запостив текущую (которую, возможно, еще править и править), передаст управление в Ваш обработчик, в котором Вы можете проверить в каком состоянии (State) Ваш датасет и, если Edit или Insert, то проверить корректность введенной в поля записи информации, после чего
- запостить ее и вставить новую
либо
- выдать сообщение об ошибке, "встать" в ошибочное поле редактируемой записи и, конечно, новую запись не добавлять.
← →
ЮЮ © (2006-09-14 11:59) [3]
> "гридное" редактирование
> "батонокидательные" технологии использования ДБГридов
Ужастей каких наговрил. А я лично предпочитаю табличное представление большого количества данных множеству накиданных на форму бусть ине батонов, но едитов :)
← →
MsGuns © (2006-09-14 12:20) [4]>ЮЮ © (14.09.06 11:59) [3]
>Ужастей каких наговрил. А я лично предпочитаю табличное представление большого количества данных множеству накиданных на форму бусть ине батонов, но едитов
Тебе позволительно ;)
← →
Desdechado © (2006-09-14 15:33) [5]DataSource.AutoEdit:=False;
+ что-то типа навигатора
← →
Alithay (2006-09-14 18:43) [6]Проведу параллель с 1С, там пока вы не нажмете Enter вы не можете редактирвоать данные в таблице. Нажал, отредактировал, нажл снова Enter.
Просто и удобно. Как добится такого же эффекта средствами Delphi.
В мануале написано, что за это отвечает свойство AlwaysShowEditor. По умолчанию True. Устанавливаю егов False. И все равно нажимаешь, пусть даже случайно какую-нибудь кнопку и все редактируется, при этом можно не успеть нажать на ESC.
← →
ANB © (2006-09-14 19:30) [7]
> В мануале написано, что за это отвечает свойство AlwaysShowEditor.
Это в каком это мануале так написано ? Может, ты неправильно его перевел ?
← →
ANB © (2006-09-14 19:41) [8]Вырубаешь в Options грида свойство dgEditing
и пишешь код (примерно) :
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
DBGrid1.Options := DBGrid1.Options + [dgEditing];
ADOQuery2.Edit;
end;
end;
← →
Alithay (2006-09-14 22:37) [9]
> > В мануале написано, что за это отвечает свойство AlwaysShowEditor.
> Это в каком это мануале так написано ? Может, ты неправильно
> его перевел ?
Под словом мануал я понимаю хелп IDE, который вызывается при нажатии F1.
Цитирую первоисточник:
dgAlwaysShowEditor
The grid is always in edit mode. That is, the user does not have to press Enter or F2 before editing the contents of a cell.
← →
MsGuns © (2006-09-15 10:59) [10]>Alithay (14.09.06 18:43) [6]
Очень просто.
У "грида" должно быть 2 логических режима: "только смотреть" и "можно править только текущую запись".
Переключение режимов - процедуры "Начать редактирование/Новая запись" и "Завершить редактирование".
Первая снимает с грида блокировку правки (ReadOnly := false) и активирует постоянный InplaceEditor (Options := Options+[dsAlwaysShowEditor]), а также переводит датасет в режим dsEdit или dsInsert чтобы "позволить" гриду прописать полученные в его ячейках данные в связанную таблицу. Не забыть написать обработчик BeforePost, в котором проверять введенные данные, а также блокировать случайных уход с редактируемой записи (по клику мыши, скрулу или клавиши навигации). Также надо установить флажки блокировки некоторых сервисных функций, если они есть (поиск, сортировки, фильтр и т.д..). Короче, в этом режиме у пользователя не должно быть никаких шансов покинуть только что добавленную или редактируемую запись иначе, нежели нажатием кнопки "завершить" или "отменить"
Вторая выполняет либо отмену (Cancel), либо сохранение в таблице внесенных в запись изменений (Post) с последующим переводом грида в состояние "только чтение", прятание inplaceeditor и разблокировку сервисных "клавиш".
Эти процедуры вызываются по активации соотв.контролов посредством связанной с ними акцией.
Чтобы сделать "как в 1С" нужно просто указанную акцию немного "подшаманить":
проверять режим грида и вызывать то ли 1-ю, то ли 2-ю процедуру.
"повесить" экшн на клавишу Enter
Все.
← →
PEAKTOP © (2006-09-15 11:25) [11]
> Чтобы сделать "как в 1С" нужно просто указанную акцию немного
> "подшаманить":
>
Достаточно двух событий OnEnter и OnExit у объекта TColumn
← →
MsGuns © (2006-09-15 11:43) [12]>PEAKTOP © (15.09.06 11:25) [11]
>Достаточно двух событий OnEnter и OnExit у объекта TColumn
Неужели ?
← →
Плохиш © (2006-09-15 12:23) [13]
> Alithay (14.09.06 11:21)
1. Заводишь логическую переменную, назовём еёbEnableEdit
.
2. В обработчике события OnBeforeEdit делаешь проверкуif not bEnableEdit then abort;
3. В OnKeyDown грида по нажатию "ентер" пишешь установку bEnableEdit в true и перевод набора данных в режим редактирования.
4. ВOnStateChange
источника данных при переходе в состояние просмотра сбрасываешь bEnableEdit в false.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c