Comment effectuer un update de ma base de donnée suite à une coche d'un checkbox
dead man
Messages postés2Date d'inscriptionvendredi 2 juillet 2004StatutMembreDernière intervention 7 décembre 2020
-
7 déc. 2020 à 16:36
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023
-
13 déc. 2020 à 17:41
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.
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.
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié le 13 déc. 2020 à 18:05
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 ?