各位大虾:
    小弟在dbctrlgrid中放了一个DBTEXT控件,我想根据这个DBTEXT在数据库中的属性,来改变DBTEXT的颜色,如:dbtext的值是:1为红色,2为白色,该如何做,大家给我一个方案啊,在此谢过

解决方案 »

  1.   

    在dbgrid连接的数据集的afterscroll事件应该可以实现的吧!
      

  2.   

    procedure SetFieldColor(Form: TForm; Field: TField);
    var i : integer;
    begin
      if Field <> nil then begin
      for i := 0 to Form.ComponentCount - 1 do
        if (Form.Components[i] is TDBEdit) and
           (TDBEdit(Form.Components[i]).Field <> nil) and
           (TDBEdit(Form.Components[i]).Field.FieldName=Field.FieldName) then begin
          if Field.AsInteger < 60 then
            TDBEdit(Form.Components[i]).Font.Color := clred
          else if Field.AsInteger <70 then
            TDBEdit(Form.Components[i]).Font.Color := clblue
          else
            TDBEdit(Form.Components[i]).Font.Color := clWindowText;
        end;
      end;
    end;procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
      Index: Integer);
    var i : integer; dum : TDBEdit;
    begin
      for i := 0 to TDBCtrlPanel(DBCtrlGrid.Controls[0]).ControlCount-1 do
        if (TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i] is TDBEdit) and
           (TDBEdit(TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i]).Field <> nil) and
           (TDBEdit(TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i]).Field.FieldName<>'姓名') then
          SetFieldColor(self,TDBEdit(TDBCtrlPanel(DBCtrlGrid.Controls[0]).Controls[i]).Field);
    end;procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    var i : integer; dum : TDBEdit;
    begin
      if (Table1<>nil) then begin
        for i := 0 to Table1.Fields.Count-1 do
        if Table1.Fields[i].FieldName <> '姓名' then
          SetFieldColor(self,Table1.Fields[i]);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Table1.Close;
      Table1.Open;
    end;
    記得執行時再 Open Table1 喔, 不然會如 Justmade 兄所說, Actived
    TDBCtrlPanel 有問題, 我也不知為何 ?