如何使Dbgrid中奇数行与偶数行显示不同颜色(100分)

  • 主题发起人 主题发起人 boyjason
  • 开始时间 开始时间
B

boyjason

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使Dbgrid中奇数行与偶数行显示不同颜色
即第一行,蓝色
第二行,红色
第三行,蓝色
....
像财智软件中的表格一样,最好不使用第三方控件。
我看了一下财智用的是Tdbgrid,且好像是在OnDrawColumnCell事件中完成的。
请给中详细代码,谢谢
 
给你一段代码吧。。
procedure TFrmCashBank.DBGBANKDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
DBGBANK.Canvas.Pen.Mode:=pmmask;
with DBGBANK do
begin
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
begin
Canvas.Font.Color :=ClYellow;
Canvas.Brush.Color :=ClNavy;
end
else
begin
if datamoduleerp.ADOQBank.RecNo mod 2<>0 then {判断当前数据是奇数还是偶数行}
Canvas.brush.Color :=ClWhite {如果是奇数行,DBGrid背景以白色显示}
else
Canvas.brush.Color :=$00EAEAEA; {如果是偶数行,DBGrid背景以浅灰色显示}
end;
DBGBANK.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
 
楼上的方法有问题 楼上是用 dataset 的recno 判断的有问题

给你源代码.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
save_color:tcolor;
rows_hight,rows_no:integer;

begin
rows_hight:=rect.bottom-rect.Top;
rows_no:=rect.top-dbgrid1.Top+rows_hight;
if ((rows_no div rows_hight) mod 2) =1 then
column.Color:=clblue
else
column.color:=clyellow

end;
 
to:cbdiy
我曾试过RecNo,但RecNo的值总为-1
 
为什么不用InfoPower3000的DBGrid组件呢?现成的吧
 
以前的帖子有很多。
查查吧。。
 
procedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if query1.FieldByName(’all’).asstring>40’ then
begin
dbgrid1.Canvas.Font.Color:=clred;
dbgrid1.Canvas.Brush.color:=clyellow;
end
else
begin
dbgrid1.Canvas.Font.Color:=clblue;
dbgrid1.Canvas.Brush.color:=clyellow;
end;

dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
可以任意控制DBGrid的某一行
 
我已经实现了!感谢chshanghai和cbdiy给我的灵感!以下是源码:
procedure TFrmRcv.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
rows_hight,rows_no:integer;
begin
rows_hight:=rect.bottom-rect.Top;
rows_no:=rect.bottom;
with dbgrid do
begin
if ((rows_no div rows_hight) mod 2) =1 then
begin
Canvas.brush.Color :=ClBlue;
canvas.Font.Color:=clblack;
end
else
begin
Canvas.brush.Color :=Clred;
canvas.Font.Color:=clblack;
end;
if gdSelected in State then
begin
Canvas.Brush.Color := clNavy;
Canvas.Font.Color := clWhite;
end;
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
 
多人接受答案了。
 
后退
顶部