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

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

Прямой доступ к ячейкам TDBGid [D6]


Страницы:   1 2

Karbo_1 ©   (2006-10-18 13:10:00) 

Возможен ли прямой доступ к произвольным ячейкам TDBGrid - аналогичный TStringGrid.Cells ?


Игорь Шевченко   (2006-10-20 16:52:00) [1]

Loginov Dmitry ©   (20.10.06 15:33) [20]

Каким образом указанное в [15] поможет автору в решении его проблемы ?


Loginov Dmitry   (2006-10-20 15:33:00) [2]

Нормальный поток создания. При использовании TClientDataSet осуществить предложенное в [15] очень даже просто :)


Игорь Шевченко   (2006-10-20 13:16:00) [3]

Loginov Dmitry ©   (20.10.06 13:05) [18]

А нафига другим геморрой советовать ? Это не та конференция, куда стоит выкладывать неотформатированный поток сознания.


Loginov Dmitry   (2006-10-20 13:05:00) [4]

> Попробуй сначала сам, а потом советуй.


А нафиг мне такой геморрой?


MsGuns   (2006-10-20 10:51:00) [5]

>Loginov Dmitry ©   (20.10.06 07:54) [15]
>Заведи отдельный ДатаСет. При наведении мышкой на ячейке грида делай

Попробуй сначала сам, а потом советуй.


ЮЮ   (2006-10-20 08:28:00) [6]


Loginov Dmitry ©   (20.10.06 07:54) [15]
> DBGrid не содержит данных, но ты можешь использовать номер
> строки.
> Заведи отдельный ДатаСет.


Однако он содержит DataLink, обеспечивающий доступ к записям, отображаемым в гриде. См.[14]


Loginov Dmitry   (2006-10-20 07:54:00) [7]

Karbo_1 ©   (18.10.06 13:42) [6]
Мне нужно в обработке события OnMouseMove получить значение ячейки DBGrid, в данный момент находящейся под курсором мыши.


DBGrid не содержит данных, но ты можешь использовать номер строки.
Заведи отдельный ДатаСет. При наведении мышкой на ячейке грида делай

ДатаСет.НомерЗаписи := ДБГрид.НомерСтроки {-1}

Но в таком случае появляется проблема синхронизации ДатаСетов (нужно обеспечить, чтобы оба ДатаСета хранили одни и теже данные).


ЮЮ   (2006-10-20 03:06:00) [8]


> Посмотрел. Всё y, что нужно, оказалось в  private :-(


Странным местом ты это смотрел:

     DrawColumn := Columns[ACol];
     Value := '';
     OldActive := FDataLink.ActiveRecord;
     try
       FDataLink.ActiveRecord := ARow;
       if Assigned(DrawColumn.Field) then
          Value := DrawColumn.Field.DisplayText;
     finally
       FDataLink.ActiveRecord := OldActive;
     end;


FDataLink - есть protected св-во DataLink


Leonid Troyanovsky   (2006-10-19 18:33:00) [9]


> Karbo_1 ©   (18.10.06 14:05) [8]

> Да, чтобы их светить , хинты эти.


http://www.google.com/search?q=cache:xdqWGiiFLgMJ:www.delphimaster.ru/cgi-bin/forum.pl%3Fn%3D0%26id%3D1142283322+lvt+datalink+delphi

--
Regards, LVT.


Наиль   (2006-10-19 17:45:00) [10]


> А что, у Borland есть реальные причины НЕ создать для TDBGrid
> свойство TDBGrid.Cell [ACol,ARow : integer]:TField ?

Ещё какие! DBGrid изначально - средство отображения.
Представь себе, что в DBGrid действительно появился TField. Естественно, нашлись бы желающие, изменять значения этих полей. Теперь есть, три варианта:
1. Игнорировать изменения. Для этого в TField должна быть заложена дополнительная функциональнасть которая позволяла бы игнорировать данные в зависимости от родителя TField.
2. Производить изменения только в Grid'e. Но это же, полное нарушение логики. Grid обязан быть синхронизирован с БД, иначе небвло бы в нём необходимости. Для таких задач есть StringGrid.
3. Передавать данные из Grid'a в БД. Представляешь себе цепочку DBGrid->DataSource->DataSet->DLL->БД. Это потребовало бы не мало труда от программистов Borland, что бы добавить новый уровень синхронизации. А в этом, действительно, нет ни какой необходимости.


Karbo_1   (2006-10-19 16:37:00) [11]


> Cм. исходник TDBGrid DrawCell

Посмотрел. Всё y, что нужно, оказалось в   private:-(

А что, у Borland есть реальные причины НЕ создать для TDBGrid свойство TDBGrid.Cell [ACol,ARow : integer]:TField?


ЮЮ   (2006-10-19 08:18:00) [12]

Cм. исходник TDBGrid DrawCell - как грид рисует все строки на экране, не "дергая" DataSet


MsGuns   (2006-10-18 14:14:00) [13]

Тогда см.7
Я подобную проблему решал отображением содержимого "ячейки" в статусной строке под гридом (как в 1С)


Karbo_1   (2006-10-18 14:05:00) [14]

Да, чтобы их светить , хинты эти.


MsGuns   (2006-10-18 13:52:00) [15]

>Karbo_1 ©   (18.10.06 13:42) [6]
>Мне нужно в обработке события OnMouseMove получить значение ячейки DBGrid, в данный момент находящейся под курсором мыши.

TCustomGrid.
В обработчике OnMouseMove вычисляете "ячейку" грида, через нее строку грида относительно верха (все это "через" TCustomGrid), далее получаете ссылку на данные записи НД в буфере..

Это чтобы хинты светить на содержимое текущей "ячейки" ?


Karbo_1   (2006-10-18 13:42:00) [16]

Мне нужно в обработке события OnMouseMove получить значение ячейки DBGrid, в данный момент находящейся под курсором мыши.


MsGuns   (2006-10-18 13:38:00) [17]

Вы определитесь, ЧТО Вам нужно: работать с набором данных (записи-поля) или с тем, что в текущий момент отображено в гриде.
Или внятно опишите свою проблему


Karbo_1   (2006-10-18 13:36:00) [18]

А в TDataSet прямой доступ возможен? Или только через перебор с самого начала через first..next?


MsGuns   (2006-10-18 13:32:00) [19]

Возможен. Смотри свойства его дедушки TCustomGrid


Sergey13   (2006-10-18 13:16:00) [20]

А смысл? К датасету стучись.


Страницы:   1 2

Наверх

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