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 :

Probleme de Binding avec un Treeview


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Probleme de Binding avec un Treeview
    Bonjours,
    D'avance pardon, j'ai peu d'experience en C#...

    Je souhaite developper un site avec a gauche une arborescence (un treeview dans ce cas) qui me permette d'affiner le resultat d'une recherche affiché a gauche. Concretement, au chargement de la page, tout les documents cntenus dans l'arbre sont affichés (sur plusieurs pages evidement) et disparaitront au fur et a mesur que l'utilisateur se deplace dans l'arbre (toujours en suivant le chemin du dernier noeud selectionné).

    Alors voila, j'ai bindé un TreeView avec un Objet implementant IHierarchyData qui me permet de recuperer une hierarchie depuis une base de donnée. Jusque la tout va bien, le TreeView affiche bel et bien l'abre de la base avec la bonne hierarchie.

    Cependant, pour recuperer les documents dans la base de donnée, j'ai besoin de recupérer des informations concernant le noeud en question pour retrouver tout ses documents fils. Seulement la propriété DataItem des TreeNode de mon arbre est toujours Null...

    J'avai pensé que celle ci recevait la propriété Item de mon objet lors du Binding mais il faut croire que non... Je suppose donc avoir oublié quelquechose en implementant l'interface mais je ne trouve pas quoi.

    Voici le code de mon IHierarchyData :
    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
     
    public class                            NodeHierarchyData: IHierarchyData
        {
            private MyTreeKey               _nod; //Contient les données du noeud
            private SqlConnection           _sqlCon;
     
            public                            ItvNod(MyTreeKey          nod,
                                                     SqlConnection      sqlCon)
            {
                _sqlCon = sqlCon;
                _nod = nod;
            }
     
            public IHierarchicalEnumerable GetChildren()
            {
                if (_nod.Hb == (_nod.Lb + 1))
                    return (null);
                else
                    return (new MyTreeHierarchy(_sqlCon, _nod));
            }
     
            public IHierarchyData           GetParent()
            {
                  // Je me permet de racourcir un peu la citation, si ce code est               
                  // necessaire je le reposterait
            }
     
            public bool                     HasChildren
            {
                get
                {
                    if (_nod.Hb == (_nod.Lb + 1))
                        return (false);
                    else
                        return (true);
                }
            }
     
            public object                   Item
            {
                get
                {
                    return (_nod.Copy());
                }
            }
     
            public string                    Path
            {
                get
                {
                    return (_nod.Name);
                }
            }
     
            public string                    Type
            {
                get
                {
                    return ("ItvNod");
                }
            }
        }
    Voila, j'ai cherché une bonne partie de l'apres midi sur le net et le forum et je n'ai pas trouvé de reponse... Merci d'avance de votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    J'ai beau chercher, je ne vois pas ce que j'ai pu oublier. Je ne peu pas forcer un appel a la methode Item de mon IHierarchyData lors du bind ca ne vient donc pas de la... Le code precedent ne sert donc qu'a montrer que j'ai bien une propriete Item qui est en etat d'etre utilisée...

    Voila comment j'essaye d'acceder a mon noeud lorsqu'un utilisateur devoile un noeud :

    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
     
    protected void      Page_Load(object                sender,
                                             EventArgs           e)
    {
        STree.DataSource = new ItvTreeHierarchy(Global.SqlCon);
        STree.DataBind();
    }
     
    public void         Get_form_data(object                        sender,
                                             T TreeNodeEventArgs       e)
    {
          MyTreeKey  nod = e.Node.DataItem  // DataItem est toujours null...
     
          // ...
    }
    Du coté ASP j'ai ca (mais ca ne doit pas etre tres utile...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <asp:TreeView ID="STree" runat="server" ImageSet="XPFileExplorer" NodeIndent="15"
        OnTreeNodeExpanded="Get_form_data"
        ExpandDepth="0" EnableViewState="false">
        <ParentNodeStyle Font-Bold="False" />
        <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
            VerticalPadding="0px" />
        <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"
            NodeSpacing="0px" VerticalPadding="2px" />
        <DataBindings>
            <asp:TreeNodeBinding TextField="Name" />
        </DataBindings>
    </asp:TreeView>
    Merci d'avance de votre aide, je bloque complettement la...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Bon j'ai pas encore trouvé la solution mais ca se rapproche, j'ai fait des test lors des differents evenements qui s'appliquent au TreeView, il s'avere que la propriete DataItem de la classe TreeNode n'est pas null lors du binding (OnTreeNodeDataBound) et l'est ensuite lors du deploiement de l'arbre (OnTreeNodeExpanded).

    Accessoirement, j'ai essayé de conserver un des resultats de la propriété TreeNode.DataItem dans un membre public (appellons le "truc"...) de la classe (sans le cloner, truc = (MyTreeKey)(e.Node.DataItem)). Celui-ci n'est pas null (Dans aucun des deux evenements) alors que e.Node.DataItem est null lors de OnTreeNodeExpanded...

    Qu'est ce que je n'ai pas compris ? J'ai l'impression que c'est une connerie monstrueuse qui ne meriterait pas que je poste sur ce forum...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Trouvé ! La propriété DataItem des Nodes du TreeView est accessible seulement lors du Binding (Evenement OnTreeNodeDataBound).

    Il faut se debrouiller tout seul pour indexer correctement une autre collection de données en fonction des noeuds pour pouvoir acceder aux objets liés a chacun d'entre-eux...

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

Discussions similaires

  1. Probleme de binding avec une observableCollection
    Par Yogy dans le forum Silverlight
    Réponses: 4
    Dernier message: 10/06/2009, 17h50
  2. probleme bind avec une séquence
    Par guitariste dans le forum JavaFX
    Réponses: 3
    Dernier message: 28/05/2009, 23h24
  3. Binding d'un TreeView sur plusieurs niveaux avec images
    Par Spikuria dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 25/05/2009, 17h17
  4. probleme avec les treeview
    Par zalalus dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/05/2008, 12h58
  5. Probleme to bind apache avec un port
    Par Mo-Add dans le forum Apache
    Réponses: 9
    Dernier message: 25/04/2008, 18h59

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