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