mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 20:00:16 +08:00
Fix issue #664 delete record shows wrong record after delete
This commit is contained in:
@ -5946,10 +5946,10 @@ end;
|
|||||||
function TMDIChild.GridPostDelete(Sender: TBaseVirtualTree): Boolean;
|
function TMDIChild.GridPostDelete(Sender: TBaseVirtualTree): Boolean;
|
||||||
var
|
var
|
||||||
Node: PVirtualNode;
|
Node: PVirtualNode;
|
||||||
|
Nodes: TNodeArray;
|
||||||
sql: WideString;
|
sql: WideString;
|
||||||
Affected: Int64;
|
Affected: Int64;
|
||||||
Selected: Integer;
|
Selected, i, j: Integer;
|
||||||
Offset: Cardinal;
|
|
||||||
msg: String;
|
msg: String;
|
||||||
begin
|
begin
|
||||||
Node := Sender.GetFirstSelected;
|
Node := Sender.GetFirstSelected;
|
||||||
@ -5978,21 +5978,14 @@ begin
|
|||||||
// Fine. Number of deleted rows equals the selected node count.
|
// Fine. Number of deleted rows equals the selected node count.
|
||||||
// In this case, just remove the selected nodes, avoid a full reload
|
// In this case, just remove the selected nodes, avoid a full reload
|
||||||
Sender.BeginUpdate;
|
Sender.BeginUpdate;
|
||||||
Node := Sender.GetFirstSelected;
|
Nodes := Sender.GetSortedSelection(True);
|
||||||
Offset := 0; // Needed to decrease the array index after one element was deleted
|
for i:=High(Nodes) downto Low(Nodes) do begin
|
||||||
while Assigned(Node) do begin
|
for j := Nodes[i].Index to High(FDataGridResult.Rows)-1 do begin
|
||||||
if Node.Index + 1 - Offset < Cardinal(High(FDataGridResult.Rows)) then begin
|
// Move upper rows by one so the selected row gets overwritten
|
||||||
// Delete node somewhere in the middle of the array
|
FDataGridResult.Rows[j] := FDataGridResult.Rows[j+1];
|
||||||
System.Move(
|
|
||||||
FDataGridResult.Rows[Node.Index + 1 - Offset],
|
|
||||||
FDataGridResult.Rows[Node.Index - Offset],
|
|
||||||
(Cardinal(Length(FDataGridResult.Rows)) - (Node.Index - Offset - Cardinal(Low(FDataGridResult.Rows))) - 1) * SizeOf(TGridRow)
|
|
||||||
);
|
|
||||||
end;
|
end;
|
||||||
SetLength(FDataGridResult.Rows, Length(FDataGridResult.Rows) - 1);
|
|
||||||
inc(Offset);
|
|
||||||
Node := Sender.GetNextSelected(Node);
|
|
||||||
end;
|
end;
|
||||||
|
SetLength(FDataGridResult.Rows, Length(FDataGridResult.Rows) - Selected);
|
||||||
Sender.DeleteSelectedNodes;
|
Sender.DeleteSelectedNodes;
|
||||||
Sender.EndUpdate;
|
Sender.EndUpdate;
|
||||||
end else begin
|
end else begin
|
||||||
|
Reference in New Issue
Block a user