Comment cocher par code des checkbox dans un datagridview
Bonjour je suis passé récemment de Access à VB.net et SQL server
Dans mon formulaire, j'ai une ListeBox nommée LstDefaut qui contient une liste de défaut liée à la TB_DEFAUT. À coté j'ai une datagridview DgElemn qui n'est pas reliée directement è la base de donnée, cette liste comporte une colonne checkbox nommée chk. le remplissage de ces contrôles ne pose pas de problème sauf pour la case a cochér.
Le rôle de cette case est d'indiquer si le défaut sélectionné dans la LstDefaut peut être associé à l'élément. Par exemple un boulon manquant ne peut pas être associé à la fondation ou au remblai donc la case n'est pas cochée.
Quand on coche un élément, un enregistrement est inscrit dans la table TB_DEFAUT_CLASS_ELEMN qui comprend 2 champs NO_DEFAUT et IDE_CLASS_ELEMN
https://www.developpez.net/forums/im...AAAElFTkSuQmCC
Mon problème survient quand je veux que les cases soient mises à jour au changement de sélection du défaut et au chargement du formulaire. La seule case qui est cochée est celle au dernier passage de la boucle.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| Sub CocherElemn() 'Coche les éléments visés par le défaut sélectionné
sSql = "Select NO_DEFAUT, IDE_CLASS_ELEMN" _
& " From TB_DEFAUT_CLASS_ELEMN" _
& " Where NO_DEFAUT =" & LstDefaut.SelectedValue & ";"
Flag = True
Using connection = New SqlConnection(CONSTR)
connection.Open()
Using comm As SqlCommand = New SqlCommand(sSql, connection)
Dim rs As SqlDataReader = comm.ExecuteReader
' Décoche toutes les cases avant la mise a jour
With DgElemn
For i As Integer = 0 To .Rows.Count - 1
.Rows(i).Cells(1).Value = False
.Rows(i).Cells(1).Style.BackColor = Color.White
Next
'Vérifie chaque ligne de la table TB_DEFAUT_CLASS_ELEMN
While rs.Read()
For i As Integer = 0 To .Rows.Count - 1
'Passe chaque élément de DgElemn
.Rows(i).Cells(1).Selected = True
If .Rows(i).Cells(0).Value = rs(1) Then
'Coche si LstDefaut.IDE_CLASS_ELEMN= DgElemn.IDE_CLASS_ELEMN
.Rows(i).Cells(1).Value = True
Debug.Print(.Rows(i).Cells(2).Value)
Else
.Rows(i).Cells(1).Value = False
End If
Next
End While
.ClearSelection()
End With
End Using
End Using
Flag = False
End Sub
Sub AjouterLien(cl As Integer)
sSql = "INSERT INTO [dbo].[TB_DEFAUT_CLASS_ELEMN]" _
& " ([NO_DEFAUT] ,[IDE_CLASS_ELEMN])" _
& " VALUES (" & LstDefaut.SelectedValue & ", " & cl & ");"
Using connection = New SqlConnection(CONSTR)
connection.Open()
Using comm As SqlCommand = New SqlCommand(sSql, connection)
comm.ExecuteNonQuery()
End Using
End Using
End Sub
Sub RetirerLien(cl As Integer)
sSql = "DELETE FROM [dbo].[TB_DEFAUT_CLASS_ELEMN]" _
& " WHERE NO_DEFAUT=" & LstDefaut.SelectedValue & "[IDE_CLASS_ELEMN] =" & cl & ";"
Using connection = New SqlConnection(CONSTR)
connection.Open()
Using comm As SqlCommand = New SqlCommand(sSql, connection)
comm.ExecuteNonQuery()
End Using
End Using
End Sub |
Merci pour votre support.
Ca marche pas tout a fait
Merci pour ce bout de code, ta procédure fonctionne bien telle quelle toutes les cases se cochent. je travaille a l'intégrer dans mon projet mais ca ne va pas comme sur des roulettes . Je n'ai pas compris la différence entre
Code:
DG.rows(i).cells(1).value versus DG.item(i,1).value
je vous reviens avec la suite.8O