我想在DBGrid中实现自动序号(不管有那些记录,总是从1开始):
我在adoquery1中添加一个字段aSortId 类型为Integer,字段类型为Calculated
在adoquery1中的onCalcFields事件中这样写:
DataSet.FieldByName('aSortId').Integer:=DataSet.RecNo;
运行后
为什么第一条和最后一条记录aSortId的值都是为:-1呢?
 aSort Field1  Field2
 -1    a       aa
 2     b       bb
 3     c       cc
……
 -1    z       zz

解决方案 »

  1.   

    是有这个问题,我以前碰到都是第一条记录的是-1,然后我再加一句
    if DataSet.FieldByName('aSortId').Integer = -1 then
      DataSet.FieldByName('aSortId').Integer :=1;
      

  2.   

    adodataSet1.FieldByName('idddd').AsInteger := abs(adodataSet1.RecNo);可以了!
      

  3.   

    如果是paradox或者dbf等本地表,你这样做可以,否则对于关系数据库,都是-1
      

  4.   

    procedure TFrmEmpMan.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      with DBGrid1.DataSource.DataSet do
      begin
        if DataCol = 0 then//第一列
         DBGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, IntToStr(RecNo));
      end; 
    end;可以实现你要的效果!