LCL, fix dbcheckbox modified even in unchanged dataset, issue #10453

git-svn-id: trunk@20013 -
This commit is contained in:
jesus 2009-05-17 17:02:44 +00:00
parent 84cead9009
commit 26b0680b11
2 changed files with 24 additions and 5 deletions

View File

@ -558,6 +558,7 @@ Type
protected
function GetFieldCheckState: TCheckBoxState; virtual;
procedure DataChange(Sender: TObject); virtual;
procedure DoOnChange; override;
procedure UpdateData(Sender: TObject); virtual;
procedure FocusRequest(Sender: TObject); virtual;
procedure Notification(AComponent: TComponent;

View File

@ -96,10 +96,28 @@ end;
procedure TDBCheckBox.DataChange(Sender: TObject);
begin
State:=GetFieldCheckState;
// if original state was unchecked and after editing is checked
// but if before post, edits are cancelled, FlastcheckedOnChange has a
// wrong value it won't detect changes next time, correct here.
fLastCheckedOnChange:=Checked;
end;
procedure TDBCheckBox.DoOnChange;
var
EditingOk: boolean;
begin
if [csLoading,csDestroying,csDesigning]*ComponentState<>[] then begin
exit;
end;
// enter edit state avoiding FDatalink.Reset which would
// not honour external event (generated perhaps by user interaction)
FDatalink.OnDataChange:=nil;
EditingOk := FDatalink.Edit;
FDatalink.OnDataChange:=@DataChange;
EditingDone;
if EditingOk then begin
if Assigned(OnChange) then
OnChange(Self);
end;
end;
procedure TDBCheckBox.UpdateData(Sender: TObject);
@ -148,7 +166,7 @@ end;
procedure TDBCheckBox.EditingDone;
begin
if FDatalink.Edit then begin
if FDatalink.Editing then begin
FDatalink.Modified;
FDataLink.UpdateRecord;
end else