Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Редактирование ячейки 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.273 c
4-1151488606
pioner85
2006-06-28 13:56
2006.11.12
Как обработать события клика по balloon tips (вспл. посдк.win xp)


2-1161802535
Батя
2006-10-25 22:55
2006.11.12
как вставить в memo текст


15-1161684138
Slava812
2006-10-24 14:02
2006.11.12
Загадка (срочно нужен ответ)


15-1161931115
Витян
2006-10-27 10:38
2006.11.12
Пара простых вопросов по физике...


2-1161857520
Khabibulin
2006-10-26 14:12
2006.11.12
MailSlot