Wählen Sie die Zeile nach DBGrid erfrischend
Frage
Nun ja, eine Art von n00b Frage von mir. Ich habe die Netto-und ähnliche Fragen hier gesurft, aber haben keine richtigen Antworten für solche einfachen gefunden (wie ich dachte) Problem.
Ich habe eine DBGrid. Ich wähle eine Zeile und einige Aktionen mit weiteren Daten zu dieser Zeile verknüpft werden. Nachdem ich fertig ist, wird mein DBGrid aktualisiert und ausgewählte Zeile setzt zunächst. Ich möchte die gleiche Zeile ausgewählt erhalten, die vor dem Auffrischen DBGrid Daten ausgewählt wurde. Irgendwelche Vorschläge?
Lösung
Vor erfrischend, die verknüpfte Datenmenge aktuelle Auswahl als Lesezeichen speichern, dann danach das Lesezeichen wiederherstellen.
Andere Tipps
Diese Antwort ist eine kleinere Ergänzung zu Masons beabsichtigt, keine Alternative. Ich habe es nur hinzugefügt, weil eine andere Antwort hat sich gezeigt, was darauf hindeutet, falsch imo, die Nutzung der RecNo Eigenschaft des Datensatzes. Nicht alle Nachkommen von TDataSet RecNo zuverlässig oder überhaupt umzusetzen. Einige Nachkommen zurückkehren nur einen konstanten Wert z.B. 0 für die aktuellen Zeilen des RecNo und nichts zu tun, wenn Sie einen Wert zuweisen.
procedure TMyForm.DoSomethingWithDataSet(ADataSet : TDataSet);
var
Bookmark : TBookmark;
begin
Bookmark := ADataSet.GetBookmark; // Save your place in ADataSet
try
Screen.Cursor := crSqlWait; // Show the user that something is happening
Update; // update the form to make sure screen cursor updates
ADataSet.DisableControls;
// do something with ADataSet here e.g.
ADataSet.First;
while not ADataSet.Eof do begin
// do something with current row here, then
ADataSet.Next;
end;
finally
ADataSet.GotoBookmark(Bookmark); // Return to where you were at outset
ADataSet.FreeBookmark(Bookmark);
ADataSet.EnableControls;
Screen.Cursor := crDefault; // Let the user see you're done
end;
end;
RecKey:=DmFRM.ViewTBL.RecNo;
with DmFRM.ViewTBL do
begin
Active:=false;
Active:=True;
RecNo:=RecKey;
end;