[ASP.NET 2.0 / C# / Ajax] TreeNodeCollapsed sur TreeView dans UpdatePanel

ASP.NET 2

[ASP.NET 2.0 / C# / Ajax] TreeNodeCollapsed sur TreeView dans UpdatePanel


Dude76 12-03-2007, 18:19
Bonjour.
Dans le cadre du dévleoppement d'un webpart un peu complexe, pour améliorer les perfs sur mon treeview (trop de nœuds pour l'arbre complet) je suis tombé sur ce qui semble être un bug que j'ai réussit à reproduire dans un projet simplifié.
Cadre:
    Un treeview dans un updatepanel, le TreeView en déclencheur de l'updatePanel.
    événements : TreeNodeCollapsed, TreeNodeExpanded, TreeNodePopulate, SelectedNodeChanged
    Dans le page_load: un nœud root, PopulateOnDemand=true, TreeNodeSelectAction.Expand
    Le populate:
        niveau 1 : ajout de 3 nœuds, PopulateOnDemand=true, TreeNodeSelectAction.SelectExpand
        niveau 2 : ajout de 3 nœuds, PopulateOnDemand=false, TreeNodeSelectAction.Select

Voici le problème:
    Expansion de la racine : ok
    Expansion d'un nœud niveau 1 : ok   édit: il me le fait aussi sur cet expand/select...
    Selection d'un nœud feuille: un événement TreeNodeCollapsed intervient sur le nœud parent et avant le Page_Load (ce que je pensais impossible) avant de dérouler les événements attendus.

    Dès qu'on enlève l'updatepanel, le problème disparaît.
    Une idée de solution ?

Le code source est dispo là (page default + codebehind) : http://dude76.free.fr/forumMS/

Re : [ASP.NET 2.0 / C# / Ajax] TreeNodeCollapsed sur TreeView dans UpdatePanel


Dude76 12-04-2007, 14:53
Bonjour.
J'ai réussit à caractériser davantage le problème (enfin, en grande partie, je ne suis pas sûr d'avoir éclusé l'ensemble des cas possibles...).
Tout d'abord, l'évènement collapse criminel se produit après l'ensemble des inits (scriptmanager, updatepanel, treeview, page) et avant l'ensemble des loads.
Le problème se porte - je ne sais pas pourquoi - uniquement sur le premier nœud.
J'ai donc rajouté 2 variables booléennes à faux par défaut et ce 'pansement' dans mes 2 évènements:
protected void MyTreeView_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
    {
        if (!isLoad && !isForced)
        {
            isForced = true;
            e.Node.Expand();
            isForced = false;
            return;
        }
    }
  protected void MyTreeView_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        if (!isLoad && !isForced)
        {
            isForced = true;
            e.Node.Collapse();
            isForced = false;
            return;
        }
    }
(bien sûr Page_Load -> isLoad = true; )
De par le fait, mon TreeView semble maintenant parfaitement géré dans mon updatePanel.

Je dis ne pas penser avoir couvert tous les cas par ce qu'il me semble que j'ai eu quelques fois un Expanded qui s'ajoutait en fin de mes évènements attendus, mais je ne réussit pas à le reproduire.

Espérant que ce sera utile, voire que les codeurs de chez MS isole davantage le problème et nous approte un correctif ;)

Sponsorisé par Community Server


Conditions d’utilisation et Copyright
Respect de la vie privée