dbgrid 中颜色动态设置 ( 积分: 100 )

  • 主题发起人 主题发起人 三秦游子
  • 开始时间 开始时间

三秦游子

Unregistered / Unconfirmed
GUEST, unregistred user!
各位专家,请问dbgrid中如何动态设置数据行的颜色或单元格的颜色。
如:一个单位的出差费,由于级别不同每个人都有一个上限,我要在一个dbgrid中,
显示出差人员的费用使用情况,如果费用超标,则用红色显示。
工程师:1200,助理工程师:800,普通员工:600
员工 员工级别 出差费用
1号 工程师 1000
2号 助理工程师 [red]1000[/red]
3号 普通员工 480
助理工程师超标,则显示红色。
 
各位专家,请问dbgrid中如何动态设置数据行的颜色或单元格的颜色。
如:一个单位的出差费,由于级别不同每个人都有一个上限,我要在一个dbgrid中,
显示出差人员的费用使用情况,如果费用超标,则用红色显示。
工程师:1200,助理工程师:800,普通员工:600
员工 员工级别 出差费用
1号 工程师 1000
2号 助理工程师 [red]1000[/red]
3号 普通员工 480
助理工程师超标,则显示红色。
 
兄弟,下面是一些技巧,供你参考。
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
var i: integer;
begin
{ if dbgrid1.DataSource.DataSet.RecNo mod 2 = 0 then
begin
with dbgrid1do
begin
canvas.Font.Color:=clred;
canvas.Brush.Color:=$F0900000;
end;
end;
for i := 0 to (Sender as TDBGrid).Columns.Count - 1do
begin
(Sender as TDBGrid).Columns.Title.Font.Name := '§ºÊ^';
//¦rÊ^
(Sender as TDBGrid).Columns.Title.Font.Size := 9;
//¦rÊ^¤j¤p
(Sender as TDBGrid).Columns.Title.Font.Color := $000000FF;
//¦rÊ^?¦â(?¦â)
(Sender as TDBGrid).Columns.Title.Color := $0000FF00;
//­I´º¦â(?¦â)
end;

dbgrid1.DefaultDrawColumnCell(rect, datacol, column, state);
with (Sender as TDBGrid).Canvasdo
//? cell ªº?®Ø
begin
Pen.Color := $00FF0000;
//©w????¦â(?¦â)
MoveTo(Rect.Left, Rect.Bottom);
//??©w¦ì
LineTo(Rect.Right, Rect.Bottom);
//??¦âªº??
Pen.Color := $0000FF00;
//©w????¦â(?¦â)
MoveTo(Rect.Right, Rect.Top);
//??©w¦ì
LineTo(Rect.Right, Rect.Bottom);
//??¦âªº??
end;
case DataCol mod 2 = 0 of
True: DbGrid1.Canvas.Brush.Color := clBlue;
//file: //°¸?¦C¥Î?¦â
False: DbGrid1.Canvas.Brush.Color := clAqua;
// file: //©_?¦C¥Î??¦â
end;
}
{ if (State = [gdSelected]) or (State = [gdFocused]) then
if not DbGrid1.SelectedRows.CurrentRowSelected then
DbGrid1.Canvas.Brush.Color := clRed;
// file: //?«e?¤¤?¤¸®æ?¥Ü?¦â
DbGrid1.Canvas.Pen.Mode := pmMask;
}
with dbgrid1.Canvasdo
begin
if copy(ADOQuery1.fieldbyname('serial_number').AsString,1,1)='1' then
brush.Color:=clred
else
brush.Color:=clgreen;
fillrect(rect);
textout(rect.Left+2,rect.Top,trim(column.Field.Text));
end;
//DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;
 
论坛上有个dbgrid全书,那里很全,你可以在笔记列表 中找一下,那里有,
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
begin
if (Column.Field.FieldName = '出差费用') then
with 你的表名(如:MyADOTable1)do

if (FieldByName('员工级别') = '助理工程师') and (FieldByName('出差费用').AsInteger >= 1000) then
DBGrid1.Canvas.Font.Color := clRed;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
//设置DBGrid行的颜色
procedure SetDbGridRolColor(ADBGrid: TDBGrid;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
var
i: Integer;
begin
with ADBGriddo
begin
//去除DBGrid的选中后蓝条内字符的反白问题
Canvas.brush.color := Color;
Canvas.FillRect(rect);
Canvas.font.color := $000000;
for i := 0 to ADBGrid.Columns.Count - 1do
begin
ADBGrid.Columns.Items.Title.Alignment := taCenter;
if ADBGrid.Columns.Items.Alignment = taRightJustify then
begin
ADBGrid.Columns.Items.Alignment := taLeftJustify;
end;
Canvas.TextOut(rect.left + 2, rect.top + 2, column.Field.AsString);
end;

//设置DBGrid不同显示行的颜色
if (DataSource.DataSet.recno mod 2) = 1 then
//条件
begin
Canvas.Brush.Color:= $00E7E1EC;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;

end;

函数的使用: SetDbGridRolColor(DBGrid1, Rect, DataCol, Column, State);
 
DBGrid1DrawColumnCell 不能使用循环,在别的过程或事件中能不能改变grid的单元格颜色?
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部