请问怎样在DBgridEh中根据某字段的值轮换改变行的颜色?(50分)

  • 主题发起人 主题发起人 DF7C3
  • 开始时间 开始时间
D

DF7C3

Unregistered / Unconfirmed
GUEST, unregistred user!
首先,我要说明,我 不是不是不是不是不是不是不是 要根据奇偶行轮换改变颜色!
这样一个表,有两个字段,班级和学生,
班级 学生
甲班 学生A
甲班 学生B
甲班 学生C
乙班 学生D
乙班 学生E
丙班 学生F
丙班 学生G
丙班 学生H
我想在DBgridEh中显示的时候,甲班的行颜色用白色,到了乙班就变成蓝色,
到了丙班又变回白色,以此类推,反正就是仅使用两种轮换,请问如何实现,谢谢!
 
你需要用到DBgridEh的DrawColumnCell事件
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
begin

if Column.Field.AsString ='甲班' then

begin

with DBGrid1do

begin

Canvas.Font.Color := clwhite;
DefaultDrawColumnCell(Rect,Datacol,Column,state);
end;

end;

end;
 
procedure TfrmBasGenDataFrm.grdDataListDrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumnEh;
State: TGridDrawState);
begin
inherited;
if (grdDataList.DataSource<>nil) and (grdDataList.DataSource.DataSet<>nil)
and (grdDataList.DataSource.DataSet.Active)
and (grdDataList.DataSource.DataSet.RecordCount>0)
and (grdDataList.DataSource.DataSet.FindField(DocState_Fld)<>nil)
and (grdDataList.DataSource.DataSet.FindField(DocState_Fld).AsInteger<=DocState0)
then
begin
TDBGridEh(Sender).Canvas.Font.Color:=clRed;
end;
TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
 
编程 炒股 两不误 请上 WWW.000002.CN
 
var n,m:integer;
begin
///<=报警值红色显示
if column.FieldName='amount' then
//字段名amount
begin
n:=dbgrideh1.datasource.dataset.FieldByName('call').AsInteger;//报警值
m:=dbgrideh1.datasource.dataset.FieldByName('amount').AsInteger;//实际值
if m<=n then
//小于等于报警值时
AFont.Color:=clRed//字体颜色变为红色显示
else
AFont.Color:=clBlue;
end;
 
用OnDrawColumnCell事件。
 
重绘即可
 
全新功能的Excel式表格
http://www.anylib.com
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
begin

if classstr <> Column.Field.AsString then
begin
with DBGrid1do

begin

Canvas.Font.Color := clwhite;
DefaultDrawColumnCell(Rect,Datacol,Column,state);
end;

classstr :=Column.Field.AsString ;
end;
end;

把classstr设为常量
const classtr='甲班';
这样,不同于上一个的班级就改变颜色.
 
这个和以前有过问题相似,可以自己查一下。等我看看能不能找到。
 
procedure Tcgsh_f.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumnEh;
State: TGridDrawState);
begin
if (Column.FieldName='班级')and(qry_dj.FieldByName('班级').AsString='甲班')
then
DBGridEh1.Canvas.Font.Color:=clFuchsia;
if (Column.FieldName='班级')and(qry_dj.FieldByName('班级').AsString='乙班') then
DBGridEh1.Canvas.Font.Color:=clBlue;
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
请勿硬编码!这根本不是一个负责任的解决问题的办法!
因为数据集里每次返回的记录不一样,也许有甲班,也许没有,
班级的名字和数量都是未知的,
这种类似FieldByName('班级').AsString='甲班' 的方法其实毫无意义!
我的目的并不是要特定的班级用特定的颜色来显示,
我要实现的效果是班级颜色的轮换!
谢谢!
 
来晚了!!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
759
import
I
I
回复
0
查看
631
import
I
后退
顶部