Daten aus mehreren Tabellen eines typDataSets in einem DataGridView darstellen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Daten aus mehreren Tabellen eines typDataSets in einem DataGridView darstellen

    Hallo..

    Ich arbeite mit einem typisierten DataSet und habe aus verschiedenen Gründen Daten auf mehrere Tabellen aufgeteilt.
    Hier ein inhaltlich etwas blödes Beispiel, das aber recht gut zeigt was ich meine:

    tblKundeTeilA
    colKunde_ID
    colVorname
    colNachname

    tblKundeTeilB
    colKunde_ID
    colLieblingsverkaeufer
    colLieblingsladen

    tblKundeTeilC
    colKunde_ID
    colKundeneinstufung
    colLetztePruefung

    Für jede Kunden-ID (colKunde_ID) gibt es in jeder Tabelle einen Datensatz. Ich möchte nun in einem DataGridView in jeweils einer Zeile z.B. colVorname, colNachname, colLieblingsverkaeufer und colKundeneinstufung darstellen. Diese Daten zur Laufzeit abzufragen und in einem DataGridView anzuzeigen, bekomme ich wohl hin. Ich würde das jedoch gerne in der Entwicklungsumgebung fertigstellen, die Spalteneinstellungen im DataGridView usw..
    Die einzige Möglichkeit, die mir bislang einfiel, ist die Bindung des DataGridView an z.B. Tabelle tblKundeTeilA und die Darstellung aller Daten, die nicht aus tblKundeTeilA kommen, über die Anzeige .ColumnType = DataGridViewComboBoxColumnin Comboboxen vorzunehmen.

    Also z.B. so:
    .DataSource = tblKundeTeilB, .DisplayMember = (tblKundeTeilB).colLieblingsverkaeufer und .ValueMember = (tblKundeTeilB).colKunde_ID.

    Die Combobox kann man einstellungsmäßig so "vergewaltigen", daß sie wie eine Textbox aussieht..

    ..aber ist das der richtige Weg?
    --------
    Lieber inkompetent als inkontinent
    Meine Überlegung des Aufteilens zusammengehöriger Daten auf mehrere Tabellen liegt darin begründet, daß manche Daten (Spalten) oft verändert werden. Das geschieht automatisiert im Hintergrund.

    Nehmen wir an, colLetztePruefung würde in einer separaten Klasse (also völlig losgelöst vom Ändern sonstiger Kundenstammdaten) alle zehn Minuten verändert werden. Kurz davor würde jemand den Kundennamen ändern wollen. Dafür wird colVorname und colNachname geladen (vor der Änderung von colLetztePruefung), verändert und zur DB übertragen (nach der Änderung von colLetztePruefung).
    Führt das nicht zu einem Problem, wenn es sich um eine Tabelle handelt? Es ist ja der selbe Datensatz. Oder ist das egal, solange sich die angesprochenen Spalten nicht überschneiden?
    --------
    Lieber inkompetent als inkontinent
    Ich kann dir nur empfehlen, von deinen wirklichen Problemen zu sprechen. Iwas fiktives, was man fiktiv löst, erweist sich zu 90% dann doch nicht anwendbar auf die Praxis.
    Etwa im Post#1 redest du von Kunden und Kunden-Teilen, jetzt in Post#3 geht es um Kunden und Prüfungen.
    Bei Kunden-Teilen ist klar, wie VB1963 sagt, dasses Unfug ist, Kunden zu zerteilen.
    Bei Kunden und Prüfungen ist hinwiederum das Gegenteil klar: dass nämlich eine Prüfung etwas anderes ist als ein Kunde.
    Selbstverständlich muss man das als zwei verschiedene Tabellen modellieren, vlt. mit einer 1:n - Relation: Kunde->Pruefung.
    Falls die Annahme richtig ist, dass ein Kunde mehrere Prüfungen hat.
    Es kann aber durchaus noch komplizierter sein - aber das kannst nur du wissen.
    Zu deiner Frage in Post#3:
    Wenn Kunde und Pruefung verschiedene Tabellen sind, besteht kein Problem, an Pruefung oder Kunde vlt. sogar parallel herumzufummeln, solange keine bestehenden Primärschlüssel verändert werden.
    Auch Hinzufügen ist möglich.
    Probleme gibts nur, wenn derselbe Datensatz von verschiedenen Nutzern parallel geändert werden soll.
    Oder wenn ein Parent-Datensatz gelöscht wird, während am Child-Datensatz gearbeitet wird.

    Hast du dich mal mit meine Tuts zur Datenmodellierung beschäftigt?

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ch kann dir nur empfehlen, von deinen wirklichen Problemen zu sprechen. Iwas fiktives, was man fiktiv löst, erweist sich zu 90% dann doch nicht anwendbar auf die Praxis.

    Ich hatte nur versucht den Kern des (Detail)Problems deutlich darzustellen, als stundenlang mein sehr komplexes Projekt zu erklären.


    1:n-Relationen habe ich etliche, aber das erklärst Du in Deinen Videos (Die view Views in zehn Teilen) super. Das, was ich nirgendwo gefunden habe, ist die gemeinsame Darstellung von Daten aus mehreren Tabellen mit 1:1-Relation in einem DataGridView. Die Daten abzufragen ist kein Thema, aber die Darstellung durch Modifikation des DataGridView auf der Form festzulegen (so wie in Deinen Videos), dafür fand ich keine Lösung.


    Hast du dich mal mit meine Tuts zur Datenmodellierung beschäftigt?

    Ja. Ich glaube, das habe ich ganz gut hinbekommen. Der DataSet-Designer im VS ist ein tolles Hilfsmittel. In Verbindung mit einem großen Monitor ist es sehr übersichtlich. Von Version 2019 auf 2017 zurückgegangen, bleiben die Tabellen nun auch dort, wo ich sie hingeschoben habe. VS 2019 brachte da nach jedem Neustart neue Kreationen der Darstellung. Schade finde ich in der Darstellung lediglich, daß die Linie einer Relation nicht an das jeweils betreffende Feld der Tabelle geht.
    --------
    Lieber inkompetent als inkontinent

    100Volt schrieb:

    Das, was ich nirgendwo gefunden habe, ist die gemeinsame Darstellung von Daten aus mehreren Tabellen mit 1:1-Relation in einem DataGridView.
    Aha! 1:1 - Relation, gut das du das erwähnst.
    Nö, ist mir nicht bekannt, dass Dataset oder DGV sowas unterstützen täte.
    Man kann sich gelegentlich behelfen durch 1:n, aber das ist halt nicht das gleiche.

    Einfacher ists, es zu vermeiden, also nicht mit zerstückelten Tabellen anfangen.