如何让DBGRID以不同的颜色显示不同的记录?

qly_1314 2003-08-21 08:12:31
如何让DBGRID以不同的颜色显示不同的记录?
...全文
241 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
IORILI 2003-08-21
  • 打赏
  • 举报
回复
在Delphi中随意控制DBGrid 每一行的颜色 :
在Delphi中使用DBGrid时,如何让DBGrid中每一行颜色按照用户自己的意愿控制。
1、 数据表的建立
在Delphi的工具菜单中选择Database desktop,在数据库DBDemos下建立一个名为example.db的数据表。数据表的字段和内容如下:
Name Age Wage
张山 25 500
王武 57 1060
李市 30 520
刘牛 28 390
 2、创建基于TDBGrid的TColoredDBGrid组件
在Delphi组件菜单中,选择New Component,在弹出对话框中作以下设置:
Ancestor Type = TDBGrid
Class Name = TColoredDBGrid
 然后单击OK按钮,Delphi自动完成组件基本框架的定义。增添OnDRawColoredDBGrid事件并使它出现在Object Inspector的Events中以便在应用程序中设定改变行颜色的条件。重载DrawCell方法,只能自己绘制单元格。不能通过在OnDrawColumnCell来设置颜色,因为在OnDrawColumnCell改变单元格的颜色会再次触发OnDrawColumnCell。
3、建立应用程序进行验证。
在Delphi文件菜单中选择New建立新的应用程序工程Project1和主窗体Form1,设置Form1的Caption属性为“控制DBGrid行颜色的示例”。在主窗体上添加Data Source、Table、Button和ColoredDBGrid组件。设置各组件的属性如下:
Table1.Database=’DBDemos’
Table1.Tablename=’example.db’
Datasource1.Dataset=Table1
ColoredDBGrid1.Datasource=DataSource1
Button1.Caption=’退出’
 在ColoredDBGrid1的onDRawColoredDBGrid事件中输入下列代码,设定由Wage(工资)来决定在ColoredDBGrid1各行的颜色。
procedure TForm1.ColoredDBGrid1 DRawColoredDBGrid
(Sender: TObject; Field: TField; var Color:
TColor; var Font: TFont);
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin
//程序将根据wage值设置各行的颜色。
Color := clGreen;Font.Style := [fsItalic];
//不仅可以改变颜色,还可以改变字体
end;
if(p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];end;end;
//用‘退出’按钮结束程序运行。
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;end;
 4、程序运行结果
本程序在win98(中文版)和delphi4.0(C/S版)中测试运行,得到预计的结果:第一行和第三行变为红色,第二行变为棕色,第四行为绿色,满足了基本要求
cobi 2003-08-21
  • 打赏
  • 举报
回复
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field.AsInteger < 75 then begin
DBGrid1.Canvas.Font.Color := clWhite;
DBGrid1.Canvas.Brush.Color := clRed; //这里设置单元格填充色
DBGrid1.Canvas.FillRect(Rect); //这里对相应的单元格进行北景色填充
end;
//输出内容
DBGrid1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, Column.Field.AsString);
end;
huojiehai 2003-08-21
  • 打赏
  • 举报
回复
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);

begin
if Table1.FieldByName('Size').AsFloat > 10 then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.Canvas.brush.color := clBlue;
end;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
qly_1314 2003-08-21
  • 打赏
  • 举报
回复
cobi(我是小新)

怎样重画DBGRID的单元格,说清楚点好吗?
cobi 2003-08-21
  • 打赏
  • 举报
回复
自己根据需要重画dbgrid的单元格就可以了

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