Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
ВнизDBGrid Найти похожие ветки
← →
kirillrepin © (2008-07-07 15:05) [0]Подскажите пожалуйста ответ на наверное глупый вопрос.
есть DBGrid и несколько Label, надо чтобы при клике на ячейке дбгрида выделялась строка и лэйбелах отображались содержимое ячеек из этой строки.
заранее благодарен!
← →
Правильный^Вася (2008-07-07 15:07) [1]Dataset.AfterScroll
← →
kirillrepin © (2008-07-07 15:20) [2]извините не совсем понял ответ?
← →
Поросенок Винни-Пух © (2008-07-07 15:22) [3]TDBText вместо TLabel
← →
kirillrepin © (2008-07-07 15:38) [4]а как возможно реализовать так как поставлена задача?
← →
Sergey13 © (2008-07-07 15:45) [5]> [4] kirillrepin © (07.07.08 15:38)
А ты вообще программировал ранее? Тебе уже 2 варианта предложили.
← →
Ega23 © (2008-07-07 15:47) [6]
> Dataset.AfterScroll
В данной ситуации я бы на TDataSource.OndataChange закладывался бы.
← →
Правильный^Вася (2008-07-07 15:53) [7]
> Dataset.AfterScroll
> kirillrepin © (07.07.08 15:20) [2]
> извините не совсем понял ответ?
в обработчике события присваиваешь своим наклейкам содержимое ячеек
← →
Anatoly Podgoretsky © (2008-07-07 15:53) [8]
> А ты вообще программировал ранее? Тебе уже 2 варианта предложили.
Так не законченые же, я вставлял - компилятор ругается.
← →
Ega23 © (2008-07-07 16:03) [9]
> Так не законченые же, я вставлял - компилятор ругается.
Просто у вас проблемы с пониманием основ объектно-ориентированного программирования.. :)
← →
Поросенок Винни-Пух © (2008-07-07 16:05) [10]Чувак, замени лэйблы на tdbtext
← →
Anatoly Podgoretsky © (2008-07-07 16:09) [11]> Ega23 (07.07.2008 16:03:09) [9]
Не у меня, а у компилятора.
← →
Anatoly Podgoretsky © (2008-07-07 16:10) [12]> Поросенок Винни-Пух (07.07.2008 16:05:10) [10]
Он же сказал - нельзя, зачет не примут.
← →
BUM (2008-07-08 12:30) [13]
> В данной ситуации я бы на TDataSource.OndataChange закладывался
> бы.
Почему это?
← →
Ega23 © (2008-07-08 12:36) [14]
> Почему это?
Ну как же. А DataSet.Disable|EnableControls ?
← →
BUM (2008-07-08 12:48) [15]
> Ну как же. А DataSet.Disable|EnableControls ?
Ну дык AfterScroll в данном случае (DisableControls) и будет работать а не OndataChange..
← →
Ega23 © (2008-07-08 12:54) [16]
> Ну дык AfterScroll в данном случае (DisableControls) и будет
> работать а не OndataChange..
Правильно.
А не задумывался, зачем DisableControls придумано? Как раз для того, чтобы отключить все визуальные компоненты и не тратить время на перерисовку данных.
← →
BUM (2008-07-08 13:10) [17]
> А не задумывался, зачем DisableControls придумано? Как раз
> для того, чтобы отключить все визуальные компоненты и не
> тратить время на перерисовку данных.
Интересно, это я нить обсуждения потерял или Вы?
← →
Ega23 © (2008-07-08 13:30) [18]
> Интересно, это я нить обсуждения потерял или Вы?
А Вы не понимаете, о чём идёт речь?
Вообще-то я писал Правильному Васе, но раз Вы не понимаете, то объясняю:
1. Как известно, в DBGrid (DBEdit, DBLabel, DBLookupCombo и т.п.) нет никаких данных. Данные есть в "наборе данных" - в каком-то потомке TDataSet.
2. Есть такая штука, как TDataSource. Нужность данного компонента лично у меня вызывает массу вопросов (считаю его лишним), но - тут уж подеваться некуда. У каждого TDataSource есть один TDataSet. С другой стороны, у одного TDataSet может быть много разных TDataSource.
3. Есть такая штука, как TDataLink. Любой DBAware компонент где-то внутри себя (или в private или в protected) имеет DataLink. И именно в DataLink приходят все события от набора данных, такие как:
3.1. ActiveChanged. Генерируется при изменении свойства Active. Т.е. при открытии или закрытии НД.
3.2. DataChanged. Весьма любопытное событие. Генерируется много и часто. В основном при изменении положения курсора НД. Но, например, также генерируется при вызове TDataSet.EnableControls
3.3. Всего их там порядка 7-10. При желании Вы сможете ознакомится с остальными в документации и в исходниках DB.TDataLink
4. Так вот. При вызове метода TDataSet.DisableControls происходит следующее: TDataSet начинает плевать на содержимое списка FListSource (вроде так называется. Лень смотреть. Короче, список всех TDataSource, "смотрящих" на этот НД) и не рассылает им сообщения о том, что с ним (TDataSet) что-то произошло. Т.е. данные в визуальных контролах как-бы "замирают" и перестают обновляться.
5. И они не обновляются, пока не будет вызван метод TDataSet.EnableControls (точнее, каждый раз, когда вызывается метод DisableControls, инкриментируется некий счётчик. При вызове EnableControls - он декриментируется. Если 0 - не изменяется. События пойдут тогда, когда равен 0).
Резюме: если мы хотим, чтобы событие происходило ВСЕГДА - действительно нужно закладываться на TDataSet.AfterScroll.
А вот если тогда, когда надо - тогда на TDataSource.OnDataChange
← →
Василий Жогарев © (2008-07-08 13:37) [19]
> есть DBGrid и несколько Label, надо чтобы при клике на ячейке
> дбгрида выделялась строка и лэйбелах отображались содержимое
> ячеек из этой строки.procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption := ADOQuery1IdStreet.AsString;
Label2.Caption := ADOQuery1Street.Value;
end;
← →
BUM (2008-07-08 13:45) [20]
> Вообще-то я писал Правильному Васе
Прошу прощения. И спасибо за объяснение. Хотя например
> Есть такая штука, как TDataSource. Нужность данного компонента
> лично у меня вызывает массу вопросов (считаю его лишним)
не совсем понял. Хотелось бы узнать как Вы без него обходитесь? Спасибо.
← →
Ega23 © (2008-07-08 14:08) [21]
> не совсем понял. Хотелось бы узнать как Вы без него обходитесь?
> Спасибо.
А я без него никак не обхожусь. Так уж вся эта связка устроена TDataSet -> TDataSource -> TDataLink
Просто его "нужность" в этой связке вызывает некоторые сомнения.
Впрочем это уже тема для совсем другого холивара, не имеющего отношения к сабжу.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.007 c