mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-20 14:19:17 +02:00
LCL, fix dbcheckbox modified even in unchanged dataset, issue #10453
git-svn-id: trunk@20013 -
This commit is contained in:
parent
84cead9009
commit
26b0680b11
@ -558,6 +558,7 @@ Type
|
|||||||
protected
|
protected
|
||||||
function GetFieldCheckState: TCheckBoxState; virtual;
|
function GetFieldCheckState: TCheckBoxState; virtual;
|
||||||
procedure DataChange(Sender: TObject); virtual;
|
procedure DataChange(Sender: TObject); virtual;
|
||||||
|
procedure DoOnChange; override;
|
||||||
procedure UpdateData(Sender: TObject); virtual;
|
procedure UpdateData(Sender: TObject); virtual;
|
||||||
procedure FocusRequest(Sender: TObject); virtual;
|
procedure FocusRequest(Sender: TObject); virtual;
|
||||||
procedure Notification(AComponent: TComponent;
|
procedure Notification(AComponent: TComponent;
|
||||||
|
@ -96,10 +96,28 @@ end;
|
|||||||
procedure TDBCheckBox.DataChange(Sender: TObject);
|
procedure TDBCheckBox.DataChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
State:=GetFieldCheckState;
|
State:=GetFieldCheckState;
|
||||||
// if original state was unchecked and after editing is checked
|
end;
|
||||||
// but if before post, edits are cancelled, FlastcheckedOnChange has a
|
|
||||||
// wrong value it won't detect changes next time, correct here.
|
procedure TDBCheckBox.DoOnChange;
|
||||||
fLastCheckedOnChange:=Checked;
|
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;
|
end;
|
||||||
|
|
||||||
procedure TDBCheckBox.UpdateData(Sender: TObject);
|
procedure TDBCheckBox.UpdateData(Sender: TObject);
|
||||||
@ -148,7 +166,7 @@ end;
|
|||||||
|
|
||||||
procedure TDBCheckBox.EditingDone;
|
procedure TDBCheckBox.EditingDone;
|
||||||
begin
|
begin
|
||||||
if FDatalink.Edit then begin
|
if FDatalink.Editing then begin
|
||||||
FDatalink.Modified;
|
FDatalink.Modified;
|
||||||
FDataLink.UpdateRecord;
|
FDataLink.UpdateRecord;
|
||||||
end else
|
end else
|
||||||
|
Loading…
Reference in New Issue
Block a user