改变DBGrid中某一行的颜色的问题?(急!在线等!50分!)

zhangqihui 2003-09-04 04:26:20
我正在写一个小程序,用DBGrid显示SQLServer表中,现在有一个问题:如何在程序中改变DBGrid中某一行的颜色?请各位老大帮帮我!我这里谢谢先!
...全文
86 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨后阳光2000 2003-09-05
  • 打赏
  • 举报
回复
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DBGrid1.DataSource.DataSet.RecNo mod 2 = 0 then //条件判断
begin
with DBGrid1 do
begin
Canvas.Font.Color:=clRed;
Canvas.Brush.Color:=clYellow;
end;
end;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
sy_315 2003-09-05
  • 打赏
  • 举报
回复
实例:



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids,StdCtrls;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
Button1: TButton;
procedure DBGrid1Enter(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function get_dbg_edit_text(dbgrid :tdbgrid):TEdit;
var i:integer;
begin
result := nil;
if not assigned(dbgrid) then exit;
if not dbgrid.EditorMode then
begin
dbgrid.EditorMode:=true;
dbgrid.EditorMode:=false;
end;
with dbgrid do for i:=0 to pred(componentcount) do
if components[i] is Tcustomedit then
begin
result := tedit(components[i]);
break;
end;

end;

function get_dbg_edit(dbgrid : tdbgrid): string;
var
dbg_edit :TEdit;
begin
dbg_edit:=get_dbg_edit_text(dbgrid);
if assigned(dbg_edit) then
result := dbg_edit.text
else result:='';
end;

procedure TForm1.DBGrid1Enter(Sender: TObject);
{显示当前编辑框背景颜色}
var
dbg_edit : tedit;
begin
dbg_edit:=get_dbg_edit_text(tdbgrid(sender));
if assigned(dbg_edit) then dbg_edit.color:=clyellow;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
//DBGrid1DrawColumnCell事件。
//sex字段为女的,字体颜色为红色,其它的为蓝色:
if Adoquery1.FieldByName('age').Asstring = '18' then
DBGrid1.Canvas.Font.Color := clRed
else
DBGrid1.Canvas.Font.Color := clBlue;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

end.
xyue 2003-09-05
  • 打赏
  • 举报
回复
给个参考的例子吧

procedure TQueryRepForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
i :integer;
begin
if gdSelected in State then
Exit;

//定义表头的字体和背景颜色:
for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
begin
(Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; //字体
(Sender as TDBGrid).Columns[i].Title.Font.Size :=9; //字体大小
(Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; //字体颜色(红色)
(Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; //背景色(绿色)
end;

//隔行改变网格背景色:
if DM.cMyQry1.RecNo mod 2 = 0 then
(Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色
else
(Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色

//定义网格线的颜色:
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
with (Sender as TDBGrid).Canvas do //画 cell 的边框
begin
Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
MoveTo(Rect.Left, Rect.Bottom); //画笔定位
LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
Pen.Color := $0000ff00; //定义画笔颜色(绿色)
MoveTo(Rect.Right, Rect.Top); //画笔定位
LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线
end;
end;

Shiyl 2003-09-05
  • 打赏
  • 举报
回复
学习中。。。。
cainiao000 2003-09-05
  • 打赏
  • 举报
回复
实现单击DBGrid中的一行时,该行的颜色变成其它的颜色

type TMyGrid = class(TDBGrid);

// OnDrawColumnCell事件
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with DBGrid1 do
with Canvas do begin
if TMyGrid(DBGrid1).Row = MouseCoord(Rect.Left+1, Rect.Top+1).Y then
Canvas.Brush.Color := clRed;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;


zkw 2003-09-05
  • 打赏
  • 举报
回复
学习
Drate 2003-09-04
  • 打赏
  • 举报
回复
(*******************************************************************************
* 过程名:SetGridColor
* 过程说明: 用于设置数据库应用程序的DBGrid的数据显示时的颜色
* 可在TDBGrid的DrawColumnCell事件中进行设置,例如:
* SetGridColor(CompanyADTable,DBGrid1,Rect,DataCol,Column,State);

* 参数说明:
* AdoTable:数据库对象名称(可重载,可以使用ADOTABLE,ADOQUERY,TTABLE,TQUERY对象.全部从TDataSet中继承得来)
* DbGrid1:要显示的数据库TDBGRID对象
* Rect,DataCol,Column,State:这四个参数可全部从TDBGrid的DrawColumnCell事件中传递过来!
*******************************************************************************)
Procedure SetGridColor(Var AdoTable:TDataSet;Var DbGrid1:TDBGrid;const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState);
begin
Case AdoTable.RecNo mod 2 = 0 of // file://根据数据集的记录号进行判断
True: DbGrid1.Canvas.Brush.color:=clcream;// file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:= clwhite;// file://奇数行用蓝色表示
end;
If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
Case DataCol mod 2 = 0 of
True :
begin
DbGrid1.Canvas.Brush.color:=$00ffff; //file://当前选中行的偶数列用红色
dbgrid1.Canvas.Font.Color:=clred;
end;
False:
begin
DbGrid1.Canvas.Brush.color:=$00ffff;// file://当前选中行的奇数列用绿色表示
dbgrid1.Canvas.Font.Color:=clred;
end;
end;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
samcrm 2003-09-04
  • 打赏
  • 举报
回复
随意控制DBGrid 每一行的颜色:

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;
kevin218 2003-09-04
  • 打赏
  • 举报
回复
我以前写过这么个东西,但是代码找不到了。
大体上记的是这样的:
将它原来的grid调出来,然后修改保存成自己的东西就ok了
然后打包,引用就大功告成
tiexinliu 2003-09-04
  • 打赏
  • 举报
回复
procedure TCustomerRelationFrm.DBGrid2DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
oldcolor:tcolor;
oldpm:tpenmode;
p:integer;
begin
p:=length(self.ClientDataSet2.fields[0].asstring);
if p<=6 then {设定变色的行的条件}
begin
oldpm:= self.dbgrid2.Canvas.pen.mode;
oldcolor:= self.dbgrid2.Canvas.Brush.color;
//self.dbgrid2.Canvas.Brush.color:=clwhite;
//self.DBGrid2.Canvas.Pen.Color:=clred;
self.DBGrid2.Font.Color:=clred;
//self.dbgrid2.Canvas.pen.mode:=pmmask;
self.dbgrid2.DefaultDrawColumnCell(Rect,DataCol,Column,State);
self.dbgrid2.Canvas.Brush.color:=oldcolor;
self.dbgrid2.Canvas.pen.mode:=oldpm;
end else
begin
oldpm:= self.dbgrid2.Canvas.pen.mode;
oldcolor:= self.dbgrid2.Canvas.Brush.color;
//self.dbgrid2.Canvas.Brush.color:=clyellow;
self.DBGrid2.Font.Color:=clblue;
//self.DBGrid2.Canvas.Pen.Color:=clblue;
//self.dbgrid2.Canvas.pen.mode:=pmmask;
self.dbgrid2.DefaultDrawColumnCell(Rect,DataCol,Column,State);
self.dbgrid2.Canvas.Brush.color:=oldcolor;
self.dbgrid2.Canvas.pen.mode:=oldpm;
end;

end;

2,496

社区成员

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

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