DBGridEh中怎样增加序号列,专门显示当前的记录序号
不修改数据库,不能在数据库里增加一列用来显示记录序号。双击DBGridEh 增加一列放最前面 然后
i:=1;
    with adoquery1 do
    begin
        close;
        sql.Clear;
        sql.Add('select * from AAA');
        open;
    end;
    if not adoquery1.Eof then
       begin
         adoquery1.Fields[0].AsInteger:=i;
         adoquery1.Next;
         i:=i+1;
       end;报错“Adoquery1: Dateset not in edit or insert mode"该怎么解决,有什么更好的办法没?

解决方案 »

  1.   

    ADOQUERY1.NEXT之前要ADOQUERY1.edit和ADOQUERY1.POST.
      

  2.   

           begin
             ADOQUERY1.APPEND;  
             adoquery1.Fields[0].AsInteger:=i; 
             adoquery1.post;
             adoquery1.Next; 
             i:=i+1; 
           end; 
      

  3.   

    http://www.2ccc.com/article.asp?articleid=3764
      

  4.   

    在dataset字段编辑器新建一个序号字段
    然后在oncalcfields事件赋值
    dataset.fieldbyanem('序号').value:=dataset.recno;
      

  5.   

    我这有段代码,我自己已经在用的,你自己改改应该可以的
    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; 
      

  6.   

    我的是在dbgrideh中,照你说的改了,但在dbgrideh1里面没看到有用。
    不晓得是怎么回事
    你这段代码是把序号显示在什么地方呢?没有看到有新增一列的代码呀?
      

  7.   

    在dataset字段编辑器新建一个序号字段 
    然后在oncalcfields事件赋值 
    dataset.fieldbyanem('序号').value:=dataset.recno;这样做有一个问题,就是直接拖动滚动条时,会出现第一条或最后一条序号显示错误的情况,解决办法是在数据集AfterScroll事件中加上以上语句,要以自已进行修改. AfterScroll(DataSet: TDataSet);
    begin
     try
      if (DataSet['序号']=-1) And (DataSet.RecordCount>0)
         And (Not (DataSet.State=dsInsert)) And (Not (DataSet.State=dsEdit)) then
         DataSet.Refresh;  //解决DBGrid滚动条直接拖动的事件到最后或最前的问题。EOF、BOF同时为真
     Except
        try
         dataset.Active:=false;
         dataset.Active:=true;
        finally
        end;
     end;
    end;