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
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:Merci pour votre support.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager