Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1162129071
AlexanderMS
2006-10-29 16:37
2006.11.12
Hint к строке состояния (StatusBar).


15-1161885144
2006 + $01
2006-10-26 21:52
2006.11.12
Версии, билды.


2-1161711944
SkySpeed
2006-10-24 21:45
2006.11.12
Подскажите способ вывода Hint a около трея


2-1161818526
fog
2006-10-26 03:22
2006.11.12
OffsetRgn и TCanvas


15-1161670572
kroner
2006-10-24 10:16
2006.11.12
А Вы в это верите?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский