如何在delphi的DBgrid中实现不同为不同颜色(50分)

  • 主题发起人 主题发起人 sunny_ren
  • 开始时间 开始时间
S

sunny_ren

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在delphi的DBgrid中实现以下功能:
DBGRID绑定一数据表,然后用DBGRID中的一列的值为条件进行判断,不同的值给该
行以不同的颜色,比如
按第一列判断,第一行第一列为 101 ,第一行(整个行)的颜色为黄色;
第二行第一列为 101 ,第一行(整个行)的颜色为黄色;
第三行第一列为 107 ,第三行(整个行)的颜色为白色;
第四行第一列为 107 ,第四行(整个行)的颜色为白色;
第五行第一列为 205 ,第五行(整个行)的颜色为绿(黄)色;
第六行第一列为 205 ,第六行(整个行)的颜色为绿(黄)色;
也就是用第一列的值对GRID进行分组(类),每几行,是一组,为相同颜色。
 
定义一个全局变量:
LastColor:TColor;

DBGrid的DefaultDrawing设为false

procedure TMainForm.MailListDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if gdSelected in State then LastColor := ClBlue
else if DataCol = 0 then
begin
if Column.Field.AsInteger = 101 then LastColor := clYellow
else if Column.Field.AsInteger = 107 then LastColor := clWhite
else LastColor := clGreen;
end;

MailList.Canvas.Brush.Color := LastColor;

MailList.canvas.textrect(rect, rect.left + 2, rect.top + 2, Column.Field.AsString);
end;

 
哇,没抢到!
 
可将 DefaultDrawing 属性设为:False,然后自己为 TDBGrid 部件
的 OnDrawDataCell 事件编写相应的程序用于绘制各网格单元和其中的
数据。
 
好象我没说清,判断条件是随机的,实际上我想做成按第一列索引后,然后分组,再是不同组,颜色黄白相间,比如:第一组(1,2,3行)黄色,第二组(4,5行)白色第三组(6,7,8,9,10行)黄色。
第一行第一列为 101 ,第一行(整个行)的颜色为黄色;
第二行第一列为 101 ,第一行(整个行)的颜色为黄色;
第三行第一列为 107 ,第三行(整个行)的颜色为白色;
第四行第一列为 107 ,第四行(整个行)的颜色为白色;
第五行第一列为 205 ,第五行(整个行)的颜色为黄色;
第六行第一列为 205 ,第六行(整个行)的颜色为黄色;
....第一列 ..., .....................黄(白)色。
.... .....
... .....
也就是用第一列的值对GRID进行分组(类),每几行,是一组,为相同颜色。
 
呵呵,你在纪录一个LastID不就可以了?

//定义一个全局变量:
LastColor:TColor;
LastID:integer;

DBGrid的DefaultDrawing设为false

procedure TMainForm.MailListDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if gdSelected in State then LastColor := ClBlue
else if DataCol = 0 then
begin
if Column.Field.AsInteger <> LastID then
begin
LastID := Column.Field.AsInteger;
if LastColor = clYellow then LastColor := clWhite
else if LastColor = clWhite then LastColor := clGreen
else LastColor = clYellow;
end;
end;

MailList.Canvas.Brush.Color := LastColor;

MailList.canvas.textrect(rect, rect.left + 2, rect.top + 2, Column.Field.AsString);
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
748
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部