DBGridEH自动编号问题?(10分)

  • 主题发起人 主题发起人 vb163
  • 开始时间 开始时间
V

vb163

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBGRIDEH做的数据录入.........现在在DBGRIDEH中加一计算字段为'BH',那么我想在录入第一条数据时BH显1,录入每二条数据时显"2"........类推...
但现在我的问题是在编第二条数据...第三条数据时......前面的编号还是显'1',但移到下一条数据时,前面的编号就显示正常,这样很不好看~~~~我的目的是:当编第二条数据时编号马上显为2,编第三条数据时显为3.........不是说要把光标移到下一条数据时才显示正确..
如下是我写的代码:请问那位大哥们能解决这一现象....
adoquery1添加计算字段 BH
在adoquery1的onCalcFields事件里写
adoquery1.fieldbyname('BH').asInteger := ABS(adoquery1.RecNo);
 
我在OnNewRecord事件加入
ADOQuery1.fieldbyname('tt').asInteger:=ABS(ADOQuery1.RecordCount)+1;
在新建的时候可以满足你的要求,但是,输入完成一个字段以后,计算字段又回到1.
需要找在修改完一个字段以后触发的事件,加上这条语句就应该可以.
 
在公共单元里写一个这样的东西:
procedure GetIndexId(Sender: TField;var Text: String; DisplayText: Boolean);
begin
if (Sender as TField).DataSet.RecordCount>0 then
Text:=Inttostr((Sender as TField).DataSet.RecNo)
else
Text:='';
end;

再在需要的地方调用:
ClientDataSet1.FieldByName('IdNo').OnGetText:=GetIndexId;
这样保证可以,
我一直信赖她。。。。。:)
 
在新增记录里加如下代码
DataSet.FieldByName('Sequence').asinteger := DataSet.RecordCount + 1;
然后写一过程
procedure TFrm.RefreshSequence;
var
bkPlace: TBookMark;
i: integer;
begin
DBGridEh1.DataSource.DataSet.DisableControls;
bkPlace := DBGridEh1.DataSource.DataSet.GetBookMark;
DBGridEh1.DataSource.DataSet.First;
i := 1;
while not DBGridEh1.DataSource.DataSet.eof do
begin
DBGridEh1.DataSource.DataSet.Edit;
DBGridEh1.DataSource.DataSet.FieldByName('Sequence').asinteger := i;
DBGridEh1.DataSource.DataSet.Post;
DBGridEh1.DataSource.DataSet.Next;
Inc(i);
end;
DBGridEh1.DataSource.DataSet.GotoBookMark(bkPlace);
DBGridEh1.DataSource.DataSet.EnableControls;
DBGridEh1.DataSource.DataSet.FreeBookMark(bkPlace);
end;
在删除时调用这个过程就行,就可以每删除一条其编号也就可以改变了。
 
楼上真狠,每条数据改一遍,到我的主页下载我自用的表格,有显示序号 http://kinneng.icpcn.com
 
[:D]混点分啊
 
后退
顶部