Link to home
Create AccountLog in
Avatar of millerthegorilla
millerthegorilla

asked on

treenodes not expanding when selectednodechanged event defined

Hi - I'm using a treeview control in a sharepoint webpart.  It is populating ok and the nodes are expandable normally but when  I add a TreeNodeExpanded event handler to the treeview, nodes after a depth of two stop expanding.  Am I doing something wrong?
When I'm debugging, the treenodexpanded event handler executes regardless of whether the node expands or not.
Avatar of millerthegorilla
millerthegorilla

ASKER

I believe it has something to do with the way I am populating the tree view.  I attach the relevant code.
       /// <summary>
        /// PopulateTreeView is a recursive function, starting at the supplied SPWeb parameter it will extract all relevant information from the site before recursing for each sub site.
        /// </summary>
        /// <param name="web">web is the starting SPWeb (SharePoint web site) for the function.  In this case the current site i.e. the site on which the web part is placed.</param>
        /// <returns></returns>
        /// copied from http://www.sharepointblogs.com/andynoon/archive/2008/03/20/everyone-wants-one.aspx
        public TreeNode PopulateTreeView(SPWeb web)
        {
            TreeNode top = null;
            if (web != null)
            {
                //get detail of this current web
                if(showLinks ) top = new TreeNode("Site Details(" + web.Title + ")", "0", "/_layouts/images/SPHOMESM.GIF", web.Url, "_blank");
                else top = new TreeNode("Site Details(" + web.Title + ")", "0", "/_layouts/images/SPHOMESM.GIF");
                TreeNode node;
                if(showLinks) 
                {
                    node = new TreeNode(web.Title, "root", "/_layouts/images/ICHTT.GIF", web.Url, "_blank");
                    node.ChildNodes.Add(new TreeNode("URL: " + web.Url, "", "/_layouts/images/NEWLINK.GIF", web.Url, "_blank"));
                }
                else
                {
                    node = new TreeNode(web.Title, "root", "/_layouts/images/ICHTT.GIF");
                    node.ChildNodes.Add(new TreeNode("URL: " + web.Url, "", "/_layouts/images/NEWLINK.GIF"));
                }
                TreeNode users = new TreeNode("Users", "", "/_layouts/images/stsicon.gif");
                users.SelectAction = TreeNodeSelectAction.SelectExpand;
                //get all admins
                TreeNode admins = new TreeNode("Administrators (" + web.SiteAdministrators.Count + ")", "", "/_layouts/images/STSPEOPL.GIF");
                foreach (SPUser user in web.SiteAdministrators)
                {
                    TreeNode usr;
                    if (showLinks)
                    {
                        usr = new TreeNode(user.LoginName + "(" + user.Email + ")", "", "/_layouts/images/STAR.GIF", "mailto:" + user.Email, "");
                    }
                    else
                    {
                        usr = new TreeNode(user.LoginName + "(" + user.Email + ")", "", "/_layouts/images/STAR.GIF");
                    }
                    admins.ChildNodes.Add(usr);
                }
                users.ChildNodes.Add(admins);
                //get all groups and users within those groups
                foreach (SPGroup group in web.Groups)
                {
                    //record this group
                    TreeNode grp = new TreeNode(group.Name + " (" + group.Users.Count + ")", "", "/_layouts/images/STSPEOPL.GIF");
                    //for for each user in this group
                    foreach (SPUser user in group.Users)
                    {
                        TreeNode usr;
                        //record this user
                        if (showLinks)
                        {
                            usr = new TreeNode(user.LoginName + "(" + user.Email + ")", "", "/_layouts/images/mysite_titlegraphic.gif", "mailto:" + user.Email, "");
                        }
                        else
                        {
                            usr = new TreeNode(user.LoginName + "(" + user.Email + ")", "", "/_layouts/images/mysite_titlegraphic.gif");
                        }
 
                        grp.ChildNodes.Add(usr);
                    }
                    users.ChildNodes.Add(grp);
                }
                node.ChildNodes.Add(users);
                //get all lists (includes document libraries, discussion forums...)
                TreeNode lists = new TreeNode("Lists and libraries (" + web.Lists.Count + ")", "", "/_layouts/images/sts_list16.gif");
                foreach (SPList list in web.Lists)
                {
                    TreeNode lst = null;
                    try
                    {
                        //an exception can be thrown if an attempt to get the amount of items in a list returns null, also if the list is partially defines an exception may be thrown
                        if(showLinks)
                        {
                            lst = new TreeNode(list.Title + " (" + list.ItemCount + " items)", "", "/_layouts/images/iKpiList.png", list.DefaultViewUrl, "_blank");
                        }
                        else
                        {
                            lst = new TreeNode(list.Title + " (" + list.ItemCount + " items)", "", "/_layouts/images/iKpiList.png");
                        }
                    }
                    catch (Exception)
                    {
                        //if the exception (above) was thrown, just record the name of the list (ignore the amount of items)
                        lst = new TreeNode(list.Title);
                    }
                    lists.ChildNodes.Add(lst);
                }
                node.ChildNodes.Add(lists);
                //recurse for each sub web of the current web
                TreeNode webs = new TreeNode("Sub Webs (" + web.Webs.Count + ")", "", "/_layouts/images/SITEVARIATION.GIF");
                foreach (SPWeb subweb in web.Webs)
                {
                    webs.ChildNodes.Add(PopulateTreeView(subweb));
                }
                node.ChildNodes.Add(webs);
                top.ChildNodes.Add(node);
 
            }
            //return the complete node
            return top;
        }

Open in new window

I've found part of the problem.  When I comment out the event handler I get javascript:Treeview_togglenode(...  appearing in the status bar of ie when the expand/contract (+/-) sign is rolled over and everything works.  When I uncomment the eventhandler and roll over the +/- sign I get javascript:doPostBack(........,'\t0\\root\\') where the dots are the control reference.  Why does this happen?
ASKER CERTIFIED SOLUTION
Avatar of millerthegorilla
millerthegorilla

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer