PS:用adoquery+datasourec+dbgrid连接oracle

解决方案 »

  1.   

    设置dbgird的recNO 和abckground属性
      

  2.   

    在DELPHI中经常用到网格控件(DBGrid)显示数据,网格控件只提供了每一行的颜色属性,但在实际应用中我们经常希望它按某一行某一项的取值不同显示不同的颜色,甚至在网格中的单位表格项中显示出图像等等,下面我们以一个简单的例子来告诉大家怎么做。   比如我们要求如果春季有退书用红色表示,如果秋季有退书用黄色表示(图1)      图1   利用DBGrid自绘功能可以很容易地实现这样的要求。用户可以处理DBGrid的OnDrawColumnCell事件,在其中实现特殊的效果。要判断记录是否满足要求,可以使用DBGrid的DataLink属性获得数据,但DBGrid的DataLink属性属于保护成员,必须在TCustomDBGrid的子类中调用。 type 
    TMyCustomDBGrid = class(TCustomDBGrid); procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
    DataCol: Integer; Column: TColumn; State: TGridDrawState); 
    var
    sCjts,sQjTs:String;
    begin
    with TMyCustomerDBGrid(Sender) do
    begin
    Cjts:=DataLink.Fields[5].AsString;
    sQjts:=DataLink.Fields[9].AsString;
    if sCjts<>‘‘ then       //春季退书数量>0的用红色显示
    Canvas.Brush.Color := clRed
    else
    if sQjts<>‘‘ then      //秋季退书数量>0的用黄色显示
    Canvas.Brush.Color := clYellow
    else
    Canvas.Brush.Color:=clWhite;
    Canvas.Font.Color:=clBlack; 
    canvas.fillrect(rect);
    canvas.textout(rect.left+4,rect.top+4,Column.Field.AsString);
    end;
    end;  由此方法可以延伸出其它控件的多种修饰方法,比如可以按数据项值采用不同的颜色,可以按记录号显示不同的颜色。总之,灵活应用canvas、rect及bitmap等对象,可以将各种网格装饰得绚丽多彩。 
      

  3.   

    纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
      在DbGrid的DrawColumnCell事件中编写如下代码:
      Case DataCol Mod 2 = 0 of
       True: DbGrid1.Canvas.Brush.Color:= clWhite; file://偶数列用白色
       False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
      End;
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
      

  4.   

    http://blog.csdn.net/jinjazz/archive/2004/09/22/113203.aspx
      

  5.   

    ado_two 为dbgrid 数据集的数据源
    注:在dbgrid1 的DrawColumnCell 事件中
      以下为:
    if (ado_two.RecNo mod 2)=1 then
    begin
            dbgrid1.Canvas.Brush.Color:=$00D9F3EB;
            dbgrid1.Canvas.Font.Color:= clDefault;
    end else
    begin
            dbgrid1.Canvas.Brush.Color:=clBtnHighlight;
           dbgrid1.Canvas.Font.Color:= clDefault;
    end;
    if gdselected in state then
    begin
            dbgrid1.Canvas.Brush.Color:=clDefault;
            dbgrid1.Canvas.Font.Color:= clwhite;
    end;
           dbgrid1.Canvas.FillRect(Rect);
           dbgrid1.Canvas.TextOut(Rect.Left+6,Rect.Top+2,Trim(Column.Field.AsString));
      

  6.   

    DBGrid的OnDrawColumnCell事件中if AdoQuery1.RecNo mod 2 = 0 then
      (Sender as TDBGrid).Canvas.Brush.Color := clCream  //放入你想要的颜色号
    else
      (Sender as TDBGrid).Canvas.Brush.Color := RGB(221, 255, 255);  //放入你想要的颜色号
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      

  7.   

    设置ONDRAWDATACELL事件
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    Var COORD:TGridCoord;
    begin
         COORD:=MouseCoord(Rect.Left+1,Rect.Top+1);
         IF COORD.Y MOD 2 =0 THEN
         BEGIN
              CANVAS.BRUSH.COLOR:=CLWHITE;
         END
         ELSE
         CANVAS.BRUSH.COLOR:=CLGRAY;
         CANVAS.FILLRECT(RECT);
         CANVAS.TEXTRECT(RECT,RECT.LEFT+2,RECT.TOP+2,FIELD.ASSTRING)    
    end;
      

  8.   

    呵呵,不好意思,上面我发的回复是抄别人的代码,不知道为什么不好用.只好自己写了一段.
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if DBGrid1.DataSource.DataSet.RecNo mod 2=0 then
         DBGrid1.Canvas.Brush.Color:=clRed;
         DBGrid1.DefaultDrawDataCell(Rect,Column.Field,State);
    end;
      

  9.   

    来晚了, pengxuan(追梦人)是对的