D6 prof.Delphi - Wiederherstellung der tatsächlichen Zeile in DBGrid
Früher verwendeten wir DBISAM und DBISAMTable. Das behandeln die RecNo, und es funktioniert gut mit Änderungen (Löschen, bearbeiten, etc).
Jetzt haben wir mit ElevateDB ersetzt, die RecNo nicht behandeln, und oft verwenden wir Abfragen, nicht Tabellen.
Abfrage muss erneut geöffnet werden, um die Änderungen zu sehen.
Aber wenn wir die Abfrage erneut öffnen, müssen wir auf den letzten Datensatz neu positionieren. Locate ist nicht genug, da Grid es in einer anderen Zeile anzeigt. Dies ist sehr beunruhigend, weil nach der Änderung Datensatz in eine andere Zeile bewegt, Sie es schwer zu folgen, und die Benutzer hassen dies.
Wir fanden diesen Code:
function TBaseDBGrid.GetActRow: integer;
begin
Result := -1 + Row;
end;
procedure TBasepDBGrid.SetActRow(aRow: integer);
var
bm : TBookMark;
begin
if IsDataSourceValid(DataSource) then with DataSource.DataSet do begin
bm := GetBookmark;
DisableControls;
try
MoveBy(-aRow);
MoveBy(aRow);
//GotoBookmark(bm);
finally
FreebookMark(bm);
EnableControls;
end;
end;
end;
Das ursprüngliche Beispiel ist MoveBy verwendet. Dies funktioniert gut mit Abfragen, da wir nicht sehen können, dass Abfrage im Hintergrund wieder geöffnet wird, die visuelle Kontrolle wird nicht die Zeilenposition geändert.
Aber wenn wir EDBTable oder Live/Sensitive Query haben, ist die Verwendung von MoveBy gefährlich, denn wenn jemand eine neue Zeile löscht oder anfügt, können wir in einen falschen Datensatz umziehen.
Dann habe ich versucht, den BookMark zu verwenden (siehe Bemerkung). Aber diese Technik funktioniert nicht, weil es den Datensatz in einer anderen Zeile Position zeigt ...
So die Frage: Wie erzwingen Sie sowohl die Zeilenposition und Record in DBGrid?
Oder welche Art von DBGrid kann in den Datensatz/die Zeile verschoben werden, nachdem das zugrunde liegende DataSet aktualisiert wurde?
Ich suche nach benutzerfreundliche Lösung, ich verstehe sie, weil ich versucht, diese Jump-Across-DBGrid zu verwenden, und sehr schlecht zu verwenden, weil meine Augen raus, wenn versuchen, den ursprünglichen Datensatz nach dem Update zu finden ... :-(
Vielen Dank für Ihre jede Hilfe, Link, Info: dd
Hallo! Wie ich sehe nicht. GotoBookMark ist das gleiche wie hier, weil wir nach Open sind. Aber die tatsächliche Grid-Zeile ist nicht die gleiche, also Disable not prevent to Grid zeigt den Datensatz an einer anderen Position an. MoveBy ist gut, aber ich brauche Locate hier. Aber wenn ich orten verwenden, änderte sich die Grid-Reihe ... Zum Beispiel: der Mahlgrad den Datensatz 127 in der Zeile 4 gezeigt Wenn ich mit MoveBy wieder öffnen, ist es auch in Zeile 4. Wenn ich Locate verwenden/Lesezeichen, es ist in 3, 2, 5 - zufällig, wo ich den aktuellen Datensatz sehen ... :-( – durumdara
User 2 Einfügen/löschen einer Zeile, und Ihre Benutzer 1 gespeichert wird Record falsch das ist, was TOndrej versucht zu helfen. Sie vermeiden –