Saut de ligne dans un treeview [Résolu]

Batou37 4 Messages postés lundi 4 juin 2012Date d'inscription 14 juin 2012 Dernière intervention - 6 juin 2012 à 15:07 - Dernière réponse : Batou37 4 Messages postés lundi 4 juin 2012Date d'inscription 14 juin 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Utilisateur anonyme - 7 juin 2012 à 01:29
3
Merci
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.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Batou37 4 Messages postés lundi 4 juin 2012Date d'inscription 14 juin 2012 Dernière intervention - 7 juin 2012 à 10:10
0
Merci
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" !!!
Commenter la réponse de Batou37
Batou37 4 Messages postés lundi 4 juin 2012Date d'inscription 14 juin 2012 Dernière intervention - 7 juin 2012 à 11:56
0
Merci
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 ;)
Commenter la réponse de Batou37
Utilisateur anonyme - 7 juin 2012 à 13:53
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Batou37 4 Messages postés lundi 4 juin 2012Date d'inscription 14 juin 2012 Dernière intervention - 14 juin 2012 à 11:01
0
Merci
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 !
Commenter la réponse de Batou37

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.