Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datensatz in einem DB-Grid markieren (https://www.delphipraxis.net/192190-datensatz-einem-db-grid-markieren.html)

Ykcim 27. Mär 2017 16:34

Datenbank: MySQL • Version: 5 • Zugriff über: UniDac

Datensatz in einem DB-Grid markieren
 
Hallo Zusammen,

Ich möchte einen bestimmten Datensatz in einem DBGrid (TDBAdvGrid) selektieren.
Ich dachte das müsste so gehen:
Delphi-Quellcode:
if Frame_Kunden1.Grid_Konzern.DataSource.DataSet.Locate('konzern_id', MySQL.Query_Standort.FieldByName('konzern_id').AsInteger, []) then begin
   Frame_Kunden1.Grid_KonzernClickCell(Frame_Kunden1.Grid_Konzern, MySQL.Query_Konzern.FetchRows, 2);
end;
Ich bekomme ein "True" zurückgemeldet und es werden auch die richtigen Werte gefunden:
Delphi-Quellcode:
ShowMessage(MySQL.Query_Konzern.FieldByName('name').AsString);
ShowMessage(IntToStr(MySQL.Query_Konzern.FetchRows));
Aber leider wird der Datensatz nicht im Grid markiert und auch nicht das OnClickCell-Event ausgeführt...

Hat jemand eine Idee, was ich anders machen muss?

Vielen Dank
Patrick

Jumpy 27. Mär 2017 17:02

AW: Datensatz in einem DB-Grid markieren
 
Um den Datensatz im Grid zu markieren, müsste doch in den Eigenschaften des Grids RowSelect (oder so ähnlich) auf True stehen und dann würde das Locate doch schon reichen um zum richtigen Datensatz zu springen, der dann autom. der gewählte sein müsste.

Was dann die OnClick-Prozedur angeht, finde ich es immer seltam, wenn sowas im Code aufgerufen werden muss. Wäre es nicht besser, das, was in der OnClick gemacht wird in eine andere Prozedur auszulagern, die dann sowohl von der OnClick-Prozedur, als auch von anderen Stellen im Code aus, direkt mit den richtigen Parametern aufgerufen werden kann?

himitsu 27. Mär 2017 17:33

AW: Datensatz in einem DB-Grid markieren
 
Es gommt auf das Grid drauf an, ob und in welcher Richtung es sich ausrichtet.
Das kann es machen, aber muß es nicht.
Bei einigen Grid-Komponenten ist sowas nicht eingebaut und bei Anderen kann man es (de)aktivieren.

z.B.:
Grid-Selection (OnSelect) => DataSet ausrichten
DataSet-RecordIndex (OnAfterScroll) => Row im Grid selektieren

Und wenn dein Code nichts macht, dann wird er entweder nicht ausgeführt oder das Locate trifft nichts, da diese ID nicht im DataSet vorkommt. :stupid:


Zitat:

Was dann die OnClick-Prozedur angeht, finde ich es immer seltam,
Jupp, man könnte fast der Vermutung unterliegen, dass OnClickCell falsch ist und jemand eigentlich etwas ala OnSelectionIrgendwas verwenden wollte.
Am Ende kommt noch ein User auf die saudoofe Idee und arbeitet mit den Cursortasten anstatt mit der Maus zu klicken.

Ykcim 27. Mär 2017 18:35

AW: Datensatz in einem DB-Grid markieren
 
Hallo Zusammen,

die Eigenschaften des Grids RowSelect habe ich aktiviert. Und der Datensatz wird auch in Frame_Kunden1.Grid_Konzern.DataSource.DataSet.Loca te gefunden. Das habe ich geprüft. Aber auf das Grid hat das irgendwie keine Auswirkung. In dem Grid werden alle Datensätze angezeigt und der erste ist selektiert, obwohl das der falsche ist.

Ich kann auch ausschließen, dass die Procedure gar nicht durchlaufen wird, auch das habe ich geprüft. Ich habe wirklich keine Idee, warum der gefundene Datensatz nicht markiert wird.

Was die OnClickCell-Procedure angeht, nehme ich die Anregung gerne an und lagere sie aus und steuere sie mit dem OnSelect Event an.

Vielen Dank
Patrick

nahpets 28. Mär 2017 08:24

AW: Datensatz in einem DB-Grid markieren
 
Schau mal bitte, ob Dein DBGrid sowas unterstützt:
Delphi-Quellcode:
DBGrid.SelectedRows.CurrentRowSelected := True;


Das könnte dann in etwa so aussehen:
Delphi-Quellcode:
if Frame_Kunden1.Grid_Konzern.DataSource.DataSet.Locate('konzern_id', MySQL.Query_Standort.FieldByName('konzern_id').AsInteger, []) then begin
   Frame_Kunden1.Grid_Konzern.DataSource.DataSet.SelectedRows.CurrentRowSelected := True;
   Frame_Kunden1.Grid_KonzernClickCell(Frame_Kunden1.Grid_Konzern, MySQL.Query_Konzern.FetchRows, 2);
end;

hoika 28. Mär 2017 08:37

AW: Datensatz in einem DB-Grid markieren
 
Hallo,
mit dem TDBAdvGrid habe ich auch so meine liebe Not gehabt.
Ich habe das jetzt ersetzt durch TAdvStringGrid und mache die DB-Zugriffe selbst.

Ykcim 28. Mär 2017 11:33

AW: Datensatz in einem DB-Grid markieren
 
Hallo Zusammen,

soeben gelöst - ich hatte in dem nachfolgenden Procedure-Ablauf noch eine Änderung am DataSet, sodass das Locate überschrieben wurde.

Jetzt passt es.

Vielen Dank

P.S.: Die OnCellClick wurde in ein OnSelectedCell und der Inhalt in eine separate Procedure ausgelagert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz