![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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?