![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить значение поля предидущей записи в DBGrid [D7, XP]
webpauk © (2009-12-21 15:37:00)Хочу раскрасить DBGrid в соответствии со значением поля IDObject
База отсортирована по полю IDObject
Как получить значение IDObject для предидущей строки?
текущую вроде бы можно получить черезTDBGrid(Sender).DataSource.DataSet.FieldByName('IDObject').AsInteger
Германн (2009-12-22 11:42:00) [1]
> webpauk © (22.12.09 11:17) [10]
Похожий бред я уже на форуме видел. :)
webpauk (2009-12-22 11:38:00) [2]
> zorik © (22.12.09 09:47) [8]
>
пошел через этот путь. работаеит!
webpauk (2009-12-22 11:37:00) [3]
> Медвежонок Пятачок © (22.12.09 11:22) [13]
>
точно! как я ни дагадалси!
а еще лучше, чтобы взрывался монитор и юзеру рвало голову нафиг!
Медвежонок Пятачок (2009-12-22 11:22:00) [4]блокируй клаву после первой отрисовки.
чтобы юзер не портил картину
webpauk (2009-12-22 11:21:00) [5]мля... работает тока при первой отрисовке... 8(
Медвежонок Пятачок (2009-12-22 11:20:00) [6]только никому больше не показывай.
webpauk (2009-12-22 11:17:00) [7]O!
const
cColorArr: array[Boolean] of TColor = (clYellow, clMoneyGreen);
type
TForm1 = class(TForm)
Grid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure Grid1GridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
private
fCurrentColor: Boolean;
fCurrentIDObject: Integer;
end;
...
procedure TCommon_Main.PanelGrid1GridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if TDBGrid(Sender).DataSource.DataSet.FieldByName('IDObject').AsInteger<>fCurrentID Object then
begin
fCurrentColor:=not fCurrentColor;
fCurrentIDObject:=TDBGrid(Sender).DataSource.DataSet.FieldByName('IDObject').AsI nteger;
end;
TDBGrid(Sender).Canvas.Brush.Color:=cColorArr[fCurrentColor];
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
zorik (2009-12-22 09:50:00) [8]
> кажем, нужно раскрасить все записи 2 цветами, причем все
> с одинаковым IDObject - одним цветом. Не зная предыдущего
> значения - не знаю каким цветом закрашивать...
Нужно ВСЕ записи с одинаковым IDObject или если записи с одинаковым IDObject идут ПОДРЯД.
Возможно отсортировано по IDObject?
zorik (2009-12-22 09:47:00) [9]Предварительно создать массив (список) типа record(idobject, color). Заполнить его отношениями какому id какой цвет отвечает. При закраске грида искать в массиве (списке) нужный цвет
Медвежонок Пятачок (2009-12-22 09:46:00) [10]причем все с одинаковым IDObject - одним цветом. Не зная предыдущего значения - не знаю каким цветом закрашивать...
какая жуть .....
а значение пред-предыдущего знать не надо? а его предшественника?
а остальных?
webpauk (2009-12-22 09:39:00) [11]
> Ega23 © (21.12.09 17:00) [5]
>
скажем, нужно раскрасить все записи 2 цветами, причем все с одинаковым IDObject - одним цветом. Не зная предыдущего значения - не знаю каким цветом закрашивать...
Ega23 (2009-12-21 17:00:00) [12]
> Хочу раскрасить DBGrid в соответствии со значением поля
> IDObject
Ну и нафига тебе тогда "предыдущее" значение? Есть текущее - в соответствии с ним и крась.
Германн (2009-12-21 16:45:00) [13]
> имеется в виду метод:
> procedure TForm.DBGridDrawColumnCell
Для такого рисования достаточно знать только текущую.
Sergey13 (2009-12-21 16:39:00) [14]> [0] webpauk © (21.12.09 15:37)
Поищи на королевстве статью "Полосатый грид".
Юрий Зотов (2009-12-21 16:35:00) [15]В DBGrid нет ни предыдущей, ни текущей, ни следующей записи. Они есть в DataSet'е. Получаются методами Prev и Next. Причем зависят от запроса и способа его сортировки.
webpauk (2009-12-21 15:39:00) [16]имеется в виду метод:
procedure TForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);