DBGridEh中怎样增加序号列,专门显示当前的记录序号解决方案

DBGridEh中怎样增加序号列,专门显示当前的记录序号
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"

该怎么解决,有什么更好的办法没?

------解决方案--------------------
在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;