如何根据dbedit的不同数值令dbctrgrid背景色不同(200分)

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

jjokok

Unregistered / Unconfirmed
GUEST, unregistred user!
如何根据dbedit的不同数值令dbctrgrid背景色不同,例如当dbedit数值为男时dbctrgrid背景色为红,为女时为白色
 
最后不要根据dbedit去判断啊!
直接在Jdbctrgrid的ONDrawColumnCell事件里面写代码就可以啦!

if (qryMatSF.FieldByName('Sex').AsString = '男') then
(Sender as Jdbctrgrid).Canvas.Brush.Color := RGB(255,217,236)
else
(Sender as Jdbctrgrid).Canvas.Brush.Color := clCream;
if gdSelected in State then
(Sender as Jdbctrgrid).Canvas.Brush.Color := clHighLight;
(Sender as Jdbctrgrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);

不太清楚能不能运行啊,我是用dbgrid的!
 
DBctrgrid 好象没有ONDrawColumnCell事件,有其他办法吗
 
求解!!!!
 
这个确实是DbCtrlGrid的设计疏忽,不能进行直接设置。不过可以通过下面的方法,简单进行修改,达到楼主的功能:
type
THackDBCtrlGrid = class(TDBCtrlGrid)
public
property Panel;
end;

procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
Index: Integer);
begin
if DBCtrlGrid.DataSource.DataSet.FieldByName('SIZE').AsInteger = 2 then // 条件楼主自己改吧
begin
THackDBCtrlGrid(DBCtrlGrid).Canvas.Brush.Color := clRed;
THackDBCtrlGrid(DBCtrlGrid).Canvas.FillRect(
THackDBCtrlGrid(DBCtrlGrid).Panel.ClientRect);
THackDBCtrlGrid(DBCtrlGrid).Canvas.Brush.Color := clBtnFace;
end;
end;
 
public
property Panel;
end;
请教为什么这样设置
 
这是为了提升Panel的访问优先级。基类是protected,我为了在外面访问它,所以做了一个Hack类,它没有改写任何东西,只是提升了Panel的优先级到public。
另外:优先级只对编译器有效,其本身不改变任何代码。
 
非常谢谢xiammy的帮助,dbctrgrid的panel背景色实现了,但在panel上面的TDBEdit和label的背景色却没有改变,有什么方法解决
 
后退
顶部