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;
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;