Primärschlüssel überspringen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von GünterD.

    Primärschlüssel überspringen

    Hallo Zusammen,

    ich möchte eine Datarow einer Bindingsource in eine andere Bindingsource ohne den Primärschlüssel kopieren.

    VB.NET-Quellcode

    1. Dim MNeu = DirectCast(DirectCast(TBMNeuBindingSource.AddNew, DataRowView).Row, tDB.TBMNeuRow)
    2. Dim MAlt = DirectCast(DirectCast(TBMAltBindingSource.Current, DataRowView).Row, tDB.TBMAltRow)
    3. For i = 0 To TBMAltBindingSource.GetItemProperties(Nothing).Count
    4. If MAlt.Item(i) IsNot "???ID-Spalte???" Then ' <== hier Abfrage ob aktuelle 'Spalte' Primärschlüssel ist
    5. MNeu.Item(i) = MAlt.Item(i)
    6. End If
    7. Next


    Die zugrundliegenden Tabellen sind exakt gleich.

    Wie komme ich auf den richtigen Weg?
    Gruß Günter
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wieviele Columns sind da drin, dass Du nicht eine neue Tabellenzeile einfügst, also DeinDataSet.DeinDataTable.AddDeinDataTableRow(UndHierAllePropertiesDerAltenRowEinfügen)?
    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.
    Bzgl des Spaltennamens: DeinTds.DeineDataTable.Columns(i).ColumnName, also wohl tDB.TBMAlt.Columns(i).ColumnName
    Und jetzt die entscheidene Frage: Was hast Du im Gesamten vor?
    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.
    Ich habe vor eine Historie von bestimmten Bindingsource-DataRows verschiedener Tabellen in entsprechender zugehöriger Historien-Tabelle anzulegen.
    D.h. vor dem Überschreiben der Items einer Bindingsource-DataRow diese DataRow ohne den dortigen Primärschlüssel in eine entsprechend zugehörigen Historien-Tabelle zu kopieren.

    Ja, normalerweise mach ich es auch mit deinem Vorschlag aus #4.
    Aber in diesem Fall möchte ich mir gerne Arbeit sparen :D

    Ich habe deinen Vorschlag eingebaut

    VB.NET-Quellcode

    1. Dim IDName As String = GetPrimaryKeys(Me.TechDBDataSet.tbl_Material).ToString
    2. Dim MNeu = DirectCast(DirectCast(TBMNeuBindingSource.AddNew, DataRowView).Row, tDB.TBMNeuRow)
    3. Dim MAlt = DirectCast(DirectCast(TBMAltBindingSource.Current, DataRowView).Row, tDB.TBMAltRow)
    4. For i = 0 To TBMAltBindingSource.GetItemProperties(Nothing).Count
    5. If TtDB.TBMAlt.Columns(i).ColumnName <> IDName Then
    6. MNeu.Item(i) = MAlt.Item(i) ' <=== Reihenfolge der Items passt nicht zueinander!!!
    7. End If
    8. Next


    Jetzt habe ich nur ein Problem, dass die Reihenfolge der Bindingsource-Items (siehe Markierung) nicht zueinander passen?
    Wo habe ich den Denkfehler?
    Gruß Günter

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „GünterD“ ()

    Ich fürchte, deine Vorstellung der Begrifflichkeiten ist sehr fehlerhaft.
    "BindingSource-DataRows" gibt es nicht.
    Nur DataTables haben DataRows.
    BindingSources "zeigen" vielleicht auf DataRows, aber mehr nicht.
    Hol dir die DataRows aus der Bindingsource.
    Hol dir von der DataRow die DataTable
    Hol dir von der DataTable die ColumnNames, und die PrimKeyColumns.
    Kopiere von einer DataRow in eine andere.
    Aber behellige nicht ieine BindingSource damit.
    Kannst mal sowas probieren

    VB.NET-Quellcode

    1. For Each col As DataColumn In TBMAlt.Columns
    2. Dim colName = col.ColumnName
    3. If colName <> IDName Then
    4. MNeu(colName) = MAlt(colName)
    5. End If
    6. Next