AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datensatz in einem DB-Grid markieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatz in einem DB-Grid markieren

Ein Thema von Ykcim · begonnen am 27. Mär 2017 · letzter Beitrag vom 28. Mär 2017
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datensatz in einem DB-Grid markieren

  Alt 27. Mär 2017, 17:34
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
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
Patrick

Geändert von Ykcim (27. Mär 2017 um 17:48 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Datensatz in einem DB-Grid markieren

  Alt 27. Mär 2017, 18:02
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?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#3

AW: Datensatz in einem DB-Grid markieren

  Alt 27. Mär 2017, 18:33
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.


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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Mär 2017 um 18:35 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Datensatz in einem DB-Grid markieren

  Alt 27. Mär 2017, 19:35
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
Patrick
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Datensatz in einem DB-Grid markieren

  Alt 28. Mär 2017, 09:24
Schau mal bitte, ob Dein DBGrid sowas unterstützt:
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;
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Datensatz in einem DB-Grid markieren

  Alt 28. Mär 2017, 09:37
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.
Heiko
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Datensatz in einem DB-Grid markieren

  Alt 28. Mär 2017, 12:33
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.
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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