2、窗体的OnShow事件里让vflag为真
procedure TMainForm.BizFormShow(Sender: TObject);
begin
vFlag := True;
end;
3、在datasetbroker的OnBeforeEdit事件中记录旧序号
procedure TMainForm.DataSetBroker1BeforeEdit(DataSet: TDataSet);
begin
if vFlag then
begin
//记录修改前的值
vOldXH := DataSet.FieldByName('XH').AsInteger;
bh := DataSet.FieldByName('ID').AsString;
end;
end;
4、在datasetbroker的OnAfterPost事件中实现序号的更新
procedure TMainForm.DataSetBroker1AfterPost(DataSet: TDataSet);
var
i : Integer;
begin
if vFlag then
begin
vFlag := False;
vNewXH := DataSet.FieldByName('XH').AsInteger;//ObjectHelper.ToInt(DataSet.FieldByName('XH').NewValue) ;//
if vNewXH > vOldXH then
begin
DataSet.DisableControls;
DataSet.Filter := ' XH >= ' + Business.System.SysUtils.IntToStr(vOldXH)
+ ' AND XH <= ' + Business.System.SysUtils.IntToStr(vNewXH)
+ ' AND ID <> '''+bh+''' ';
DataSet.Filtered := True;
DataSet.First;
while not DataSet.Eof do
begin
DataSet.Edit;
DataSet.FieldByName('XH').AsInteger := DataSet.FieldByName('XH').AsInteger - 1;
DataSet.Next;
end;
end
else
begin
DataSet.DisableControls;
DataSet.Filter := ' XH <= ' + Business.System.SysUtils.IntToStr(vOldXH)
+ ' AND XH >= ' + Business.System.SysUtils.IntToStr(vNewXH)
+ ' AND ID <> '''+bh+''' ';
DataSet.Filtered := True;
DataSet.First;
while not DataSet.Eof do
begin
DataSet.Edit;
DataSet.FieldByName('XH').AsInteger := DataSet.FieldByName('XH').AsInteger + 1;
DataSet.Next;
end;
end;
DataSet.Filter := '';
DataSet.Filtered := True;
DataSet.EnableControls;
vFlag := True;
end
else
vFlag := True;
end;
5、控制新增数据的时候,不进行序号的重新编排
procedure TMainForm.DataSetBroker1BeforeInsert(DataSet: TDataSet);
begin
vFlag := False;
end;
6、新增数据的时候,序号自增加
procedure TMainForm.DataSetBroker1AfterInsert(DataSet: TDataSet);
begin
TSQLDataSet(DataSetBroker1.DataSet).FieldByName('XH').AsInteger := TSQLDataSet(DataSetBroker1.DataSet).RecordCount+1;
end;