DBGrid  我要实现两个功能   一个就是在列头
1
2
3
4 这样在列头上显示序号还有一个就是  查出来的数据的背景颜色   第一个是白的  第二个是灰的   第三个白的  第四个灰的这样方便辨认
就这两个  我不知道该怎么百度   复杂吗?

解决方案 »

  1.   

    用Dbgrideh http://2ccc.com/article.asp?articleid=5699
      

  2.   

    問題一回覆如下://聲明全局變量i 
     
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
      DataCol: Integer; Column: TColumn; State: TGridDrawState); 
    begin 
      with DBGrid1.DataSource.DataSet do 
      begin 
        if DataCol = 0 then                           //設置在第一列 
        begin 
          if state<>dsInsert  then i:= recno;           //這句是關鍵 
          DBGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, IntToStr(i)); 
          inc(i);                  //將i加1 
        end; 
      end; 
    end; 
     
    procedure TForm1.DataSource1StateChange(Sender: TObject); 
    begin                                            //狀態改變時將i置為1 
      i:=1; 
    end; 
      

  3.   

    問題二回覆如下:procedure   TForm1.DBGrid1DrawColumnCell(Sender:   TObject;   const   Rect:   TRect;   
        DataCol:   Integer;   Column:   TColumn;   State:   TGridDrawState);   
    begin   
        if   Column.Field.AsInteger   <   75   then   begin   
              DBGrid1.Canvas.Font.Color   :=   clWhite;   
              DBGrid1.Canvas.Brush.Color   :=   clRed;     //这里设置单元格填充色   
              DBGrid1.Canvas.FillRect(Rect);       //这里对相应的单元格进行北景色填充   
        end;   
        //输出内容   
        DBGrid1.Canvas.TextRect(   Rect,   Rect.Left,   Rect.Top,   Column.Field.AsString);   
    end;
      

  4.   

     if DataCol = 0 then       DataCol是什么?if state<>dsInsert  then i:= recno;      这句求详解    是不是好多定义的变量啊?  飞飞每次都是  就不能多和我说两句吗   愁人   
      

  5.   

    第一个:用计算字段,在其OnCalcFields事件中把数据集的RecNo赋给计算字段就可以实现了
    第二个:就是交替色嘛:在你DBGrid的OnDrawColumnCell事件中,根据你第一个问题的结果来实现,或者直接就用你数据集的RecNo来实现
      if YourDataSet.RecNo mod 2 = 0 then
         DBGrid1.Canvas.Brush.Color:= clGrayText;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      

  6.   

    procedure   TForm1.DBGrid1DrawColumnCell(Sender:   TObject;   const   Rect:   TRect;   DataCol:   Integer;   Column:   TColumn;   State:   TGridDrawState);   
    DataCol看不到么???????
      

  7.   

    看是看到了,不过整个句子完全不理解隔行换色的做出来了   我百度的一个方法,,在DBGrid 上新增了一个列  然后计算字段  什么的   全乱了  闷闷的
      

  8.   

    他神一样的   当然答的不错了   就是我太白了   他总是让我自己想不肯多给我解释  愁人呢procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    begin
      Table1.FieldbyName('a1').AsInteger :=Table1.RecNo;
     if Table1.FieldbyName('a1').Asinteger=-1 then
     Table1.FieldbyName('a1').AsInteger := 1;
    end;所有的全是1
      

  9.   

    附DEMO   http://www.vdisk.cn/down/index/4813495A2139谁能帮我改上发给我吗?谢谢先     信箱 [email protected]
      

  10.   

    procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    begin
      Table1.FieldbyName('a1').AsInteger :=Table1.RecNo;
      //if Table1.RecNo=-1 then 这样子?你的意思是结果集是空的时候,不要显示行号?那就找下面写的做就可以,不用在这里赋计算字段的值
      //  Table1.FieldbyName('a1').AsInteger := 1;
    end;你用的BDE的Table是吧?,计算字段是a1,在a1的OnGetText事件里写代码
    procedure TF_TForm1.Table1a1GetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
     if Sender.AsInteger=-1 then
        Text:=''
     else
        Text:=Sender.AsString;
    end;
      

  11.   

    //if Table1.RecNo=-1 then 
    // Table1.FieldbyName('a1').AsInteger := 1;procedure TF_TForm1.Table1a1GetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
     if Sender.AsInteger=-1 then
      Text:=''
     else
      Text:=Sender.AsString;
    end;结果那一列什么都没显示了  我又重新做的按飞飞的那个做的   结果全是-1    两种我都做都搞不定了   闷闷中
      

  12.   

    哭~~~~研究了一天终于研究出来了    begin
     ADOQuery1.FieldbyName('a1').AsInteger :=ADOQuery1.RecNo;
     if ADOQuery1.FieldbyName('a1').Asinteger=-1 then
     ADOQuery1.FieldbyName('a1').AsInteger := 1;
    end;是对的   我忘记了new field。   脑袋已经全都乱了  ~~  飞飞那个方法我还要继续研究  我这个用的  Query 没用table  我还是想用TABLE来实现