Bonsoir,
je rencontre un problème avec datagridview.Rows.clear() (Frameworkk .Net 3.5) que je n'arrive pas à solutioner.
Je dispose d'un treeview que je charge à l'aide d'un fichier. Dès que je clique sur un bouton "tester" je parcours chaque noeux du treeview et j'ajoute une ligne au tableau. Donc si j'ai "12 noeux" au treeview je dois avoir 12 lignes au tableau.
Treeview :
nodes(0)
nodes(0).nodes(0)
nodes(0).nodes(1)
....
nodes(0).nodes(11)
Salle_A
|______ Ordinateur_1
|______ Ordinateur_2
|______ Ordinateur_3
|______ Ordinateur_12
J'obtiens le résultat souhaité. Sauf que je suis confronté à un comportement aléatoire. Je m'explique, si je clique 8 fois sur le bouton "tester", le tableau me charge correctement les 12 lignes correspondantes au 12 noeux du treeview. Au 9è click ou 10è (celà peux être plus ou moins de fois), le tableau affiche les 12 lignes correctement et y ajoute à nouveau ces 12 même lignes. Je ne comprend pas pourquois.
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 Private Sub btn_tester_Click() load_tv() check_ordi() End Sub Private Sub check_ordi() If dgv.Rows.Count = 0 Then Dim i As Integer = 0 While i < tv.Nodes(0).Nodes.Count //appel de la fonction pour ajouter une ligne au tableau i += 1 End While Else dgv.Rows.clear() check_ordi() End if End Sub
Pour comprendre le problème j'affiche la valeur de i dans un label. Je peux donc constater son incrémentation. Par exemple, je clique 8 fois sur le bouton "tester", i s'incrémente bien de 0 à 11 (11 étant toujours le maximun). Au neuvième click, i passe de 0 à 11 puis est réinitialisé à 0 à ce moment là, le programme àjoute donc 12 nouvelles lignes au tableau et je me retrouve donc avec 2 fois 12 lignes.
Je ne comprend pas à quel moment i est réinitialisé à 0 alors que j'atteinds tv.Nodes(0).Nodes.Count.
Code complet :
Note Lorsque je teste Me.isLocal = False.
Je vous remercie d'avance pour votre aide!
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 Private Sub check_ordi() Dim i As Integer = 0 If dgv.Rows.Count = 0 Then While i < tv.Nodes(0).Nodes.Count lbl_count.Text = i If is_online(tv.Nodes(0).Nodes(i).Name) Then If Me.isLocal Then run_process(Me.tv.Nodes(0).Nodes(i).Name) import_csv() Me.load_gdv() Else dgv_ordi(Me.tv.Nodes(0).Nodes(i).Name, i) End If tv.Nodes(0).Nodes(i).BackColor = Color.GreenYellow dgv.Rows(i).DefaultCellStyle.BackColor = Color.GreenYellow Else dgv_ordi(Me.tv.Nodes(0).Nodes(i).Name, i) tv.Nodes(0).Nodes(i).BackColor = Color.LemonChiffon dgv.Rows(i).DefaultCellStyle.BackColor = Color.LemonChiffon End If Application.DoEvents() i += 1 End While Else dgv.Rows.Clear() Me.check_ordi() End If End Sub ' cette procédure va ajouter seulement une ligne au tableau : ' je regarde la valeur du noeux (Nodes(0).Nodes(i).Name) ' et lance une recherche dans un dictionaire contenant une liste ' d'ordinateur chargés à partir d'un fichier Private Sub dgv_ordi(ByVal Ordip As String, ByVal i As Integer) Dim nom, ip, mac as String ip="" mac="" nom="" For Each kpv As KeyValuePair(Of String, Dictionary(Of String, String)) In Me.dicOrdi If kpv.Key = Ordip Then For Each k As KeyValuePair(Of String, String) In kpv.Value Select Case k.Key Case "nom" nom= k.Value Case "ip" ip = k.Value Case "mac" mac = k.Value End Select Next Dim line = New String() {"text", "text", "text", "text", nom, ip, mac, "text"} dgv.Rows.Add(line) End If Next End Sub
Partager