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

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

DBGrid [D5, MSSQL]


Страницы:   1 2

kirillrepin ©   (2008-07-07 15:05:00) 

Подскажите пожалуйста ответ на наверное глупый вопрос.
есть DBGrid и несколько Label, надо чтобы при клике на ячейке дбгрида выделялась строка и лэйбелах отображались содержимое ячеек из этой строки.
заранее благодарен!


Ega23   (2008-07-08 14:08:00) [1]


> не совсем понял. Хотелось бы узнать как Вы без него обходитесь?
>  Спасибо.


А я без него никак не обхожусь. Так уж вся эта связка устроена TDataSet -> TDataSource -> TDataLink
Просто его "нужность" в этой связке вызывает некоторые сомнения.
Впрочем это уже тема для совсем другого холивара, не имеющего отношения к сабжу.


BUM   (2008-07-08 13:45:00) [2]


> Вообще-то я писал Правильному Васе

Прошу прощения. И спасибо за объяснение. Хотя например
> Есть такая штука, как TDataSource. Нужность данного компонента
> лично у меня вызывает массу вопросов (считаю его лишним)

не совсем понял. Хотелось бы узнать как Вы без него обходитесь? Спасибо.


Василий Жогарев   (2008-07-08 13:37:00) [3]


> есть DBGrid и несколько Label, надо чтобы при клике на ячейке
> дбгрида выделялась строка и лэйбелах отображались содержимое
> ячеек из этой строки.

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
 Label1.Caption := ADOQuery1IdStreet.AsString;
 Label2.Caption := ADOQuery1Street.Value;
end;


Ega23   (2008-07-08 13:30:00) [4]


> Интересно, это я нить обсуждения потерял или Вы?


А Вы не понимаете, о чём идёт речь?
Вообще-то я писал Правильному Васе, но раз Вы не понимаете, то объясняю:
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


BUM   (2008-07-08 13:10:00) [5]


> А не задумывался, зачем DisableControls придумано? Как раз
> для того, чтобы отключить все визуальные компоненты и не
> тратить время на перерисовку данных.

Интересно, это я нить обсуждения потерял или Вы?


Ega23   (2008-07-08 12:54:00) [6]


> Ну дык AfterScroll в данном случае (DisableControls) и будет
> работать а не OndataChange..


Правильно.
А не задумывался, зачем DisableControls придумано? Как раз для того, чтобы отключить все визуальные компоненты и не тратить время на перерисовку данных.


BUM   (2008-07-08 12:48:00) [7]


> Ну как же. А DataSet.Disable|EnableControls ?

Ну дык AfterScroll в данном случае (DisableControls) и будет работать а не OndataChange..


Ega23   (2008-07-08 12:36:00) [8]


> Почему это?


Ну как же. А DataSet.Disable|EnableControls ?


BUM   (2008-07-08 12:30:00) [9]


> В данной ситуации я бы на TDataSource.OndataChange закладывался
> бы.

Почему это?


Anatoly Podgoretsky   (2008-07-07 16:10:00) [10]

> Поросенок Винни-Пух  (07.07.2008 16:05:10)  [10]

Он же сказал - нельзя, зачет не примут.


Anatoly Podgoretsky   (2008-07-07 16:09:00) [11]

> Ega23  (07.07.2008 16:03:09)  [9]

Не у меня, а у компилятора.


Поросенок Винни-Пух   (2008-07-07 16:05:00) [12]

Чувак, замени лэйблы на tdbtext


Ega23   (2008-07-07 16:03:00) [13]


> Так не законченые же, я вставлял - компилятор ругается.


Просто у вас проблемы с пониманием основ объектно-ориентированного программирования..  :)


Anatoly Podgoretsky   (2008-07-07 15:53:00) [14]


> А ты вообще программировал ранее? Тебе уже 2 варианта предложили.

Так не законченые же, я вставлял - компилятор ругается.


Правильный^Вася   (2008-07-07 15:53:00) [15]


> Dataset.AfterScroll
> kirillrepin ©   (07.07.08 15:20) [2]
> извините не совсем понял ответ?

в обработчике события присваиваешь своим наклейкам содержимое ячеек


Ega23   (2008-07-07 15:47:00) [16]


> Dataset.AfterScroll


В данной ситуации я бы на TDataSource.OndataChange закладывался бы.


Sergey13   (2008-07-07 15:45:00) [17]

> [4] kirillrepin ©   (07.07.08 15:38)

А ты вообще программировал ранее? Тебе уже 2 варианта предложили.


kirillrepin   (2008-07-07 15:38:00) [18]

а как возможно реализовать так как поставлена задача?


Поросенок Винни-Пух   (2008-07-07 15:22:00) [19]

TDBText вместо TLabel


kirillrepin   (2008-07-07 15:20:00) [20]

извините не совсем понял ответ?


Страницы:   1 2

Наверх

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