Bonjour,

J'ai un treeview que j'ai rempli à partir de ma base de données, mais la méthode que j'ai utilisé est nulle, vous allez tout de suite remarqué que c'est fais par un débutant, donc ce que je cherche c'est une méthode plus efficace, pour remplir treeview à partir de la base de données et aussi enregistrer les données de ce dernier dans la base de données.

Voila mon code :


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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
 
Imports MySql.Data.MySqlClient
 
 
Public Class FrmUser
    Dim MyCmd As MySqlCommand
    Dim MyDr As MySqlDataReader
    Dim Requette As String
    Dim z1, z2, z3, z4, z5, z6, z7, z8, z9 As String
    Dim doneByDoubleClick As Boolean = False
 
    Private Sub FrmUser_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            Requette = "select distinct nom from usertable where noeud<>'x' order by nom"
            MyCmd = New MySqlCommand(Requette, MyDb)
            MyDr = MyCmd.ExecuteReader
            While MyDr.Read()
                List1.Items.Add(MyDr.GetValue(0).ToString())
            End While
            MyDr.Close()
 
            RemplirTreeView()
 
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
 
    Private Sub List1_Click(sender As Object, e As EventArgs) Handles List1.SelectedIndexChanged
        TxtUser.Text = List1.SelectedItem
        TxtUser.Enabled = False
        RemplirTreeView()
    End Sub
    Private Sub RemplirTreeView()
        Try
            TreeView1.Nodes.Clear()
            If TxtUser.Text = "" And TxtPwd.Text = "" Then Exit Sub
            TxtPwd.Text = ""
            Requette = "select distinct pass from usertable where  nom='" & TxtUser.Text & "' and app='" & My.Application.Info.AssemblyName & "' and autoris<>3"
            MyCmd = New MySqlCommand(Requette, MyDb)
            MyDr = MyCmd.ExecuteReader
            While MyDr.Read()
                TxtPwd.Text = MyDr.GetValue(0).ToString()
            End While
            MyDr.Close()
 
            Requette = "select * from usertable where app='" & My.Application.Info.AssemblyName & "' and nom='" & TxtUser.Text & "' order by cle"
            MyCmd = New MySqlCommand(Requette, MyDb)
            MyDr = MyCmd.ExecuteReader
            Dim hasRows As Integer = MyDr.HasRows
                While MyDr.Read()
                    Dim wCle As String = MyDr.GetValue(4).ToString()
                    Dim wCaption As String = MyDr.GetValue(6).ToString()
                    Dim wAutoris As Integer = MyDr.GetValue(5) - 1
                    z1 = wCle.Substring(0, 2)
                    With TreeView1
                        If wCle.Length = 2 Then
                            .Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 3 Then
                            .Nodes(z1).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 4 Then
                            z2 = wCle.Substring(0, 3)
                            .Nodes(z1).Nodes(z2).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 5 Then
                            z3 = wCle.Substring(0, 4)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 6 Then
                            z4 = wCle.Substring(0, 5)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes(z4).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 7 Then
                            z5 = wCle.Substring(0, 6)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes(z4).Nodes(z5).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 8 Then
                            z6 = wCle.Substring(0, 7)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes(z4).Nodes(z5).Nodes(z6).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 9 Then
                            z7 = wCle.Substring(0, 8)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes(z4).Nodes(z5).Nodes(z6).Nodes(z7).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 10 Then
                            z8 = wCle.Substring(0, 9)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes(z4).Nodes(z5).Nodes(z6).Nodes(z7).Nodes(z8).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        ElseIf wCle.Length = 10 Then
                            z9 = wCle.Substring(0, 10)
                            .Nodes(z1).Nodes(z2).Nodes(z3).Nodes(z4).Nodes(z5).Nodes(z6).Nodes(z7).Nodes(z8).Nodes(z9).Nodes.Add(wCle, wCaption, wAutoris, wAutoris)
                        End If
                    End With
                End While
 
            MyDr.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
 
    Private Sub TreeView1_NodeMouseDoubleClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseDoubleClick
        doneByDoubleClick = True
        Dim i As Integer = TreeView1.SelectedNode.SelectedImageIndex
        i = i + 1
        If i > 2 Then i = 0
        TreeView1.SelectedNode.SelectedImageIndex = i
        TreeView1.SelectedNode.ImageIndex = i
        Dim myNode As TreeNode = e.Node
        'MessageBox.Show(myNode.Text)
        GetChildNodes(myNode, i)
 
    End Sub
 
    Sub GetChildNodes(tnode As TreeNode, i As Integer)
 
        For Each node As TreeNode In tnode.Nodes
            node.ImageIndex = i
            If tnode.Nodes.Count > 0 Then GetChildNodes(node, i)
        Next
 
    End Sub
 
    Private Sub TreeView1_BeforeCollapse(sender As Object, e As TreeViewCancelEventArgs) Handles TreeView1.BeforeCollapse, TreeView1.BeforeExpand
        If doneByDoubleClick Then
            e.Cancel = True
            doneByDoubleClick = False
        End If
    End Sub
 
    Private Sub TreeView1_BeforeExpand(sender As Object, e As TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
        If doneByDoubleClick Then
            e.Cancel = True
            doneByDoubleClick = False
        End If
    End Sub
    Private Sub BtnEnregistrer_Click(sender As Object, e As EventArgs) Handles BtnEnregistrer.Click
 
        If TxtUser.Text = "" Then Exit Sub
 
        Requette = "delete from usertable where app='" & My.Application.Info.AssemblyName & "' and nom='" & TxtUser.Text & "'"
        MyCmd = New MySqlCommand(Requette, MyDb)
        MyDr = MyCmd.ExecuteReader
        MyDr.Close()
 
        For Each node1 As TreeNode In TreeView1.Nodes
            'requete pour enregister les données du parents
            For Each node2 As TreeNode In node1.Nodes
                'requete pour enregister les données du 1er enfants 
                For Each node3 As TreeNode In node2.Nodes
                     'requete pour enregister les données du 2eme enfants
                    For Each node4 As TreeNode In node3.Nodes
                        ' ...
                        For Each node5 As TreeNode In node4.Nodes
                            ' ...
                            For Each node6 As TreeNode In node5.Nodes
                                ' ...
                                For Each node7 As TreeNode In node6.Nodes
                                    ' ...
                                    For Each node8 As TreeNode In node7.Nodes
                                        ' ...
                                        For Each node9 As TreeNode In node8.Nodes
                                            ' ...
                                        Next
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
 
    End Sub
 
End Class

Merci d'avance