控制dbgrid行的颜色(50分)

齐妙

Unregistered / Unconfirmed
GUEST, unregistred user!
dbgrid字段 :
id,node,descr,unit:string
我通过dbgrid选择一行数据处理后,怎样用颜色标记已经处理的行?撤销处理后,
怎样再恢复颜色?
DBGrid1DrawColumnCell不太会用!!
 
在数据集的onpost事件中调用DBGrid1DrawColumnCell
 
给你我的程序例子,自己研究

procedure TAbnormalRptFrm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var HoldColor:Tcolor;
S,S1,S2:string;
begin
S:=trim(AQempcType.value);
S1:=trim(Copy(S,1,Pos('-',S)-1));
S2:=trim(Copy(S,Pos('>',trim(S))+1,length(s)-Pos('>',trim(s))));
HoldColor:=DBGrid1.Canvas.Brush.Color ;

if AQempOuttime.IsNull then
DBGrid1.Canvas.Brush.Color :=clGreen;
if AQempIntime.IsNull then
DBGrid1.Canvas.Brush.Color := clTeal;
if (AQempRoadTime.Value >=spinEdit2.value ) and (s1<>s2) then
DBgrid1.Canvas.Brush.Color :=clRed;
if s1=s2 then
DBgrid1.Canvas.Brush.Color :=clOlive;

if uppercase(column.FieldName) ='ROADTIME' then
begin
if column.Field.Value >=spinEdit2.value then
if (s1<>s2) or ((s1=s2) and (s1<>trim(AQempPlace.Value)) ) then
DBgrid1.Canvas.Brush.Color :=clRed;
end;
if uppercase(column.FieldName) ='CTYPE' then
begin
if s1=s2 then
DBgrid1.Canvas.Brush.Color :=clOlive;
end;
if uppercase(column.FieldName) ='INTIME' then
begin
if column.Field.IsNull then
DBgrid1.Canvas.Brush.Color := clTeal;
end;
if uppercase(column.FieldName) ='OUTTIME' then
begin
if column.Field.IsNull then
DBgrid1.Canvas.Brush.Color := clGreen;
end;

DBGrid1.DefaultDrawColumnCell(Rect,Datacol,column,state);
DBgrid1.Canvas.Brush.Color :=HoldColor;
end;

 
很简单,在ondrawcolumncell事件中procedure Tdyform.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin

if gdSelected in state then
DBGrideh1.Canvas.font.Color := clred;
dbgrideh1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
 
我不是通过dbgrid行数据的值满足什么条件来判断的,简单一点
 
to xeen:
这样只能控制被选行的颜色,选择行变化后,原来的颜色有恢复了.
 
是不是这个问题太简单了,还是我没说清楚?帮帮我,各位大哥.
 
要是这样的话,我想加一个字段能行。用它的值来表示记录的状态(已经处理,撤销处理)
然后在DBGrid1DrawColumnCell事件里判断这个字段的值就行了
 
加字段是可以呀,不加不行吗?
 
不加也行,用一个动态数组来存状态也行。但是我总感觉到很麻烦。
 
我也是这样想的,只是不知怎么实现,因为我做的是ActiveXform,通过浏览器访问,用
动态数组时总出错。
 
dxDBGrid好像完成了这个功能!
 
To jackl:
能否详细点,我是初学的。
 
我也顺带问一下,好像这个方法是改变表格的颜色,我想只改变里面的字的颜色,不知道怎么搞
 
search! 我如果碰到问题先查寻一下,再提问,省事又节约!
 
多人接受答案了。
 
顶部