如何DBGRID每行加入不同颜色(100分)

  • 主题发起人 主题发起人 yj3385
  • 开始时间 开始时间
Y

yj3385

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:第一行背景为白色,第二行背景为黄色;
你将是我的救命恩人!!
 
//这是Ehlib中的DBGridEh的代码,修改一下就OK了
procedure TDBMDIChildForm.DBGDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
//画斑马线
begin
inherited;
with TDBGridEh(Sender) do
begin
if not Assigned(DataSource) or
not DataSource.DataSet.Active then exit;
if gdSelected in State then
begin
Canvas.Brush.Color := clNavy;
Canvas.Font.Color := clWhite;
end else
if DataSource.DataSet.RecNo mod 2=0 then
Canvas.Brush.Color:= clInfoBk;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
 
DBGRID好像无法实现。:)我是没做过,就算真的行,恐怕也不简单啊。
不划算!
如果你真的要实现,可以用TrueDBGRID,可以很容易地实现
 
下面是我自己写的一个通用的过程,在DBGrid的DrawColumnCell调用就是了,或者可以把
代码整合到DrawColumnCell事件中去。其实这个过程本来就是DrawColumnCell事件。
颜色自己替换里面的代码。
procedure prcDBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected in State then
TDBGrid(Sender).Canvas.Brush.Color := $00949200
else begin
if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) <> 0 then
TDBGrid(Sender).Canvas.Brush.Color := $00FDF2DF
else
TDBGrid(Sender).Canvas.Brush.Color := clwhite;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
我還是推薦使用Delphi自帶的DBGrid控件,如使用第三方控件其它的不說單就速度問題就
很難得到保証,以前我在做的系統中為了簡便GRID全部使用了第三方的,現系統運行了近
一年,數據量猛增,速度就慢下來了,隻好重寫代碼
詳細控制DBGrid的每一行顏色請參看CSDN上的:
http://expert.csdn.net/Expert/topic/1152/1152567.xml?temp=.1172296
 
后退
顶部