Comment effectuer un update de ma base de donnée suite à une coche d'un checkbox

Signaler
Messages postés
2
Date d'inscription
vendredi 2 juillet 2004
Statut
Membre
Dernière intervention
7 décembre 2020
-
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
-
Bonjour,

je suis débutant en visual basic et depuis plusieurs jours je suis bloqué sur une action qui parait simple mais dont je n'arrive à mettre en oeuvre.

J'utilise un datagridview en relation avec une table de ma base de donnée. J'ai une colonne qui est composée de checkbox.

J'ai réussi à effectuer la mise à jour de la base suite à l'ajout d'une ligne, la modification d'une cellule, mais pour la checkbox je voudrait que la mise à jour s'effectue uniquement par la coche ou décoche sans avoir besoin de valider par "enter".

Là je suis bloqué, je n'arrive pas à effectuer cette mise à jour directement. Si vous avez une piste je suis preneur.

Voici le code que j'utilise en relation avec ma base de donnée locale SQL Server :
Imports System.Data.SqlClient
Public Class Form1
    Dim sCommand As SqlCommand
    Dim sAdapter As SqlDataAdapter
    Dim sBuilder As SqlCommandBuilder
    Dim sDs As DataSet
    Dim sTable As DataTable
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        sAdapter.Update(sTable)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim connectionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\André\source\repos\WindowsApp3\WindowsApp3\bin\Debug\Database1.mdf;Integrated Security=True;Connect Timeout=30"
        Dim sql As String = "SELECT * FROM Stores"
        Dim connection As New SqlConnection(connectionString)
        connection.Open()
        sCommand = New SqlCommand(sql, connection)
        sAdapter = New SqlDataAdapter(sCommand)
        sBuilder = New SqlCommandBuilder(sAdapter)
        sDs = New DataSet()
        sAdapter.Fill(sDs, "Stores")
        sTable = sDs.Tables("Stores")
        connection.Close()
        DataGridView1.DataSource = sDs.Tables("Stores")
    End Sub

    Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
        sAdapter.Update(sTable)
    End Sub

    Private Sub DataGridView1_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
        DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End Sub

    Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
        If e.ColumnIndex = 2 Then
            'Passe bien par  là mais n'effectue pas le update!
            sAdapter.Update(sTable)
            MsgBox("Passage")
        End If

    End Sub

End Class


Je vous remercie par avance pour toutes l'aides que vous prouvez m'apporter.

3 réponses

Messages postés
4
Date d'inscription
dimanche 19 juillet 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Question bête tes Checkbox sont elles cochées en lecture?
Bonjour à tous,
le checkbox passe bien dans le programme! Il est donc fonctionnel.
J'ai trouvé une solution qui me parait relativement propre mais dont je pense qu'il y a mieux.
Mais vu le peut de réponses pour le moment, on va s'en satisfaire faute de mieux.
En déplacement le curseur vers le bas juste avant le update, la mise à jour de la base s'effectue bien. (cela remplace le retour-chariot qui n'est pas utile)
Si vous avez une autre piste, je suis preneur.
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137
Bonjour

A tester

Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
        If e.ColumnIndex = 2 Then
            ' Passe bien par  là mais n'effectue pas le update!
            SendKeys.Send("{ENTER}")  ' Simuler ce retour-chariot ici ainsi l'update se ferait
            sAdapter.Update(sTable)
            MsgBox("Passage")
        End If

    End Sub


Le retour-chariot se fait d'habitude sur quel contrôle ?