Datagridview gebunden DataDat - Rückgabe einer neuen ID

  • VB.NET

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

    Datagridview gebunden DataDat - Rückgabe einer neuen ID

    Hallo,

    ich habe mal (vielleicht eine doofe) Frage an euch.

    Wenn ich in einem Dataset (Designer) gebundenen Datagridview einen neuen Eintrag mache, erhält dieser immer die ID z.B. -1, -2 usw.
    Nach dem speichern bekommt dieser neue Datensatz eine "echte" ID.

    Wie könnte ich es anstellen, dass mir sofort nach dem Speichern diese echte ID zurückgegeben wird???

    Beispiel: Lege ich einen Datensatz an, wird nach oder beim speichern die echte ID vergeben und danach steht der Datensatz je nach Sortierung und ob aktualisiert wird am Ende oder mitten drinnen im Datagridview.
    Nun sollte aber nach dem Speichern nur noch dieser eine neue DS im DGV angezeigt werden bzw. soll mir die neue ID zum "weiterverarbeiten" z.B. in einem anderen FEld angeben zurückgegeben werden.


    Hattet Ihr sowas schon mal ??

    GRuß
    lris

    EDIT:

    Könnte das das richtige sein?

    Link OnRowUpdate

    Wenn ja, kann mir das einer verständlich erklären?

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

    Das geht halt nicht anders.
    Das Dataset generiert eine provisorische ID, und die Datenbank generiert eine endgültige ID, natürlich erst beim Abspeichern.
    Und beim Abspeichern wird die endgültige ID gleich mit abgefragt, und ersetzt dann die provisorische ID.

    Ich wüsste nicht, was das für ein Problem machen könnte - also was ist an der provisorischen ID nicht in Ordnung?
    Das ist je nach DB verschieden. Manche DBs unterstützen InsertCommands, an denen gleich ein SelectCommand dran hängt, andere müssen im DataAdapter_RowUpdated eine Extra-Query abfahren. Ups - so weit warste ja auch schon :thumbsup:

    Bei manchen DBs machen haben die generierten TableAdapter das gleich eingebaut, bei anneren muß man nach-frickeln. Gugge zb. Autowerte inserten

    All inclusive ists bei DBExtensions

    Aber anzeigen sollte man diese IDs überhaupt nie jemals.
    ist mein Ansatz so richtig?

    VB.NET-Quellcode

    1. Private Sub DatenSpeichern()
    2. Me.Validate()
    3. Me.Tab_DokumenteBindingSource.EndEdit()
    4. Me.Tab_DokumenteTableAdapter.Update(Database1DataSet.Tab_Dokumente) 'neu
    5. 'Me.TableAdapterManager.UpdateAll(Me.Database1DataSet)
    6. Me.Close()
    7. End Sub
    8. Private _IdentityCommand As New OleDbCommand("SELECT @@IDENTITY")
    9. Private Sub Tab_DokumenteTableAdapter_RowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs) Handles Tab_DokumenteTableAdapter.RowUpdated
    10. If e.StatementType = StatementType.Insert Then
    11. _IdentityCommand.Connection = e.Command.Connection
    12. _IdentityCommand.Transaction = e.Command.Transaction
    13. e.Row(e.Row.Table.PrimaryKey(0)) = _IdentityCommand.ExecuteScalar()
    14. End If
    15. End Sub


    Er sagt aber dass er beim Handles Tab_DokumenteTableAdapter.RowUpdated das RowUpdated nicht kennt ! :(

    Aber Grundsätzlich so richtiger Weg?
    Hab kapiert, nach dem ich es mir nochmal durchgelesen habe... sorry- war mal wieder zu schnell!!

    also habe im DataSet in der Tabelle Tab_Dokumente auf Vill,GetData doppelklick gemacht und den Code wie im Codesnipsel eingefügt...
    Es wird nicht gemeckert und auch das Speichern geht so weit!

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Namespace Database1DataSetTableAdapters
    3. Partial Public Class Tab_DokumenteTableAdapter
    4. Private _IdentityCommand As New OleDbCommand("SELECT @@IDENTITY")
    5. Private Sub Adapter_RowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs) Handles _adapter.RowUpdated
    6. If e.StatementType = StatementType.Insert Then
    7. _IdentityCommand.Connection = e.Command.Connection
    8. _IdentityCommand.Transaction = e.Command.Transaction
    9. e.Row(e.Row.Table.PrimaryKey(0)) = _IdentityCommand.ExecuteScalar()
    10. End If
    11. End Sub
    12. End Class
    13. End Namespace


    Wie kann ich mir jetzt die neue nach dem Speichern vergebene ID zurückgeben lassen ??

    Das verstehe ich noch nicht...

    Gruß lris


    EDIT !!!

    Habs verstanden, alles klar- ID wird sofort vergeben! :) DANKE !!!!!!!

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