Delphi初学者有这样一个关于DBGrid中Field的显示问题(50分)

  • 主题发起人 主题发起人 janestory
  • 开始时间 开始时间
J

janestory

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]我在DbGrid里面显示一系列的数据,其中我想让符合一定规则(例如大于一定数值)
Field颜色显示跟别的Field不一样,请问我该如何做?我是不是应该调用Color属性?
但我看了一下帮助,Field好像没有Color属性的,不知道我有没有看错。
谢谢!
 
我也想知道
 
procedure TReceiptGoodsForm.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
var
TempI: Integer;
begin
TempI:=DM.YourTable.YourFields[0].AsInteger;
if TempI>0 then
DBGrid1.Canvas.Brush.Color:=clRed
else
if TempI<0 then
DBGrid1.Canvas.Brush.Color:=clGreen;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Table1.FieldByName('size').AsInteger >=40 then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if (Table1.FieldByName('size').AsInteger >=30) and (Table1.FieldByName('size').AsInteger<40) then
begin
DBGrid1.Canvas.Font.Color := clBlue;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if (Table1.FieldByName('size').AsInteger >=20) and (Table1.FieldByName('size').AsInteger<30) then
begin
DBGrid1.Canvas.Font.Color := clYellow;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if (Table1.FieldByName('size').AsInteger >=10) and (Table1.FieldByName('size').AsInteger<20) then
begin
DBGrid1.Canvas.Font.Color := clLime;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
 
调用DrawCell方法~
 
同意dongberlin
 
同意dongberlin的方法,我用過這種方法,你也去試試看!
 
我试了dongberlin的方法,但没有效果,查过帮助“OnDrawDataCell
(obsolete) Occurs when application needs to draw individual cells if State
is csDefault.”
我用的是Delphi 6.0, DbGrid里面的Columns中并没有State的属性,我是不是找错地方呢?
还有,这种方法是不是我在Edit某一个Cell的时候,就应该能够根据条件将此Cell的颜色
改变?
最后,我用了白海森的方法,可以实现将整一行的数据颜色改变,但我只是需要改变某一格
的颜色。
 
关于DBGrid的颜色问题,请使用“颜色”做关键字查询旧贴,有很多都已经解决了你的问题,
多看看以前的讨论,相信会有收获的。
 
参考别人的程序,我已经试验成功,用的还是OnDBGridDrawColumnCell:

...
procedure TTestForm.TestDBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if DataCol = 3 then begin
if Testtable.FieldByName('cpcs1').AsInteger>=100 then begin
TestDBGrid.Canvas.Brush.Color := clRed;
TestDBGrid.Canvas.FillRect(Rect);
end;
end;
TestDBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
...

但我还是想知道OnDrawDataCell的实现方法,望告知。
 
多人接受答案了。
 
后退
顶部