首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么实现dbgrid动态绘色功能,各位大侠请拍砖扔玉

2012-06-12 
如何实现dbgrid动态绘色功能,各位大侠请拍砖扔玉dbgrid打开行选选项,然后我想实现的功能是:当三角标记停留

如何实现dbgrid动态绘色功能,各位大侠请拍砖扔玉
dbgrid打开行选选项,然后我想实现的功能是:当三角标记停留在某一行记录,按下回车,这一行变成红色,移开三角标记这一行还是红色,这该如何实现呢?我刚学delphi,请大家指导一下,谢谢。

[解决办法]
1、在数据库中做个标记,然后根据此此字段值去绘制颜色。
2、在DBGridr的DrawColumnCell事件中,加入以下代码 
var s:string;
begin
with TMyCustomDBGrid(Sender) do
begin
s:=DataLink.Fields[3].AsString;
if S=''
then begin
DBGrid1.Canvas.Font.Color:=clBlack;
DBGrid1.Canvas.pen.mode:=pmmask;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
else begin
DBGrid1.Canvas.Font.Color:=clblue;
DBGrid1.Canvas.pen.mode:=pmmask;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;

[解决办法]
先定位,再著色。。。

Delphi(Pascal) code
procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)beginif (tab.fieldbyname(zdm).asstring=zdz)thenbegindbg.canvas.font.color:=clred;dbg.canvas.brush.color:=clyellow;end;dbg.DefaultDrawDataCell(Rect,Field,State);end;
[解决办法]
procedure TfrmMain.grdDBSDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
hb: TBrush;
p: TPen;
begin
if gdSelected in State then Exit;
//斑马线效果
if TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 = 0 then
TDBGrid(Sender).Canvas.Brush.Color := clInfoBk
else
TDBGrid(Sender).Canvas.Brush.Color := RGB(191, 255, 223);
//指定行着色
if TDBGrid(Sender) = grdDBS then
begin
if qryDBSDBS_BH.AsString = qryDBSDBS_GS.AsString then
begin
grdDBS.Canvas.Brush.Color := clYellow;
grdDBS.Canvas.Font.Style := grdDBS.Canvas.Font.Style + [fsBold];
end;
end

TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
[解决办法]
参考
Delphi(Pascal) code
dbgrid用两种颜色间隔分行显示 收藏 Delphi代码如下: procedure   TForm1.DBGrid1DrawColumnCell(Sender:   TObject;   const   Rect:   TRect;         DataCol:   Integer;   Column:   TColumn;   State:   TGridDrawState);     begin         with   (Sender   as   TDBGrid)   do         begin             if   ((State   =   [gdSelected])   or   (State   =   [gdSelected,   gdFocused]))   then             begin                 Canvas.Font.Color   :=   clHighlightText;                 Canvas.Brush.Color   :=   clHighlight;             end             else             begin                 if   DataSource.DataSet.RecNo   mod   2   <>   0   then                     Canvas.brush.Color   :=   clRed                 else                     Canvas.brush.Color   :=   clYellow;             end;             DefaultDrawColumnCell(Rect,   DataCol,   Column,   State);   //这行是关键         end;     end;简单的方法  procedure   TForm1.DBGrid1DrawColumnCell(Sender:   TObject;   const   Rect:   TRect;         DataCol:   Integer;   Column:   TColumn;   State:   TGridDrawState);     begin         if   (Table1.RecNo   mod   2)=0   then             Dbgrid1.Canvas.Brush.Color:=clred;         else             Dbgrid1.Canvas.Brush.Color:=clblue;         Dbgrid1.DefaultDrawColumnCell(Rect,   DataCol,   Column,   State);     end;改为c++builder 代码就是void __fastcall TMainFrm::Veh_DBGridDrawColumnCell(TObject *Sender, const TRect &Rect,    int DataCol, TColumn *Column, TGridDrawState State){  try  {  if(Veh_DBGrid->DataSource->DataSet->RecNo%2==0)  {   Veh_DBGrid->Canvas->Brush->Color=clSilver;  }  else  {   Veh_DBGrid->Canvas->Brush->Color=clWindow;     }  Veh_DBGrid->DefaultDrawColumnCell(Rect,DataCol,Column,State) ;  }  catch(...)  {   //  }} 

热点排行