Bonjour à tous,

Je fais appel à vous encore une fois car je suis totalement perdu.

Je m'explique, j'ai une base de données et je voudrais charger une table sous forme de treeview en ADO. Mais ça coince ! Je n'y arrive pas du tout.

Voici ma table au format access:

IdCategorie (numérique)
NomCategorie (texte)
AnnotationCategorie (memo)
ParentCategorie (numérique) 'indique l'Id de la catégorie Parent (-1 si pas de parent)
NiveauCategorie (numérique) 'indique le niveau (1 puis 2 puis 3....)

J'ai commencé à coder ça mais je ne sais pas comment m'y prendre. La récursivité et moi ça fait 2 on dirait

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
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Dim NiveauMaximum As Integer
 
        'connexion à la base de données
        db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\Database\documentalis.mdb" & ";User Id=admin;Password=;"
        db.Open()
 
        rs.Open("SELECT NiveauCategorie FROM T_Categorie", db, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
        NiveauMaximum = 0
        While Not rs.EOF
            If (NiveauMaximum < rs.Fields(0).Value) Then NiveauMaximum = rs.Fields(0).Value
            rs.MoveNext()
        End While
        'NiveauMaximum contient le plus grand niveau
        rs.Close()
 
        rs.Open("SELECT * FROM T_Categorie WHERE NiveauCategorie=1", db, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
 
        Dim tvRoot As TreeNode
        Dim tvNode As TreeNode
        Dim strNomCategorie As String = ""
        Dim intIdCategorie As Integer
 
 
        tvRoot = Me.TreeView1.Nodes.Add("Catégories")
 
        While Not rs.EOF
            'chargement des catégories
            intIdCategorie = rs.Fields(0).Value 'récup de l'id de la catégorie
            strNomCategorie = rs.Fields(1).Value 'récup du nom de la catégorie
            tvNode = tvRoot.Nodes.Add(strNomCategorie) 'Ajout du nom de la catégorie
 
            For i = 2 To NiveauMaximum
 
                rs2.Open("SELECT * FROM T_Categorie WHERE NiveauCategorie=" & i & " AND ParentCategorie=" & intIdCategorie, db, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
 
 
                rs2.Close()
            Next
 
            rs.MoveNext() 'on passe à l'enregistrement suivant
        End While
 
        rs.Close()
 
 
    End Sub
Merci beaucoup pour votre aide

Ludo