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"该怎么解决,有什么更好的办法没?
不修改数据库,不能在数据库里增加一列用来显示记录序号。双击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"该怎么解决,有什么更好的办法没?
ADOQUERY1.APPEND;
adoquery1.Fields[0].AsInteger:=i;
adoquery1.post;
adoquery1.Next;
i:=i+1;
end;
然后在oncalcfields事件赋值
dataset.fieldbyanem('序号').value:=dataset.recno;
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;
不晓得是怎么回事
你这段代码是把序号显示在什么地方呢?没有看到有新增一列的代码呀?
然后在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;