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

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

DBgrid проблема при перемещение курсором по полям [D7, IB6.x]


ksa2002 ©   (2006-07-19 11:05:00) 

В грид выводятся значения , одно из полей  открыто для редактирования. Если пользователь  жмёт мышкой то я определяю имя поля и дальше блокирует редактирование или нет.
А вот если я нахажусь уже в ячейки где можно редактировать и перемещаюсь на поле которое "должно быть запрещенно" он переходит в режим редактирования если нажать дальше, то редактирования пропадёт(всё в порядке). При выборе мышкой всё работет корректно.
Для опеределения номера поля dbgrid1.SelectedIndex.
События проверял как грида так и датасета (эдиты и апдэйти)

Почему при перемещение именно курсором (клавишами) происходит так?  Какием событием можно отловить такое перемещение?
 
PS при первом  перемещение на  запрещённое поле  не срабатывает событие.


Плохиш   (2006-07-20 10:56:00) [1]


> ksa2002   (19.07.06 13:12) [7]
> а как тогда мне поступить?

Есть такая волшебная процедура, Abortназывается. Неужели про неё в справке по OnBeforeEdit не написано?


Sergey13   (2006-07-19 13:50:00) [2]

> [10] ksa2002   (19.07.06 13:35)

А как он меняется? Разные таблицы учавствуют с разными полями? Тогда как ты обращаешься к ним по конкретному имени поля? Если меняется только WHERE секция, то можно в дизайнере делать.


ksa2002   (2006-07-19 13:35:00) [3]

[6] хех а я думал что так тока стаичные поля можно ))) ..точно можно и так установить )))
[9] в том то  и дело что запрос меняется в зависимости от данных


Sergey13   (2006-07-19 13:22:00) [4]

> [7] ksa2002   (19.07.06 13:12)

Если запрос датасета не меняется, то вообще все можно в дизайнере сделать.


Desdechado   (2006-07-19 13:19:00) [5]

[6] повторить для всех блокируемых полей


ksa2002   (2006-07-19 13:12:00) [6]

а как тогда мне поступить?
чтобы была возможность редактировать только одно поле (из нескольких)??? в гриде


Desdechado   (2006-07-19 13:05:00) [7]

Установка свойства поля делается заранее, сразу после открытия датасета, а не перед попыткой редактирования.


ksa2002   (2006-07-19 13:00:00) [8]

procedure TForm6.IBDataSet1BeforeEdit(DataSet: TDataSet);
begin
memo1.text:=memo1.text+'*1*'+ inttostr(dbgrid1.SelectedIndex);
if ((DBGrid1.Fields[DBGrid1.SelectedIndex].FullName)='MIN_KOL')  then
     DBGrid1.ReadOnly:=false
   else
      DBGrid1.ReadOnly:=true;

end;

ноль эмоций ..всреавно продолжает вводить в поле значения, при переводе на другое поле таблицу блокирует


Desdechado   (2006-07-19 12:49:00) [9]

Field.ReadOnly


ksa2002   (2006-07-19 12:44:00) [10]

BeforEdit датасет
действительно отловил данный момент, но всеравно разрешил вносить значения. Хотя в свойствах (событие датасет) грида я прописал после того как он опредилил поле, запрет на  редактирование (если я тут же перемещаюсь на запись выше или ниже то всё работает).


ksa2002   (2006-07-19 11:30:00) [11]

хех BeforEdit датасета заработало ) ...хотя до этого вообще молчало странно )) мож я чего напортачил )

Спасибо.


Sergey13   (2006-07-19 11:18:00) [12]

А не правильнее будет ловить все это в BeforEdit датасета? И/или определить нужные поля как нередактируемые.


Наверх

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