Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизПрямой доступ к ячейкам 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 3.513 c