IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[treeview] node capricieuse


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut [treeview] node capricieuse
    bonjour,

    j'ai une appli asp.net avec un treeview, et j'aimerais savoir s'il est possible d'avoir le treeview déplié au noeud que l'on veut voir lorsqu'on revient d'une autre page et qu'on recoit en get, l'id du noeud et autres informations s'il le faut.


    j'ai essayé le bout de code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Request.QueryString("query") = 1 Then
     
           e.Node.Value = Request.QueryString("idprojet")
           e.Node.Text = Request.QueryString("nomprojet")
           e.Node.Selected = True
           e.Node.SelectAction = TreeNodeSelectAction.Expand
     
    End If
    mais ca ne marche pas du tout...
    Si quelqu'un avait une idée...pourrait-il m'enf aire part SVP???

    Merci d'avance!

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    mets le viewstate à True sur ton TreeView, il devrait conserver l'état du treeview même aprés un changement de page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:TreeView id="MonTreeView" runat="server" enableViewState="true"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    effectivement c'était une bonne idée mais ca ne marche pas...pour l'instant!

    je vais m'y pencher voir s'il n'y a pas quelque-chose à exploiter là dessus!

    Mais merci quand même.

  4. #4
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par défaut
    Salut,

    Suis pas sur mais je crois que tu dois à partir de l'id de ton noeud récupérer le chemin complet et déplier chaque noeud jusqu'à celui souhaité.

    A voir...

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    C'est bizarre parce que je développe en ce moment un site dans lequel j'ai 5 ou 6 treeview.
    Je les construit donc dynamiquement, défini les noeuds sur collapse ou expand a la construction, et avec le viewstate a true je conserve l'etat de page en page

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    Citation Envoyé par calagan99
    C'est bizarre parce que je développe en ce moment un site dans lequel j'ai 5 ou 6 treeview.
    Je les construit donc dynamiquement, défini les noeuds sur collapse ou expand a la construction, et avec le viewstate a true je conserve l'etat de page en page
    cmt se présente ton code? parce que moi je le recharge a chq fois qu'on revient sur cette page là. du coup j'ai essayé de faire un if not ispostback pour ne faire qu'un chargement et j'ai mis le viewstate a true mais ca change rien. il revient toujours comme à l'initialisation...

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Et bien,

    pour ce qui est du code, voici ma methode de peuplement des noeuds de premier niveau:
    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
      Sub PopulatePremierNiveau(ByVal MyNodeBase As TreeNode)
            Dim ResultSet As DataSet = RunQuery(String.Format("Select ID, TEXT, ORDRE, POL_IDPARENT " _
            & " From T_TABLE " _
            & " WHERE IDPARENT is null " _
            & " ORDER BY ORDRE")
            'Création des noeuds avec IDPARENT=null 
            If ResultSet.Tables.Count > 0 Then
                'Parcours des colonnes du Dataset
                Dim row As Data.DataRow
                For Each row In ResultSet.Tables(0).Rows
                    'Création d'un Treenode et stockage de ID en value pour réutlisation avec noeuds enfants
                    Dim MyNewNode As TreeNode = New TreeNode((row("ORDRE").ToString) & ". " &(row(String.Format("TEXT").ToString()), row("ID").ToString())
                    'PopulateOnDemand à True pour remplissage dynamique du noeud
                    MyNewNode.PopulateOnDemand = True
                    ' Ajout du nouveau noeud à la collection de noeuds enfants du noeud parents
                    MyNodeBase.ChildNodes.Add(MyNewNode)
                    'Collapse sur ces noeuds dés la création
                    MyNodeBase.Collapse
                Next
            End If
        End Sub
    et pour appeller cette méthode (et une methode quasi identique de peuplement des noeuds de sous niveau) j'ai un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OnTreeNodePopulate="PopulatePremierNiveau"
    dans le définition de mon treeview.

    C'est ce que j'ai trouvé de mieux pour les arborescences.

    Pour les treeviews qui ne consistent qu'en des menus sans enfants, mon viewstate est a true, je teste si if not ispostback alors je charge mon treeview.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    oui bah la manière pour peupler mon treeview est la même mais ca ne marche pas. Comme tu dis, bizarre!

    ce qui est bizarre aussi c'est que j'ai mis mon viewstate a true dans mon treeview mais lui ne garde rien en mémoire lors de changement de pages mais les label si. ca ne s'applique pas que au webcontrol où l'on a ajouté le enableviewstate?

  9. #9
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Si, mais la valeur pas défaut est à true, il est donc normal que tes labels conservent leurs données.

    Pour moi, tu dois avoir un collapse dans une boucle, ou vraiment pas de chance

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    c'est certainement une question bête, mais est-ce que toi tu fais des response.redirect quand tu dis que tu retournes sur tes pages précédentes où se trouvent tes treeviews et qu'ils restent dans leur état normal?

  11. #11
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    non, rien du tout, un simple clic sur precedent et ca fonctionne.

  12. #12
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par défaut
    lol !

    C'est normal que tu ne garde pas en mémoire si tu fais des redirect. Le principe du viewstate, c'est un champ caché ou toutes les données du formulaire sont stockées sérialisées. Donc quand tu fais un lien simple ou un redirect bah tu post pas les données. Donc c'est comme si tu affichais ta page pour la première fois...

    Donc plusieurs solutions :
    - tu fais des linkbuttons pour faire un submit en boucle sur tout ton site
    - tu fais des liens en passant des paramètres en GET dans ton url et dans ce cas tu sera obligé de passer par un mécanisme pour redéplier ton arbre.
    - tu fais toujours des liens et tu stockes en session les paramètres qui permettent de redéplier ton arbre.

    Je me demande si tu peux pas récupérer et passer le viewstate par un paramètre GET, le désérialiser, et utiliser les infos pour remettre ta page comme tu le sens... ???

    Tchuss

    L.

  13. #13
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 110
    Par défaut
    Autre chose, as tu essayé le server.Transfer au lieu du response.redirect ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    nan je vais essayer, je vous tiens au courant!

    en tout cas merci pour ses réponses, je pense que ca va m'aider...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    pour l'instant, j'ai juste essayé le server.transfer en m'y documentant vite fait.

    ca a l'air d'une fonction très intéressante mais là mon problème est que lorsque j'exécute mon server.transfer pour revenir sur ma page principale, il me retire toutes mes div et tout mon css!!

    Vous avez une explication? Une solution pour le contourner?

    Merci.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    je suis sur une piste pour garder mon treeview déplié mais il me reste juste un problème je pense :

    j'ai donc fait comme avait proposé lolo007 et comme je fais depuis le départ en fait, sur une session, je fais des liens en passant mes parametres en get et je développe ensuite mon mécanisme pour le déplier a l'aide de récursivité

    donc j'arrive à déplier le dernier noeud qui a été déplié auparavant mais j'aimerais savoir comment agir sur le pere du noeud. j'arrive a récupérer sa valeur, son texte ou nimporte quoi mais je n'arrive pas a prendre le noeud meme...y a -t-il un attribut qui permet de savoir directement qui est le pere du noeud en question et pouvoir le contrôler pour ainsi le déplier comme je le souhaiterais?

    en gros je voudrais savoir s'il y a un équivalent a ca : node = node.parent et ici node deviendrait le pere de lui-meme...

    je ne sais pas si je suis assez claire lol. mais quelqu'un qui m'a compris aurait-il une idée ?? Merci.

  17. #17
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tu peux recuperer le noeud parent d'un noeud enfant grace au valuePath.
    Il va en fait te ressortir toute l'arborescence dont decoule un noeud enfant.
    EX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Noeud niveau 1  --> id=4
    Noeud niveau 2   -->id=6
    Noeud niveau 3   -->id=1
    avec le valuePath, tu vas remonter la chaine :4/6/1

    En esperant que cela t'aide

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Par défaut
    nan en fait meme pas bbesoin, j'ai été un peu bete sur ce coup la, il me semblait deja avoir regardé pourtant, mais je n'avais pas vu que l'attribut "parent" existe vraiment pour un type treenode...

    du coup c'est bon ca marche !!!
    mon treeview reste comme il est avec des response.redirect!

    voila comment j'ai procédé :
    lors de la construction de mon treeview, j'effectue un test supplémentaire (j'ai mis en get une variable a 1 lors d'un retour sur la page de mon treeview). je déclare un treenode qui prend la valeur de l'id_noeud où je veux revenir et je le compare avec mon noeud que je suis en train de créer lorsque j'ajoute mes noeuds enfants lors du chargement du treeview. s'ils sont égaux, alors j'appelle une fonction qui va se charger de déplier le noeud courant et tous ses noeuds père jusqu'à la racine par récursivité. et voilà le tour est joué. une bonne requete et un node.expand(), c'est tout ce qu'il suffit pour cette fonction.

    si vous voulez plus d'explications, n'hésitez pas, je vous répondrai aussitôt que possible

    --------------
    RESOLU
    --------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Treeview : node avec et sans image
    Par Champouil dans le forum C#
    Réponses: 2
    Dernier message: 30/04/2010, 09h00
  2. treeview node et rendu runtime d'une icone
    Par Vld44 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/05/2009, 15h37
  3. [VB6] Treeview: nombre de node?
    Par gg78 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/11/2004, 10h42
  4. Colorer le texte d'une node d'un treeView
    Par SBP dans le forum MFC
    Réponses: 3
    Dernier message: 28/10/2004, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo