Saut de ligne dans un treeview

Résolu
Batou37 Messages postés 4 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 14 juin 2012 - 6 juin 2012 à 15:07
Batou37 Messages postés 4 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 14 juin 2012 - 14 juin 2012 à 11:01
Bonjour à tous !
Premier message sur le forum (je m'excuse d'avance auprès des modérateurs si le sujet n'est pas à sa place, n'hésiter pas le déplacer ;) )

Je vais essayer d'être le plus explicite possible...

J'ai actuellement un treeView alimenter par un fichier XML.


<?xml version "1.0" encoding "UTF-8"?>
<Logiciel SUBJECT="Modulo">
<Version>
<NumVersion>2.8</NumVersion>
<Date>20/06/2016</Date>
<Modif>kikou</Modif>
</Version>
<Version>
<NumVersion>2.6</NumVersion>
<Date> 20/05/2012 </Date>
<Modif xml:space="preserve">-Module x ajoute
                                            -Module y ajouté 
                                            -Module z ajouté 
                </Modif>

</Version>
<Version>
<NumVersion>2.4</NumVersion>
<Date> 15/05/2011 </Date>
<Modif>Module z ajouté</Modif>
</Version>
<Version>
<NumVersion>2.2</NumVersion>
<Date>20/12/2010</Date>
<Modif>Ajout module y</Modif>
</Version>
</Logiciel> 


Comme vous pouvez le remarquer, pour la version 2.6, j'ai plusieurs modification, distingué par un trait d'union et un saut de ligne.

Sachant que le XML est un langage de "lecture" et non de présentation, j'aimerais savoir si il était possible que le Treeview interprète ces sauts de lignes avec du code.


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        'On déclare une variable de type docuement
        Dim doc As XmlDocument = New Xml.XmlDocument
        'On déclare un noeud, qui nous permettra d'identifier les noeuds dans le fichier XML
        Dim noeud As XmlNode
        Dim noeud1 As XmlNode
        Dim e2 As String
        e2 = Replace(e2, vbCrLf, " ")
        e2 = Replace(e2, vbLf, " ")
        e2 = Replace(e2, vbCr, " ")

        'On charge le docuement XML
        doc.Load("C:\Users\04\Desktop\Stage\test\test.xml")

        'On déclare deux liste, qui nous permettra de parcourir l'ensemble des noeuds contenu dans le fichier XML
        Dim element As XmlNodeList
        Dim liste As XmlNodeList
        Dim i As Integer = 0
        Dim nomParent As String = ""



        'On initialise le Treeview
        TreeView1.Nodes.Clear()

        TreeView1.BeginUpdate()

        'On stocke tous les noeuds enfant dans la liste element
        element = doc.DocumentElement.ChildNodes
        'On stocke l'ensemble des noeuds enfant qui nous interesse par rapport a un noeud
        liste = doc.DocumentElement.GetElementsByTagName("Logiciel")
        'On ajoute le premier élement de notre treeView
        TreeView1.TopNode = TreeView1.Nodes.Add("Logiciel")
        TreeView1.Nodes(0).Nodes.Add("Version")


        For Each noeud In element
            If noeud.Name = "Version" Then
                TreeView1.Nodes(0).Nodes(0).Nodes.Add(noeud.ChildNodes(0).InnerText).Nodes.Add(noeud.ChildNodes(1).InnerText)
                TreeView1.Nodes(0).Nodes(0).Nodes(i).Nodes.Add(noeud.ChildNodes(2).InnerText)
                i = i + 1
            End If

        Next
        TreeView1.EndUpdate()
    End Sub


Bien évidemment, si je suis venu la c'est ce que j'ai essayer à résoudre ce problème. Voici un extrait de la dernière chose que j'ai essayer, plus par désespoir qu'autre chose...

<Modif xml:space="preserve">Module x ajoute \n -Module y ajouté \n Module z ajouté </Modif>


doc.InnerText.Replace("\n", vbCrLf
)

En vous remerciant d'avance

5 réponses

Utilisateur anonyme
7 juin 2012 à 01:29
Bonjour,

j'aimerais savoir si il était possible que le Treeview interprète ces sauts de lignes avec du code
Ceci n'est pas très clair.

Pourquoi ne pas utiliser un caractère rarement utilisé dans ton xml (comme un | par exemple) ?
A la lecture de ton xml, tu fais un test systématique sur chaque élément avec un Split.
dim montableau() as string = noeud.ChildNodes(2).InnerText.split("|"c)

