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

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

OnSetText на Lookup поле - возникают проблемы


DelphiLexx ©   (2006-09-06 12:07:00) 

Возникла следующая ситуация.
Состояние DBGridEh'a такое же как в вопросе http://www.delphimaster.ru/cgi-bin/forum.pl?id=1157366364&n=18, а именно:

Есть FibDataSet1 (типа ТFibDataSet) который подключен через TDataSource к TDBGridEh'у. Одно из полей ТFibDataSet1 является Lookup поле и связано через LookupDataSet со вторым FibDataSet2 (типа ТFibDataSet). Это приводит к тому что в одной из колонок моего DBGridEh'a при нажатии в этой колонке на любой записи выскакивает раскрывающийся список из которого и выбирается нужное значение для текущей записи.
cписка.

На Lookup поле в FibDataSet1 стоит обработчик OnSetText:

procedure TForm1.FIBDataSet1LookupSetText(Sender: TField; const Text: String);
begin
 Sender.AsString := Text;
 FibDataSet1.First;
{хочу обратить внимание, что здесь FibDataSet1.State =  dsBrowse, но прикол в том, что после выхода из этой процедуры первая запись DBGridEh находится в режиме редактирования,
хотя не должна быть в режиме редактирования. Как с этим бороться?}
end


DelphiLexx   (2006-09-06 17:10:00) [1]


Помоему нашел
Вручную переводим грид из состояния редактирования
DBGridEh1.EditorMode := true


evvcom   (2006-09-06 16:24:00) [2]

> [13] DelphiLexx ©   (06.09.06 15:48)
> грид не должен быть

Видимо, разработчику грида не пришло в голову потестировать такое извращение, не находишь? Если не нравится, напиши свой грид.


DelphiLexx   (2006-09-06 15:48:00) [3]


> Даже не хочется в эту галиматью вникать. Меняешь поле, тут
> же в обработчике осуществляешь навигацию, которая опять
> воздействует на LookupDataSet,

Да фиг c ним, что он воздействует, если dataset находится в режиме dsBrowse, то следовательно и грид не должен быть в режиме редактирования вот, в чем вся фишка.


evvcom   (2006-09-06 15:35:00) [4]

> [10] DelphiLexx ©   (06.09.06 15:21)
> то дай понять другим

Даже не хочется в эту галиматью вникать. Меняешь поле, тут же в обработчике осуществляешь навигацию, которая опять воздействует на LookupDataSet, он теперь при некоторых условиях опять может воздействовать на первичный НД, опять обработчик, ... Бред какой-то. Да еще и кукуруза с пшеницей...


Sergey13   (2006-09-06 15:30:00) [5]

> [10] DelphiLexx ©   (06.09.06 15:21)
> Если не понял, то дай понять другим.
А я что, я пожалста. А ты пока про лукап поля почитай что нибудь. И про вычисляемые заодно.


DelphiLexx   (2006-09-06 15:21:00) [6]


>
> Наверное я не особоодаренный - ничего не понял. Злаковые
> какие то рядомстоящие. Уборочная началась?

Если не понял, то дай понять другим.


Sergey13   (2006-09-06 14:42:00) [7]

> [8] DelphiLexx ©   (06.09.06 14:32)

Наверное я не особоодаренный - ничего не понял. Злаковые какие то рядомстоящие. Уборочная началась?


DelphiLexx   (2006-09-06 14:32:00) [8]


> А ты думаешь без твоей помощи не изменится?

Объясняю для особо одаренных. Например, из раскрывающегося списка Lookup поля выбираю занчение "Пшеница", становлюсь на первую запись, если выбранное значение "Пшеница" и первая запись Кукуруза,  то в рядостоящее поле "общий показатель" присваевается значение 2, "Пшеница" и первая запись Рожь,  о в рядостоящее поле "общий показатель" присваевается значение 43 и так для всех записей, там вообщем сложный алгоритм, но поверь мне нужно сделать так, чтобы запись не оставалась редактируемой после выполнения процедуры.


Sergey13   (2006-09-06 14:07:00) [9]

> [6] DelphiLexx ©   (06.09.06 13:42)
> Ну так надо, чтобы в зависимости от значания Lookup поля
> изменялись значения записей рядом стоящего поля, в котором
> у меня хранятся числа.
А ты думаешь без твоей помощи не изменится?


DelphiLexx   (2006-09-06 13:42:00) [10]


> Почему другие должны меняться, как и где они меняются? Ты
> бы описал задачу то.

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


Sergey13   (2006-09-06 13:16:00) [11]

> [4] DelphiLexx ©   (06.09.06 13:10)

Почему другие должны меняться, как и где они меняются? Ты бы описал задачу то.


DelphiLexx   (2006-09-06 13:10:00) [12]


> Я что-то не понял, а зачем вообще этот обработчик?

Ну как зачем? Как только изменяется значение Lookup поле в зависимости от его значение меняются значения записей других полей (колонок).


Sergey13   (2006-09-06 13:02:00) [13]

> [0] DelphiLexx ©   (06.09.06 12:07)

Я что-то не понял, а зачем вообще этот обработчик?


DelphiLexx   (2006-09-06 12:53:00) [14]


> Может лучше строку FibDataSet1.First заменить на FibDataSet1.
> Post?

На самом деле ниже моего комментария в приведенном коде следует продолжение т.е.

procedure TForm1.FIBDataSet1LookupSetText(Sender: TField; const Text: String);
begin
Sender.AsString := Text;
FibDataSet1.First;
{здесь идет обработка в зависимости от выбранного значения Text, меняются другие поля}
end.


Рустем   (2006-09-06 12:27:00) [15]

А для чего ты перемещаешься на первую запись?
Может лучше строку FibDataSet1.First заменить на FibDataSet1.Post?


Наверх

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