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

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

Получить значение поля предидущей записи в 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);


Наверх

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