Datagridview und Checkbox --> update Tabelle

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von michasowieso.

    Datagridview und Checkbox --> update Tabelle

    Hallo,

    ich habe ein Datagridview mit Checkboxspalte. Dem DGV liegt eine Tabelle aus einer Access-DB zugrunde. Wenn ich nun den Haken bei verschiedenen Checkboxen setze, möchte ich im Anschluß per Button alle Datensätze die markiert sind in eine andere Tabelle der DB schreiben.
    Hiermit habe ich innerhalb des Cell_ContentClick getestet.
    Me.Alle_Bauteile_AFDataGridView.EndEdit()
    Me.Alle_Bauteile_AFBindingSource.EndEdit()Me.Alle_Bauteile_AFTableAdapter.Update
    Was muß ich tun um die entsprechenden Datensätze in die DB zu bekommen.



    Vielen Dank vorab.

    Gruß

    Micha

    Da gibt es mehrere Möglichkeiten.

    Du könntest mit einer Schleife Datensatz für Datensatz aus dem Datagrid abfragen und prüfen, ob die Checkbox gesetzt ist.
    Wenn ja, dann diesen Datensatz mit einen SQL INSERT INTO oder UPDATE in die Zieltabelle schreiben.

    So viel zur Theorie ;)
    Hallo nochmal,

    das große Problem ist, wie frage ich den Zustand der Checkbox im Datagridview ab. Ich habe mittlerweile 100te Seiten dazu durchforstet. Allerdings ohne nennenswerten Erfolg.

    Kann mir vielleicht noch jemand einen Denkanstoß geben?



    Danke vorab.



    Gruß

    Micha
    Hallo mal wieder...

    bin meinem Problem ein grosses Stück weitergekommen.

    Verstehe an nachfolgendem Code leider nicht, warum meine entsprechenden Datensätze nicht in die DB geschrieben werden?

    Wenn ich die DB öffne ist die entsprechende Tabelle leer.


    Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. 'create a connection to the access database
    3. Dim cnstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Bauteillisten_AF.mdb"Dim cn As New OleDb.OleDbConnection(cnstr)
    4. Try
    5. 'try opening a connection
    6. cn.Open()
    7. Catch ex As ExceptionMessageBox.Show("Unable to connect to database")
    8. End Try
    9. Dim Dr As New DataGridViewRow
    10. Dim sql As New OleDb.OleDbCommand("", cn)
    11. 'now loop through the datagridview, and insert them into the database
    12. TryFor Each Dr In Alle_Bauteile_AFDataGridView.Rows
    13. 'If Dr.Cells(0).Value <> Nothing And Dr.Cells(1).Value <> Nothing And Dr.Cells(2).Value <> Nothing And Dr.Cells(3).Value <> Nothing And Dr.Cells(4).Value <> Nothing And Dr.Cells(5).Value <> Nothing And Dr.Cells(6).Value <> Nothing And Dr.Cells(7).Value <> Nothing And Dr.Cells(8).Value <> Nothing And Dr.Cells(9).Value <> Nothing And
    14. If Dr.Cells(10).Value <> Nothing Then
    15. sql.CommandText = "Insert into Bauteilauswahl_user (ID, Kategorie, Rubrik, Materialkurztext, [vorg_ Favorit], [vorg_ A300], [vorg_ A2], Einzelteil, Verpackung, Bemerkung) values ('" & Dr.Cells(0).Value & "','" & Dr.Cells(1).Value & "','" & Dr.Cells(2).Value & "','" & Dr.Cells(3).Value & "','" & Dr.Cells(4).Value & "','" & Dr.Cells(5).Value & "','" & Dr.Cells(6).Value & "','" & Dr.Cells(7).Value & "','" & Dr.Cells(8).Value & "','" & Dr.Cells(9).Value & "');"
    16. ' Debug.Print(sql.CommandText)
    17. sql.ExecuteNonQuery()
    18. End If
    19. NextMessageBox.Show("Daten gespeichert")
    20. Catch ex As Exception
    21. 'Debug.Print(ex.ToString)MessageBox.Show("Fehler!")
    22. End Try
    23. cn.Close()End Sub

    Kann vielleicht noch jemand was dazu sagen?

    Gruß

    Micha
    ahoi,

    ich hab mir mal erlaubt den code leserlich zu machen

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. 'create a connection to the access database
    3. Dim cnstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Bauteillisten_AF.mdb"
    4. Dim cn As New OleDb.OleDbConnection(cnstr)
    5. Try
    6. 'try opening a connection
    7. cn.Open()
    8. Catch ex As Exception
    9. MessageBox.Show("Unable to connect to database")
    10. End Try
    11. Dim Dr As New DataGridViewRow
    12. Dim sql As New OleDb.OleDbCommand("", cn)
    13. 'now loop through the datagridview, and insert them into the database
    14. Try
    15. For Each Dr In Alle_Bauteile_AFDataGridView.Rows
    16. 'If Dr.Cells(0).Value <> Nothing And Dr.Cells(1).Value <> Nothing And Dr.Cells(2).Value <> Nothing And Dr.Cells(3).Value <> Nothing And Dr.Cells(4).Value <> Nothing And Dr.Cells(5).Value <> Nothing And Dr.Cells(6).Value <> Nothing And Dr.Cells(7).Value <> Nothing And Dr.Cells(8).Value <> Nothing And Dr.Cells(9).Value <> Nothing And
    17. If Dr.Cells(10).Value <> Nothing Then
    18. sql.CommandText = "Insert into Bauteilauswahl_user (ID, Kategorie, Rubrik, Materialkurztext, [vorg_ Favorit], [vorg_ A300], " & _
    19. "[vorg_ A2], Einzelteil, Verpackung, Bemerkung) values ('" & Dr.Cells(0).Value & "'," & _
    20. "'" & Dr.Cells(1).Value & "','" & Dr.Cells(2).Value & "','" & Dr.Cells(3).Value & "','" & Dr.Cells(4).Value & "'," & _
    21. "'" & Dr.Cells(5).Value & "','" & Dr.Cells(6).Value & "','" & Dr.Cells(7).Value & "','" & Dr.Cells(8).Value & "','" & Dr.Cells(9).Value & "');"
    22. ' Debug.Print(sql.CommandText)
    23. sql.ExecuteNonQuery()
    24. End If
    25. NextMessageBox.Show("Daten gespeichert")
    26. Catch ex As Exception
    27. 'Debug.Print(ex.ToString)MessageBox.Show("Fehler!")
    28. End Try
    29. cn.Close()
    30. End Sub


    und was du mal versuchen könntest wäre, aus deinen catch zweigen eine systemmeldung zu bekommen also

    VB.NET-Quellcode

    1. try
    2. 'lalala
    3. Catch ex As Exception
    4. MsgBox.show(ex.message & " " & ex.stacktrace)
    5. End Try


    so könntest du vielleicht auch eine ordentliche fehlermeldung angeben und wir könnten dir vielleicht sagen wie die lösung für dein problem wäre
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hallo Manü,

    danke vorab.

    Der Code läuft "leider" ohne Fehlermeldung durch.

    Ich wähle im DGV Datensätze per Checkbox aus und per Button soll dann in eine entsprechende Tabelle geschrieben werden.

    Diese Daten sollen dann in einem anderen Form und dessen DGV angezeigt werden. Das funktioniert auch. Allerdings begreife ich nicht, wo die Daten hingeschrieben werden. Wenn ich das Programm neu starte, sind die vormals ausgewählten Datensätze wieder verschwunden und auch nicht in der DB zu finden (Tabelle leer).



    Gruß



    Micha
    ich glaube das könnte an deiner abfrage liegen

    VB.NET-Quellcode

    1. If Dr.Cells(10).Value <> Nothing Then

    ich nehme einfach mal die nummer 10 ist deine chaeckbox spalte

    der value dieser spalte wird dann sicher immer leer sein
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    also an sich kann ich keinen fehler in dem code finden
    du bist dir sicher das der then-zweig ind einer if abgerufen wird ?
    bist du schon mit brakpoint und einzelschritten durchgegangen ?
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    wie ich schon gesagt hatte der value deiner checkboxzellen ist immer nothing da ja nichts drin steht
    die bessere abfrage währe die checkbox zu fragen ob sie gechecked ist ;)
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    also wenn dann solltest du glaub ich eher

    VB.NET-Quellcode

    1. isNot Nothing
    verwenden
    ansonnsten versuch mal den valule auf true abzufragen
    also

    VB.NET-Quellcode

    1. IF Dr.Rows(10).Value = true
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hallo nochmal,

    ich steh kurz vor Mord. :cursing:

    Select-Anweisungen lassen sich ohne Probleme aus der DB ausführen. Warum aber kann ich nicht insern oder updaten?

    Es gibt keine Fehlermeldung o. ä.

    Syntax habe ich mittlerweile 1000fach gecheckt.

    Noch jemand eine Idee?

    Gruß

    Micha
    Hi Maxwell,

    habe cn.open innerhalb des Try Blocks.

    Habe mal kurzfristig umgebaut, hat aber nichts gebracht.

    Begreife nur nicht, warum nach ausführen der erstellten *.exe, die gewünschten Datensätze in die Access-DB geschrieben werden und innerhalb der Entwicklungsumgebung nicht?!



    Gruß

    Micha