Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Прямой доступ к ячейкам TDBGid   Найти похожие ветки 

 
Karbo_1 ©   (2006-10-18 13:10) [0]

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


 
Sergey13 ©   (2006-10-18 13:16) [1]

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


 
Desdechado ©   (2006-10-18 13:16) [2]

DBGrid (в отличие от StringGrid) не хранит данные, а только показывает их.
Поэтому обращаться нужно к датасету (позиционировавшись на нужную строку и выбрав нужное поле данных).


 
MsGuns ©   (2006-10-18 13:32) [3]

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


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

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


 
MsGuns ©   (2006-10-18 13:38) [5]

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


 
Karbo_1 ©   (2006-10-18 13:42) [6]

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


 
MsGuns ©   (2006-10-18 13:52) [7]

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

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

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


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

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


 
MsGuns ©   (2006-10-18 14:14) [9]

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


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

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


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


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

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

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


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


> А что, у 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, что бы добавить новый уровень синхронизации. А в этом, действительно, нет ни какой необходимости.


 
Leonid Troyanovsky ©   (2006-10-19 18:33) [13]


> 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-20 03:06) [14]


> Посмотрел. Всё 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


 
Loginov Dmitry ©   (2006-10-20 07:54) [15]

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


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

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

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


 
ЮЮ ©   (2006-10-20 08:28) [16]


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


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


 
MsGuns ©   (2006-10-20 10:51) [17]

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

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


 
Loginov Dmitry ©   (2006-10-20 13:05) [18]

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


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


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

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

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


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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.05 c
2-1161589778
попович
2006-10-23 11:49
2006.11.05
Как перевести String в double?


1-1159230544
Lex_!
2006-09-26 04:29
2006.11.05
Расчет по формуле из БД


15-1160980134
IMHO
2006-10-16 10:28
2006.11.05
Какой ценой строились египетские пирамиды?


15-1160733102
Elen
2006-10-13 13:51
2006.11.05
Математический Вопрос


8-1143964344
MeF Dei Corvi
2006-04-02 11:52
2006.11.05
VST + Delphi