DataSet auf eine gezielte Row setzen?
DataSet auf eine gezielte Row setzen?
HalliHallo,
es ist etwas schwer zuBeschreiben
ich habe ein dbGrid
dummerweise gibt es Ereignisse wo ich ein Datasource.DataSet.Refresh machen muss
nun springt die ausgewählte line des DBGrid wieder auf dem ersten Eintrag
kann ich irgendwie so einstellen das er da bleibt wo er ist?
oder kann ich irgendwo eine ID angeben damit er wieder auf die richtige Stelle in DBGrid springt?
vielen dank
es ist etwas schwer zuBeschreiben
ich habe ein dbGrid
dummerweise gibt es Ereignisse wo ich ein Datasource.DataSet.Refresh machen muss
nun springt die ausgewählte line des DBGrid wieder auf dem ersten Eintrag
kann ich irgendwie so einstellen das er da bleibt wo er ist?
oder kann ich irgendwo eine ID angeben damit er wieder auf die richtige Stelle in DBGrid springt?
vielen dank
-
- Beiträge: 168
- Registriert: Sa 8. Okt 2016, 08:38
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Polska
Re: DataSet auf eine gezielte Row setzen?
Das müsste 'DBGrid1.SelectedIndex:=' sein.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!
Re: DataSet auf eine gezielte Row setzen?
hmm gleich mal ausprobieren
hmm leider nein
also wenn ich DBGrid1.SelectedIndex := 2 angebe
tut sich nix am grid
wenn ich nun irgendeine Line auswähle und mit ShowMessage(inttostr(DBGrid1.SelectedIndex)) anzeigen lasse bekomme ich immer 0 wieder
hmm scheint was anderes zusein
hmm leider nein
also wenn ich DBGrid1.SelectedIndex := 2 angebe
tut sich nix am grid
wenn ich nun irgendeine Line auswähle und mit ShowMessage(inttostr(DBGrid1.SelectedIndex)) anzeigen lasse bekomme ich immer 0 wieder
hmm scheint was anderes zusein
-
- Beiträge: 19
- Registriert: So 15. Okt 2006, 14:52
- OS, Lazarus, FPC: Lazarus 2.2.0, FPC 3.2.2
- Wohnort: Meckenburg-Vorpommern
Re: DataSet auf eine gezielte Row setzen?
Das ist klar. Intern werden die Daten neu abgerufen und nach einem Open/Refresh steht man auf dem ersten Satz.TT73GP7 hat geschrieben: ich habe ein dbGrid
dummerweise gibt es Ereignisse wo ich ein Datasource.DataSet.Refresh machen muss
nun springt die ausgewählte line des DBGrid wieder auf dem ersten Eintrag
Das DBGrid visualisiert nur deine Daten. Wenn du also in deinem Dataset auf Satz 1 bist, dann wird im Grid Satz 1 als aktiv angezeigt.TT73GP7 hat geschrieben: kann ich irgendwie so einstellen das er da bleibt wo er ist?
oder kann ich irgendwo eine ID angeben damit er wieder auf die richtige Stelle in DBGrid springt?
Lösung:
Merke dir den aktuellen Satz vor deinem Refresh und positioniere das Dataset nach dem Refresh wieder auf diesen Satz.
Wie du dir den Satz merkst, ist deine Sache

Stephan
Re: DataSet auf eine gezielte Row setzen?
ok
kapiere ich nicht
ich habe grade versucht es mit GetBookmark versucht
und dann mit GotoBookmark
aber ich scheitere ja schon dadran in welchen Datentyp ich das speichern soll?
Google ist mir da echt keine Hilfe bei
grundsätzlich weiß ich welcher Satz als letztes ausgewählt war. Jeder Satz hat in der TDataSet eine eindeutige ID
anzeigen tue ich die in Grid nicht
wozu auch
aber selbst damit komme ich irgendwie nicht weiter
ich habe mich da total festgebissen
kapiere ich nicht
ich habe grade versucht es mit GetBookmark versucht
und dann mit GotoBookmark
aber ich scheitere ja schon dadran in welchen Datentyp ich das speichern soll?
Google ist mir da echt keine Hilfe bei
grundsätzlich weiß ich welcher Satz als letztes ausgewählt war. Jeder Satz hat in der TDataSet eine eindeutige ID
anzeigen tue ich die in Grid nicht
wozu auch
aber selbst damit komme ich irgendwie nicht weiter
ich habe mich da total festgebissen

