Clone DataTable Row

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Clone DataTable Row

    Moin Leute

    Ich habe ein DataSet ("DataSet") welches 4 DataTables beinhaltet (siehe Bild)


    Nun habe ich folgendes vor:
    Mein DataTable "Kinder" ist nun mit Daten befüllt, und ich möchte die DataColumn "Vorname" aus dem Kinder DataTable in die DataColumn "KinderName" vom Breakfast DataTable clonen.


    Könnt ihr mir da ein Paar Richtungsweisende Tipps geben?
    Denn Ich verstehe nicht wirklich wie ich im DataSet auf die einzelnen DataTables zugreifen kann, geschweige denn die einzelnen Columns auszuwählen und Daten zwischen den hin und herschaufeln kann

    Bin für jeden Tipp dankbar
    Wenn ich mich nicht täusche, kann man unter anderem z.B. so auf Tabellen und Spalten zugreifen:

    dt.Columns(StringColumnName) => Zugriff auf Spalte
    ds.Tables(StringTableName) => Zugriff auf Tabelle

    ds.Tables("Kinder").Columns("Vorname")

    Edit: Was der tiefere nutzen/sinn ist weiß ich nicht, daher hier lediglich Syntax hilfe.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Uh oh. Da kommen bestimmt gleich ErfinderDesRades und VB1963 vorbei und verteilen Fingerklatsche. Stichwort typisiertes DataSet.
    Die DataTable "Kinder" sollte auch so angesprochen werden und direkt auf die typisierte DataRow zugegriffen werden:
    spezifischer Zugriff erfolgt z.B. über DataSet.Kinder(0).Vorname
    => Schleife über alle DataSet.Kinder und die jeweilige DataRow über .Vorname beziehen.

    VB.NET-Quellcode

    1. For Each Kind In DataSet.Kinder
    2. MessageBox.Show(Kind.Vorname)
    3. Next

    Ggf. über LINQ, was auch noch auf meiner to-do-list steht. Da kommen bestimmt bald passende Vorschläge.
    Das Umfüllen/Klonen in die andere DataTable kann dann allerdings nur über Veränderung bestehender Breakfast-Einträge erfolgen oder wenn man eine komplett neue Breakfast-Row erstellt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Der Grundgedanke dahinter ist einfach das ich Die Namen der Kinder ja schon habe, und nicht extra nochmals alles für den Breakfast Table eintragen möchte.
    Sprich Breakfast ist für den Enduser Readonly

    @mrMo Vielen dank die Syntaxhilfe hat mir schonmal geholfen!

    @VaporiZed LINQ habe ich noch garnicht im Hinterkopf gehabt, da werde ich mich auch nochmal durchlesen.

    Ihr habt mir da schon einen ziemlich guten Durchblick verschafft ich werde mich da nochmal reinhängen.

    Danke!
    @VaporiZed Cool, so hab ich den Zugriff bis dato noch nie (glaub ich zumindest) gemacht. Schön, da hat sich das Aufstehen ja schon gelohnt heute :)

    @Kameo evtl. wäre es besser, die ID des Kindes in der breakfast Tabelle zu speichern?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Dksksm: Ja, Du hast recht, v.a. unter dem Aspekt Datenredundanz und Normalformen. Es ist die Frage, was @Kameo genau vor hat. Wenn immer der gleiche Inhalt in beiden Tabellen in jener Datenzeile drin sein soll, wäre die Auslagerung der Namen in eine eigene Tabelle mit Verweis der anderen Tabellen auf jene besser als Datenduplikation, richtig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Was du auf jedenfall brauchst ist eine Beziehung zwischen beiden Tabellen. Eine Spalte KinderId des Typs Int ind die Breakfasttabelle und du kannst auf ALLE Spalten der Kindertabelle zugreifen und nicht nur auf den Vornamen.
    Hier könnte meine Signatur stehen.

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

    Jo - relationale Datenverarbeitung ohne zu verstehen, was Relationen sind ist ein lehrreiches Geschäft (willsagn: man lernt es dabei ;) ).
    Effizienter ist, es bereits vorher zu lernen, bzw. weiter-arbeiten mit ganz starkem Focus aufs Lernen, wie's eiglich geht.
    Gugge Relational Datamodel for Beginners, alle 3 Artikel - und downloade die Samples.
    Ist vlt. mühsam, weil englisch, aber was hilfts? Lernen musstes so oder so.

    @mrMo: Gugge du Programming against typed Dataset - für einen Db-Profi (bist du doch - oder?) IMO Must-Know.