Another approach for updating wrong field/record because dataset scrolling

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3051 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
jujibo
2014-05-16 08:38:55 +00:00
parent 47d624ab46
commit 69b84feae4

View File

@ -36,8 +36,8 @@ type
Field: TField; Field: TField;
updated: boolean; updated: boolean;
fMaxLength: integer; fMaxLength: integer;
oldValue: String; EditingFieldNo: LongInt;
EditingFieldName: String; EditingRecNo: LongInt;
procedure myEditEnter(Sender: TObject); procedure myEditEnter(Sender: TObject);
procedure myEditOnEditingDone(Sender: TObject); procedure myEditOnEditingDone(Sender: TObject);
procedure OnKeyPress(Sender: TObject; var key: char); procedure OnKeyPress(Sender: TObject; var key: char);
@ -59,8 +59,8 @@ type
updated: boolean; updated: boolean;
theValue: TDateTime; theValue: TDateTime;
fFormat: string; fFormat: string;
oldValue: TDateTime; EditingFieldNo: LongInt;
EditingFieldName: String; EditingRecNo: LongInt;
function getFormat: string; function getFormat: string;
function EditText: string; function EditText: string;
procedure myEditEnter(Sender: TObject); procedure myEditEnter(Sender: TObject);
@ -91,8 +91,8 @@ type
updated: boolean; updated: boolean;
theValue: TTime; theValue: TTime;
fFormat: string; fFormat: string;
oldValue: TTime; EditingFieldNo: LongInt;
EditingFieldName: String; EditingRecNo: LongInt;
function getFormat: string; function getFormat: string;
procedure myEditEnter(Sender: TObject); procedure myEditEnter(Sender: TObject);
procedure myEditOnEditingDone(Sender: TObject); procedure myEditOnEditingDone(Sender: TObject);
@ -119,8 +119,8 @@ type
updated: boolean; updated: boolean;
theValue: TDateTime; theValue: TDateTime;
fFormat: string; fFormat: string;
oldValue: TDateTime; EditingFieldNo: LongInt;
EditingFieldName: String; EditingRecNo: LongInt;
function getFormat: string; function getFormat: string;
procedure myEditEnter(Sender: TObject); procedure myEditEnter(Sender: TObject);
procedure myEditOnEditingDone(Sender: TObject); procedure myEditOnEditingDone(Sender: TObject);
@ -149,8 +149,8 @@ type
theValue: integer; theValue: integer;
updated: boolean; updated: boolean;
Field: TField; Field: TField;
oldValue: integer; EditingFieldNo: LongInt;
EditingFieldName: String; EditingRecNo: LongInt;
procedure myEditOnEnter(Sender: TObject); procedure myEditOnEnter(Sender: TObject);
procedure OnKeyPress(Sender: TObject; var key: char); procedure OnKeyPress(Sender: TObject; var key: char);
procedure OnKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure OnKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
@ -174,8 +174,8 @@ type
theValue: double; theValue: double;
fDecimals: integer; fDecimals: integer;
fEFormat: string; fEFormat: string;
oldValue: double; EditingFieldNo: LongInt;
EditingFieldName: String; EditingRecNo: LongInt;
function getDecimals: integer; function getDecimals: integer;
procedure myEditOnEnter(Sender: TObject); procedure myEditOnEnter(Sender: TObject);
procedure myEditOnEditingDone(Sender: TObject); procedure myEditOnEditingDone(Sender: TObject);
@ -215,15 +215,15 @@ begin
CellEditor.MaxLength := fMaxLength; CellEditor.MaxLength := fMaxLength;
updated := False; updated := False;
CellEditor.SelectAll; CellEditor.SelectAll;
oldValue:= Field.AsString; EditingFieldNo:= Field.FieldNo;
EditingFieldName:= Field.FieldName; EditingRecNo:= Field.DataSet.RecNo;
end; end;
procedure TJDbGridStringCtrl.myEditOnEditingDone(Sender: TObject); procedure TJDbGridStringCtrl.myEditOnEditingDone(Sender: TObject);
begin begin
if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then
exit; exit;
if (oldValue <> Field.AsString) or (EditingFieldName <> Field.FieldName) then if (EditingRecNo <> Field.DataSet.RecNo) or (EditingFieldNo <> Field.FieldNo) then
exit; // avoid update wrong record/field because dataset scrolling exit; // avoid update wrong record/field because dataset scrolling
if (not updated) then if (not updated) then
begin begin
@ -323,16 +323,16 @@ begin
CellEditor.OnKeyDown := @OnKeyDown; CellEditor.OnKeyDown := @OnKeyDown;
theValue := Field.AsDateTime; theValue := Field.AsDateTime;
updated := False; updated := False;
oldValue:= Field.AsDateTime;
EditingFieldName:= Field.FieldName;
CellEditor.SelectAll; CellEditor.SelectAll;
EditingFieldNo:= Field.FieldNo;
EditingRecNo:= Field.DataSet.RecNo;
end; end;
procedure TJDbGridDateTimeCtrl.myEditOnEditingDone(Sender: TObject); procedure TJDbGridDateTimeCtrl.myEditOnEditingDone(Sender: TObject);
begin begin
if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then
exit; exit;
if (oldValue <> Field.AsDateTime) or (EditingFieldName <> Field.FieldName) then if (EditingRecNo <> Field.DataSet.RecNo) or (EditingFieldNo <> Field.FieldNo) then
exit; // avoid update wrong record/field because dataset scrolling exit; // avoid update wrong record/field because dataset scrolling
if Length(CellEditor.Caption) = 0 then if Length(CellEditor.Caption) = 0 then
begin begin
@ -556,16 +556,16 @@ begin
CellEditor.OnKeyDown := @OnKeyDown; CellEditor.OnKeyDown := @OnKeyDown;
theValue := Field.AsDateTime; theValue := Field.AsDateTime;
updated := False; updated := False;
oldValue:= Field.AsDateTime;
EditingFieldName:= Field.FieldName;
CellEditor.SelectAll; CellEditor.SelectAll;
EditingFieldNo:= Field.FieldNo;
EditingRecNo:= Field.DataSet.RecNo;
end; end;
procedure TJDbGridTimeCtrl.myEditOnEditingDone(Sender: TObject); procedure TJDbGridTimeCtrl.myEditOnEditingDone(Sender: TObject);
begin begin
if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then
exit; exit;
if (oldValue <> Field.AsDateTime) or (EditingFieldName <> Field.FieldName) then if (EditingRecNo <> Field.DataSet.RecNo) or (EditingFieldNo <> Field.FieldNo) then
exit; // avoid update wrong record/field because dataset scrolling exit; // avoid update wrong record/field because dataset scrolling
if Length(CellEditor.Caption) = 0 then if Length(CellEditor.Caption) = 0 then
begin begin
@ -750,16 +750,16 @@ begin
CellEditor.OnKeyDown := @OnKeyDown; CellEditor.OnKeyDown := @OnKeyDown;
theValue := Field.AsDateTime; theValue := Field.AsDateTime;
updated := False; updated := False;
oldValue:= Field.AsDateTime;
EditingFieldName:= Field.FieldName;
CellEditor.SelectAll; CellEditor.SelectAll;
EditingFieldNo:= Field.FieldNo;
EditingRecNo:= Field.DataSet.RecNo;
end; end;
procedure TJDbGridDateCtrl.myEditOnEditingDone(Sender: TObject); procedure TJDbGridDateCtrl.myEditOnEditingDone(Sender: TObject);
begin begin
if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then
exit; exit;
if (oldValue <> Field.AsDateTime) or (EditingFieldName <> Field.FieldName) then if (EditingRecNo <> Field.DataSet.RecNo) or (EditingFieldNo <> Field.FieldNo) then
exit; // avoid update wrong record/field because dataset scrolling exit; // avoid update wrong record/field because dataset scrolling
if Length(CellEditor.Caption) = 0 then if Length(CellEditor.Caption) = 0 then
begin begin
@ -986,16 +986,16 @@ begin
CellEditor.OnKeyDown := @OnKeyDown; CellEditor.OnKeyDown := @OnKeyDown;
theValue := Field.AsFloat; theValue := Field.AsFloat;
updated := False; updated := False;
oldValue:= Field.AsFloat;
EditingFieldName:= Field.FieldName;
CellEditor.SelectAll; CellEditor.SelectAll;
EditingFieldNo:= Field.FieldNo;
EditingRecNo:= Field.DataSet.RecNo;
end; end;
procedure TJDbGridDoubleCtrl.myEditOnEditingDone(Sender: TObject); procedure TJDbGridDoubleCtrl.myEditOnEditingDone(Sender: TObject);
begin begin
if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then
exit; exit;
if (oldValue <> Field.AsFloat) or (EditingFieldName <> Field.FieldName) then if (EditingRecNo <> Field.DataSet.RecNo) or (EditingFieldNo <> Field.FieldNo) then
exit; // avoid update wrong record/field because dataset scrolling exit; // avoid update wrong record/field because dataset scrolling
if IsValidFloat(CellEditor.Caption) then if IsValidFloat(CellEditor.Caption) then
begin begin
@ -1141,10 +1141,10 @@ begin
CellEditor.OnKeyPress := @OnKeyPress; // Recuperamos el control :-p CellEditor.OnKeyPress := @OnKeyPress; // Recuperamos el control :-p
CellEditor.OnKeyDown := @OnKeyDown; CellEditor.OnKeyDown := @OnKeyDown;
theValue := Field.AsInteger; theValue := Field.AsInteger;
oldValue:= Field.AsInteger;
EditingFieldName:= Field.FieldName;
CellEditor.SelectAll; CellEditor.SelectAll;
updated := False; updated := False;
EditingFieldNo:= Field.FieldNo;
EditingRecNo:= Field.DataSet.RecNo;
end; end;
procedure TJDbGridIntegerCtrl.OnKeyPress(Sender: TObject; var key: char); procedure TJDbGridIntegerCtrl.OnKeyPress(Sender: TObject; var key: char);
@ -1196,7 +1196,7 @@ procedure TJDbGridIntegerCtrl.myEditOnEditingDone(Sender: TObject);
begin begin
if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then if not Assigned(Field) or not Assigned(Field.Dataset) or not Field.DataSet.Active then
exit; exit;
if (oldValue <> Field.AsInteger) or (EditingFieldName <> Field.FieldName) then if (EditingRecNo <> Field.DataSet.RecNo) or (EditingFieldNo <> Field.FieldNo) then
exit; // avoid update wrong record/field because dataset scrolling exit; // avoid update wrong record/field because dataset scrolling
if IsValidInteger(CellEditor.Caption) then if IsValidInteger(CellEditor.Caption) then
begin begin