-
- Beiträge: 168
- Registriert: Sa 8. Okt 2016, 08:38
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Polska
Re: DataSet auf eine gezielte Row setzen?
Funktioniert mein Tipp?
Mit '[Name des DBGrid].SelectedIndex' müsstest du auch die aktuell ausgewählte Zeile auslesen können.
Diesen Wert einfach vor der Bearbeitung in einer Variabel zwischenspeichern und nach der Bearbeitung wieder an 'SelectedIndex' zrückgeben.
Mit '[Name des DBGrid].SelectedIndex' müsstest du auch die aktuell ausgewählte Zeile auslesen können.
Diesen Wert einfach vor der Bearbeitung in einer Variabel zwischenspeichern und nach der Bearbeitung wieder an 'SelectedIndex' zrückgeben.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!
Re: DataSet auf eine gezielte Row setzen?
Nixsager hat geschrieben:Funktioniert mein Tipp?
Mit '[Name des DBGrid].SelectedIndex' müsstest du auch die aktuell ausgewählte Zeile auslesen können.
Diesen Wert einfach vor der Bearbeitung in einer Variabel zwischenspeichern und nach der Bearbeitung wieder an 'SelectedIndex' zrückgeben.
hach leider nein
also SelectedIndex gibt ja einen Integer zurück. So diesen hab ich mir einfach mal mit showmessage anzeigen lassen
halt jedes mal eine Meldung wenn ich einen Button gedrückt habe
gut alles kein Problem
ersten Eintrag ausgewählt und Button gedrückt Meldung war 0
ok
3 Eintrag in DBgrid ausgewählt und Button gedrückt
Meldung 0

hmm
dann hart in quelltext den index mal auf 2 gesetzt
dann müsste er ja immer auf dem zweiten Eintrag springen
nix da
er bleibt immer auf dem ersten

PS es ist nur ein DBGrid auf der Anwendung
also ich lese zu 100% das richtige aus

und mir ist eigentlich auch bewusst das das DBGrid nur anzeigt und das DataSet die Daten enthält und auch auf welchen ich mich grade befinde.
hach irgendwie hasst mich meine eigene Anwendung grade
-
- Beiträge: 19
- Registriert: So 15. Okt 2006, 14:52
- OS, Lazarus, FPC: Lazarus 2.2.0, FPC 3.2.2
- Wohnort: Meckenburg-Vorpommern
Re: DataSet auf eine gezielte Row setzen?
Datentyp ist TBookmarkStr.TT73GP7 hat geschrieben:ok
ich habe grade versucht es mit GetBookmark versucht
und dann mit GotoBookmark
aber ich scheitere ja schon dadran in welchen Datentyp ich das speichern soll?
grundsätzlich weiß ich welcher Satz als letztes ausgewählt war. Jeder Satz hat in der TDataSet eine eindeutige ID
anzeigen tue ich die in Grid nicht
aber selbst damit komme ich irgendwie nicht weiter
Ich bin mir aber nicht sicher, ob das nach einem Refresch funktioniert ...
Ich hab das immer so gelöst:
ID := Dataset.FieldByName('ID').AsXXX;
try
Dataset.Refresh;
finally
if not Dataset.Locate('ID',ID,...) then
// Datensatz ist weg

Dataset.First;
end;
Vielleicht hilft das in die richtige Richtung ...
Re: DataSet auf eine gezielte Row setzen?
boar was für eine schwere Geburt das doch war

sorry das ich so begriffsstutzig war
aber nun läuft es
vielen dank

sorry das ich so begriffsstutzig war
aber nun läuft es
vielen dank
-
- Beiträge: 168
- Registriert: Sa 8. Okt 2016, 08:38
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Polska
Re: DataSet auf eine gezielte Row setzen?
Wie hast du es gelöst?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!
Re: DataSet auf eine gezielte Row setzen?
Code: Alles auswählen
frmPersonen.cUserID:= frmPersonen.dsPerson.DataSet.FieldByName('ID').asString;
frmPersonen.dsPerson.DataSet.Refresh;
frmPersonen.dsPerson.DataSet.Locate('ID',frmPersonen.cUserID,[LoCaseInsensitive]);
die lazarus hilfe hat mir hier überhaupt nicht geholfen

-
- Beiträge: 168
- Registriert: Sa 8. Okt 2016, 08:38
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Polska
Re: DataSet auf eine gezielte Row setzen?
Danke!
Kein Wunder das meine Hilfe nutzlos war.
Ich habe mit dem StringGrid von Delphi gearbeitet.
Da DBGrid ist ja ganz anders.
Kein Wunder das meine Hilfe nutzlos war.
Ich habe mit dem StringGrid von Delphi gearbeitet.
Da DBGrid ist ja ganz anders.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!
-
- Beiträge: 19
- Registriert: So 15. Okt 2006, 14:52
- OS, Lazarus, FPC: Lazarus 2.2.0, FPC 3.2.2
- Wohnort: Meckenburg-Vorpommern
Re: DataSet auf eine gezielte Row setzen?
Schön das es ein bischen geholfen hat.TT73GP7 hat geschrieben:musste aber ganz schön rumgooglen bis ich das mit dem loCase raushatteCode: Alles auswählen
frmPersonen.cUserID:= frmPersonen.dsPerson.DataSet.FieldByName('ID').asString; frmPersonen.dsPerson.DataSet.Refresh; frmPersonen.dsPerson.DataSet.Locate('ID',frmPersonen.cUserID,[LoCaseInsensitive]);
die lazarus hilfe hat mir hier überhaupt nicht geholfen
Die Parameter hab ich auch nicht immer im Kopf, da ich hier aktuell zwischen FreePascal, Delphi, PHP, Python und C++ wechsle
