DBGrid Zellenzugriff



  • Hallo Leute, bin neu hier im Forum 🙂

    Arbeite im Moment mit Borland C++ und habe folgendes Problem, wo ich einfach nicht weiterfinde und hoffe dass ihr mir weiterhelfen könnt.
    Habe 2 DB Grids. Die Daten aus meiner Access Tabelle werden mir dort Angezeigt. Möchte nun, wenn ich links aufs DBGrid auf einen Datensatz klicke, rechts mit einer bedingten SQL Abfrage die dazugehörigen Datensätze anzeigen.
    Z.B. links Kunden, beim klick auf einen Kundendatensatz im anderen DBGrid die von dem Kunden gekauften Artikel anzeigen(Beziehungen sind vorhanden

    Mein Problem ist nun, dass ich gar nicht weiß wie ich das machen soll. Muss irgendwie diesen klick auf dem Datensatz abfangen und auslesen, weiß aber auch nicht wie man auf die Zellen eines DBGrids zugreift.

    Wäre echt froh wenn ihr mir da weiterhelfen könntet

    MfG Darkwing



  • Hallo

    Dafür gibt es einen entsprechenden Event bei TDataSource, der dir meldet wenn in einem DBGrid die Auswahl geändert wurde. In diesem Event must du dann den gewünschten Filter im TQuery für das zweite DBGrid setzen.

    bis bald
    akari



  • Hi,

    markiert Zeile:

    AnsiString var = DBGrid1->SelectedField->Text;
    

    damit bekommst du den Wert in der ersren Spalte des Grids.

    Den wert kannst du dann in dem OnClick Ereigniss nutzen um den Query für das zweite DBGrid zu basteln.



  • Danke Leute, ihr habt mir echt weitergeholfen.
    Hab gar nicht dran gedacht dort nach den Events zu schauen, sondern und beim Grid. Vielen Dank



  • Dafür verwendet man doch im Normalfall IrgendeineQueryKomponente::DataSource. Da muss man nichts mit Events machen.



  • Okay, hat alles bestens geklappt. Jetzt hänge ich am nächsten Punkt fest.
    Ich arbeite mit DBNavigator um die Datensätze im DBGrid und in der Datenbank zu bearbeiten.

    ID = Grid_Projekt->DataSource->DataSet->Fields->FieldByName("id")->AsAnsiString;
    

    Hiermit lese ich die ID des Datensatzes aus dem ersten Grid aus, mit dem ich mein Query mache und es im 2. Grid ausgebe. Funktioniert.
    Wenn ich jetzt im 2. Grid einen Datensatz hinzufüge, möchte ich diese ID gern in eine dafür vorgesehene Zelle schreiben.
    Beispiel: ich wähle ein Datensatz aus dem ersten Grid mit der ID 4. Nun werden mir im 2. Grid alle Datensätze angezeigt, welche zu ID 4 gehören. Nun möchte ich einen weiteren Datensatz hinzufügen, der diese ID zugewiesen bekommt.

    Hoffe ich hab mich verständlich ausgedrückt



  • Sorry nicht ganz verstanden...

    In welche Tabelle willst du den Datensatz "DBGrid1" oder "DBGrid2" hinzufügen?
    Ist die ID auch Primärschlüssel?



  • Acrot schrieb:

    Sorry nicht ganz verstanden...

    In welche Tabelle willst du den Datensatz "DBGrid1" oder "DBGrid2" hinzufügen?
    Ist die ID auch Primärschlüssel?

    Okay, dachte schon dass es vll unverständlich ist 🙂
    ID ist ein Primärschlüssel in der Tabelle von Grid1. In Grid 2 ist er auch gelistet als Projekt_ID, also die stehen in Beziehung. Jetzt werden im Grid2 alle Datensätze aufgelistet, wo die Projekt_ID z.B. 4 ist. Wenn ich einen neuen Datensatz in Grid2 schreibe, möchte ich dass der mir gleich die 4 in Projekt_ID schreibt.



  • Schau mal in die Hilfe zu TDBGrid::OnEditButtonClick(). Damit sollte sich das machen lassen.


Anmelden zum Antworten