在DbGrid中,如果该列不能修改的话,把他的背景颜色置为灰色!
我的代码如下,这段代码画出来时只有一列的背景改变了(用户不能输入的不只是这一列),而且速度奇慢,不知道什么问题,还请高手指教!
procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  i,j:Integer;
begin
  if JSKHCLCX01JM.Caption='客户车辆维护' then
    begin
      for i:=0 to grdClientVehicleInfo.FieldCount - 1 do
        begin
          for j:=0 to grdClientVehicleInfo.DataSource.DataSet.RecordCount do
            begin
              if (column.FieldName='Client_id') or
                 (column.FieldName='vehicle_No') or
                 (column.FieldName='Client_Name') then
                begin
                  grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
                  grdClientVehicleInfo.DefaultDrawColumnCell(Rect,datacol,column, State);
                end;
            end;
        end;
    end;
end;
procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
var
 i,j:Integer;
begin
  if JSKHCLCX01JM.Caption='客户车辆维护' then
    begin
    for i:=0 to grdClientVehicleInfo.FieldCount - 1 do
      begin
        for j:=0 to grdClientVehicleInfo.DataSource.DataSet.RecordCount do
        begin
          if (grdClientVehicleInfo.Fields[i].Name='Client_id') or
             (grdClientVehicleInfo.Fields[i].Name='Vehicle_No')or
             (grdClientVehicleInfo.Fields[i].Name='Client_Name')  then
            begin
              grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
              grdClientVehicleInfo.DefaultDrawDataCell(Rect, Field, State);
            end;
        end;
      end;
    end;
end;

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if DataCol mod 2 = 0 then
      begin
        DBGrid1.Canvas.Brush.Color := clSilver;
      end;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  2.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if DataCol mod 2 = 0 then
      begin
        DBGrid1.Canvas.Brush.Color := clSilver;
      end;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;不错,这样可以
      

  3.   

    procedure TJSKHCLCX01JM.grdClientVehicleInfoDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if JSKHCLCX01JM.Caption='客户车辆维护' then
        begin
          if (column.FieldName='Client_id') or
             (column.FieldName='vehicle_No') or
             (column.FieldName='Client_Name') then
            begin
             grdClientVehicleInfo.Canvas.Brush.Color:=clgray;
            end;
          grdClientVehicleInfo.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        end;
    end;这样的话,也是只有'vehicle_No'列的背景颜色改变了,其它2列还是没有改变的。我的数据是从逻辑层传过来的
      

  4.   

    自己解决吧:
        在dbgrid中把此列加上,然后设置它的背景颜色就可以了!