LCL, fix several db controls to not enter dataset in edit state if datasource.autoedit is false, issue #8739

git-svn-id: trunk@11066 -
This commit is contained in:
jesus 2007-05-03 17:34:56 +00:00
parent 920d0c3b8e
commit 15f7db6d03
6 changed files with 36 additions and 23 deletions

View File

@ -494,6 +494,7 @@ Type
procedure FocusRequest(Sender: TObject); virtual; procedure FocusRequest(Sender: TObject); virtual;
procedure Loaded; override; procedure Loaded; override;
procedure EditingDone; override; procedure EditingDone; override;
procedure UpdateText;
public public
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;

View File

@ -1533,16 +1533,12 @@ begin
SelField := SelectedField; SelField := SelectedField;
TempColumn := TColumn(ColumnFromGridColumn(Col)); TempColumn := TColumn(ColumnFromGridColumn(Col));
if (TempColumn<>nil) and not TempColumn.ReadOnly then if (TempColumn<>nil) and not TempColumn.ReadOnly and FDatalink.Edit then
begin begin
if SelField.DataType=ftBoolean then if SelField.DataType=ftBoolean then
begin
SelField.DataSet.Edit;
SelField.AsBoolean := not SelField.AsBoolean SelField.AsBoolean := not SelField.AsBoolean
end
else else
begin begin
SelField.DataSet.Edit;
if ValueMatch(TempColumn.ValueChecked, SelField.AsString) then if ValueMatch(TempColumn.ValueChecked, SelField.AsString) then
SelField.AsString := TempColumn.ValueUnchecked SelField.AsString := TempColumn.ValueUnchecked
else else

View File

@ -149,9 +149,11 @@ end;
procedure TDBCheckBox.EditingDone; procedure TDBCheckBox.EditingDone;
begin begin
FDatalink.Edit; if FDatalink.Edit then begin
FDatalink.Modified; FDatalink.Modified;
FDataLink.UpdateRecord; FDataLink.UpdateRecord;
end else
State:=GetFieldCheckState;
inherited EditingDone; inherited EditingDone;
end; end;

View File

@ -36,10 +36,12 @@ begin
//need to override this to make sure the datalink gets notified //need to override this to make sure the datalink gets notified
//its been modified, then when post etc, it will call //its been modified, then when post etc, it will call
//updatedata to update the field data with current value //updatedata to update the field data with current value
FDatalink.Edit; if FDatalink.Edit then
FDataLink.Modified; begin
FDataLink.Modified;
inherited Change; inherited change;
end else
UpdateText;
end; end;
@ -69,15 +71,9 @@ end;
procedure TDBComboBox.DataChange(Sender: TObject); procedure TDBComboBox.DataChange(Sender: TObject);
begin begin
if not (Style=csSimple) and DroppedDown then Exit; if not (Style=csSimple) and DroppedDown then
if FDataLink.Field <> nil then Exit;
// ToDo: use Field.Text UpdateText;
Text := FDataLink.Field.DisplayText
else
if csDesigning in ComponentState then
Text := Name
else
Text := '';
end; end;
procedure TDBComboBox.EditingChange(Sender: TObject); procedure TDBComboBox.EditingChange(Sender: TObject);
@ -123,6 +119,18 @@ begin
inherited EditingDone; inherited EditingDone;
end; end;
procedure TDBComboBox.UpdateText;
begin
if FDataLink.Field <> nil then
// ToDo: use Field.Text
Text := FDataLink.Field.DisplayText
else
if csDesigning in ComponentState then
Text := Name
else
Text := '';
end;
procedure TDBComboBox.ActiveChange(Sender: TObject); procedure TDBComboBox.ActiveChange(Sender: TObject);
begin begin

View File

@ -157,7 +157,11 @@ begin
//so if a user changed the selection it can be //so if a user changed the selection it can be
//updated, and if not canel out ala ReadOnly //updated, and if not canel out ala ReadOnly
if not FDataLink.Edit then if not FDataLink.Edit then
begin
// restore value
DataChange(self);
exit; exit;
end;
inherited Click; inherited Click;
FDataLink.Modified; FDataLink.Modified;

View File

@ -141,8 +141,10 @@ begin
Value := GetButtonValue(ItemIndex); Value := GetButtonValue(ItemIndex);
if (Value<>OldValue) and FDatalink.CanModify and not SettingValue then if (Value<>OldValue) and FDatalink.CanModify and not SettingValue then
begin begin
FDatalink.Edit; // ensure that we are in edit state if FDatalink.Edit then // ensure that we are in edit state
FDataLink.Modified; FDataLink.Modified
else
DataChange(Self);
end; end;
end; end;