Verschachtelte Tabelle MS Access nach DataGridView vb.NET

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Tweety2016.

    Verschachtelte Tabelle MS Access nach DataGridView vb.NET

    Hallo zusammen,

    ich habe in Access zwei Tabellen, die ich über Beziehungen miteinander verbunden habe, wodurch die erste Tabelle jetzt verschachtelt dargestellt wird ( mit Kreuzchen vorne zum Aufklappen ).
    Wenn ich aber die erste Tabelle im DataGridView darstellen möchte, bekomme ich keine Verschachtelung, sondern immer nur die Datensätze der ersten Tabelle, so als hätte ich die Beziehung zu der anderen Tabelle nie geschaffen.

    Wie bekomme ich die verschachtelte Tabelle genauso im DataGridView dargestellt, wie sie auch im Access dargestellt wird?

    Danke und GRüßr
    Datagridview kann dies Darstellung mit "Kreuzchen im Zeilenkopf" (hierarchische Darstellung) nicht.
    Ein Uralt-Control kann das aber: System.Windows.Forms.DataGrid.
    Das sieht aus anderen Gründen aber mistig aus. Man kann es prinzipiell gestalten, dass es schön aussieht, aber das ist eine Wissenschaft für sich, die kein Mensch beherrscht.

    Ich nehme lieber DGV, und bastel mir Parent-Child-Views, um hierarchische Zusammenhänge benutzerfreundlich darzustellen.
    Das DG verwende ich nur zu Debug-Zwecken - dazu ist es super.
    Genau das mit den Parent-Child-Views brächte ich.
    Ich habe jetzt als erstes im DataSetDesigner eine Relation erstellt - CustomerID der ersten Tabelle zu der CustomerID der zweiten Tabelle.

    An der Stelle hätte ich gedacht, dass dadurch ein drittes DataSet gebildet wird, dass ich als DataSource für mein DGV nehmen kann.

    Wie nutze ich jetzt meine Relation für das DGV? Oder wie erstellst du deine Views?

    Danke.
    Vielen Dank, das sind sehr gute Lösungen!
    Ich habe inzwischen auch einen Weg gefunden wie ich das mit den Kreuzchen vorne machen kann ohne das alte DataGrid - über eine dll.
    Es funktioniert auch gut, und so habe ich zwei gute Lösungen.

    Was mir noch fehlt ist der Ausdruck für der Filter auf die ComboBoxSpalte des DatagridView.

    Ich habe also wie in einem der Video die Spalte ID als ComboBox gestaltet und festgelegt, dass darunter der NAme aus dem anderen DGV angezeigt wird.

    Wie filtere ich jetzt diese Spalte so, dass nur die Zeilen angezeigt werden, wo der Name z.B. Carter stehen bleiben?



    Vielen Dank!!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tweety2016“ ()

    Klar.
    Bin im Internet auf folgende dll gestoßen: CodeProject.Windows.ControlLib
    Wenn ich sie in meine ToolBox ziehe erhalte ich ein neues DGV Control: CPDataGridView
    Nachdem ich im Designer meine beiden Tabellen über Relations verknüpft habe mache ich folgendes:

    Ich ziehe aus der Datenquelle meine untergeordnete Tabelle aufs Form - ganz normales DGV.
    Dann ziehe ich ein leeres CPDGV ( neues Control dll ) aufs Form und binde die übergeordnete Tabelle an - BindingSourse der übergeordneten Tabelle.
    Für dieses DGV setze ich in den Properties Expandable auf True und wähle unter Nodes das untergeordnete DGV - jetzt erscheinen schon die Pluszeichen vorne.

    Dann ziehe ich noch aus der Datenquelle die übergeordnete Tabelle als Detailview aufs Form.
    Jetzt sage ich im Form Load und für CPDGVSelectionChanged, dass das untergeordnete DGV sein BindingSource nach Inhalt ID der TextBox aus dem Detailview filtern soll.
    Damit habe ich beim Laden in der untergeordneten Tabelle nur Daten mit ID 1. So wird das DGV in dem CPDGV auch angezeigt.
    Dasselbe passiert, wenn ich zwischen den Zeilen des CPDGV wechsele - Filter der untergeordneten Tabelle wird aufgefrischt.

    Also im neuen CPDGV aufs Plus klicken, und es werden nur untergeordnete Datensätze zu der jeweiligen ID angezeigt.

    Was mir aber immer noch fehlt ist der doofe Filter auf cmb des DataGridView für Lösung 1. Diese Lösung finde ich auch gut.

    P.S. Habe erstmal einen Fakefilter: ich gehe durch alle SelectedValues der ComboBox im DGV und setze die Zeilenhöhe auf 0, wenn ungleich dem Inhalt der TextBox aus dem Detailview.Sieht aber unschön aus ...Richtiger Filter wäre da schon viel mehr Wert.

    Tweety2016 schrieb:

    Wie filtere ich jetzt diese Spalte so, dass nur die Zeilen angezeigt werden, wo der Name z.B. Carter stehen bleiben?
    du musst die ID des Datensatzes mit Namen Carter extrahieren.
    Die gibst du im Filterausdruck an: bsBlaBla.Filter = "PersonID = 4"

    oder auch: bsBlaBla.Filter = "PersonID in (4, 5, 7)" ( dann hast du auf Carter, Reagan, Bush gefiltert)