我想在dbgrid中显示打开数据集记录的排列序号,类似“1,2,3......”等,
采用的方法是在数据集中定义了一个计算字段FRecNo,然后procedure TEmpSets.Q_TreatmentCalcFields(DataSet: TDataSet);
begin
     with Q_Treatment do
     begin
         FieldByName('FRecNo').AsInteger:=RecNo;
     end;
end;但是在dbgrid中全部返回“-1”,请教高手解决!

解决方案 »

  1.   

    procedure TEmpSets.Q_TreatmentCalcFields(DataSet: TDataSet);
    begin
      Dataset.FieldByName('FRecNo').AsInteger:=DataSet.RecNo;
    end;
    //不知道这样是不是可以?
      

  2.   

    RecNo 好象只能在再与dbgrid连接后,在afterscroll事件中才能返回纪录数,
    否则都是-1,我也没解决这个问题,
      

  3.   

    我用的是DBGRIDEH+ACCESS2000 只要在ADOTABLE.INDEXFIELDNAME 中加上要排序的字段名就可以了:)
      

  4.   

    procedure TForm1.DBGrid1DblClick(Sender: TObject);
    begin
       // showmessage()
       query1.Edit;
       query1.FieldByName('aa').AsInteger:=query1.RecNo;
    end;
      

  5.   

    不用计算字段,直接加个NewField,添加OnGetText方法:
    Text:=DataSet.Recno;
      

  6.   

    这样试试
    Q_TreatmentFRecNo.AsInteger :=abs(Q_Treatment.RecNo)
      

  7.   

    procedure TEmpSets.Q_TreatmentCalcFields(DataSet: TDataSet);
    begin
         with Q_Treatment do
         begin
             FieldByName('FRecNo').AsInteger:=Dataset.RecordCount+1 ;
         end;
    end;
      

  8.   

    一个排序字段,怎么做?我用的是BDE,请教海浪兄。
      

  9.   

    大哥,我用的是query,不是table,没有indexfield选项呀
      

  10.   

    只有Post了RecNo才有值,否则都是-1。
    你先在DBGrid里的OnDraw事件里取值就行了。
      

  11.   

    nhconch,能简单举个例子吗?谢谢!
      

  12.   

    首先,RecNo并不是所有的TDataSet继承类都支持的属性。
    其次,有些数据集的继承类虽然支持RecNo,但是一旦Filtered := True;不能正确反映序号
      

  13.   

    至于DataSet处于dsInsert状态RecNo为-1的情况倒好对付,我们可以检查一下
    State属性,如果处于dsInsert,则将RecNo视为Count+1
      

  14.   

    DataSet处于dsInsert,这只是特殊情况呀,有没有普通浏览情况的,我觉得这是一个带有普遍性的问题。继续期待...
      

  15.   

    不知你用的是什么数据库,并不是所有的数据库都直接支持recno这个属性的,据我所知,ACCESS和MS SQL SERVER都支持,foxpro好象支持得不好,需要先first,后last,这时的recno才不是-1的。
      

  16.   

    我也遇到过,解决的办法是
    procedure TEmpSets.Q_TreatmentCalcFields(DataSet: TDataSet);
    begin
         with Q_Treatment do
         begin
             FieldByName('FRecNo').AsInteger:=RecNo;
             if FieldByName('FRecNo').AsInteger=-1 then FieldByName('FRecNo').AsInteger=1
         end;
    end;你试试。
      

  17.   

    BDE 不支持RecNo.RecNo是很有用的,比如让DBGrid的隔行显示不同颜色
    如果用ADO就好办
    一定要用BDE也可以:利用BookMark自定义RecNo数组,每1元素与DataSet每项记录对应上,我曾实现。
      

  18.   

    我用access也遇到了这个情况,还没解决