Si la longueur du tableau obtenu est supérieur à 1, ton treeview saura qu'il doit insérer un saut de ligne. Les valeurs à ajouter étant contenues dans ce tableau. Dans le cas contraire, il suffit d'ignorer le test en question.
3
Batou37 Messages postés 4 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 14 juin 2012
7 juin 2012 à 10:10
Merci pour la rapidité de votre réponse "banana32"
Je doit vous avouer que c'est la première fois que je réalise un TreeView et que je n'avais pas penser a cette solution...
La variable "montableau" comprend les sauts de lignes, il ne me reste plus qu'a les afficher dans mon TreeView, j'essaye sans réussite pour l'instant ! Mais je préfère encore chercher avant de refaire appel a vous, sinon il n'y aurait aucun intérêt à codé !
Encore merci, et je valide comme "Réponse acceptée" !!!
0
Batou37 Messages postés 4 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 14 juin 2012
7 juin 2012 à 11:56
Bon après une bonne heure de réflexion et d'essai, le résultat me convient amplement !
Je met mon code a disposition pour ceux qui veulent ;)

<?xml version "1.0" encoding "UTF-8"?>
<Logiciel SUBJECT="Modulo">
<Version>
<NumVersion>2.8</NumVersion>
<Date>20/06/2016</Date>
<Modif>kikou | lol | kkkkiiiii</Modif>
</Version>
<Version>
<NumVersion>2.6</NumVersion>
<Date> 20/05/2012 </Date>
<Modif xml:space="preserve">Module x ajoute | -Module y ajouté | Module p ajouté | AHAHAHAH </Modif>
</Version>
<Version>
<NumVersion>2.4</NumVersion>
<Date> 15/05/2011 </Date>
<Modif>Module z ajouté</Modif>
</Version>
<Version>
<NumVersion>2.2</NumVersion>
<Date>20/12/2010</Date>
<Modif>Ajout module y</Modif>
</Version>
</Logiciel> 


'On déclare une variable de type docuement
        Dim doc As XmlDocument = New Xml.XmlDocument
        'On déclare un noeud, qui nous permettra d'identifier les noeuds dans le fichier XML
        Dim noeud As XmlNode


        'On charge le docuement XML
        doc.Load("C:\Users\04\Desktop\Stage\test\test.xml")

        'On déclare deux liste, qui nous permettra de parcourir l'ensemble des noeuds contenu dans le fichier XML
        Dim element As XmlNodeList
        Dim liste As XmlNodeList
        Dim i As Integer = 0
        Dim y As Integer = 0
        Dim nomParent As String = ""



        'On initialise le Treeview
        TreeView1.Nodes.Clear()

        TreeView1.BeginUpdate()

        'On stocke tous les noeuds enfant dans la liste element
        element = doc.DocumentElement.ChildNodes
        'On stocke l'ensemble des noeuds enfant qui nous interesse par rapport a un noeud
        liste = doc.DocumentElement.GetElementsByTagName("Logiciel")
        'On ajoute le premier élement de notre treeView
        TreeView1.TopNode = TreeView1.Nodes.Add("Logiciel")
        TreeView1.Nodes(0).Nodes.Add("Version")


        For Each noeud In element
            If noeud.Name = "Version" Then
                'On stocke chaque valeur séparé de "|" dans un tableau
                Dim montableau() As String = noeud.ChildNodes(2).InnerText.Split("|"c)
                If montableau.Length > 1 Then
                    TreeView1.Nodes(0).Nodes(0).Nodes.Add(noeud.ChildNodes(0).InnerText).Nodes.Add(noeud.ChildNodes(1).InnerText)
                    TreeView1.Nodes(0).Nodes(0).Nodes(i).Nodes.Add(montableau(y))
                    y = y + 1

                    While montableau.Length <> y

                        TreeView1.Nodes(0).Nodes(0).Nodes(i).Nodes.Add(montableau(y))
                        y = y + 1

                    End While

                Else
                    TreeView1.Nodes(0).Nodes(0).Nodes.Add(noeud.ChildNodes(0).InnerText).Nodes.Add(noeud.ChildNodes(1).InnerText)
                    TreeView1.Nodes(0).Nodes(0).Nodes(i).Nodes.Add(noeud.ChildNodes(2).InnerText)
                End If
                i = i + 1
            End If
            y = 0
        Next
        TreeView1.EndUpdate()


Si vous avez des solutions plus simple, n'hésiter pas a partagé ! ;)

PS: Encore merci Banana32 ;)
0
Utilisateur anonyme
7 juin 2012 à 13:53
Bonjour,

Puisque montableau contient un élément unique ou plusieurs, il te suffisait, pour supprimer quelques lignes de code, de faire une boucle for each/next du style :

Dim montableau() As String = noeud.ChildNodes(2).InnerText.Split("|"c)
for each element as string in montableau
  TreeView1.Nodes(0).Nodes(0).Nodes(i).Nodes.Add(element)
next


A adapter à ton cas bien entendu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Batou37 Messages postés 4 Date d'inscription lundi 4 juin 2012 Statut Membre Dernière intervention 14 juin 2012
14 juin 2012 à 11:01
Encore merci banana32 ;)
Je doit t'avouer que je n'ai pas encore tester, car je suis sur autre chose la ;)
Mais des que j'ai un peu de temps, je donne un coup d'oeil !
0
Rejoignez-nous