Sharepoint 2010 - webpart treeview不起作用

时间:2012-07-27 16:42:21

标签: c# visual-studio-2010 sharepoint-2010

您好我正在使用sharepoint 2010并在webpart中创建树视图以显示文档库中的项目。这段代码对我不起作用,它在同一个网页上显示所有内容...... 我希望能够指定要使用的文档库。

此外,它还包含重复的节点,因此如果我转到editpage,它会添加一个副本,如果我退出编辑模式,则会添加另一个副本。enter image description here

有人可以帮忙吗?

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using System.Web;
using System.IO;

namespace VisualWebPartProject1.VisualWebPart1 
{
    public partial class VisualWebPart1UserControl : UserControl 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SPWeb thisWeb = null;
            TreeNode node;
            using (thisWeb = SPContext.Current.Web)
            {




                //Add the Web's title as the display text for the tree node, and add the URL as the NavigateUri.
                node = new TreeNode(thisWeb.Title, null, null, thisWeb.Url, "_self");
                //The Visual Web Part has a treeview control called siteStructure.
                siteStructure.Nodes.Add(node);
                //Get a reference to the current node, so child nodes can be added in the correct position.
                TreeNode parentNode = node;
                //Iterate through the Lists collection of the Web.


                /*
                foreach (SPListItem item in myList.Items)
                {
                    SPFieldUrlValue data = item["Url"] as SPFieldUrlValue;
                    // now you have data.Description, data.Url
                    node = new TreeNode(Path.GetFileName(data.Url), null, null, data.Url, "_self");
                    parentNode.ChildNodes.Add(node);

                }
                */



                foreach (SPList list in thisWeb.Lists)
                {
                    if (!list.Hidden)
                    {
                        node = new TreeNode(list.Title, null, null, list.DefaultViewUrl, "_self");
                        parentNode.ChildNodes.Add(node);
                    }
                }
                foreach (SPWeb childWeb in thisWeb.Webs)
                {
                    //Call our own helper function for adding each child Web to the tree.
                    addWebs(childWeb, parentNode);
                    childWeb.Dispose();
                }


                siteStructure.CollapseAll();

            }
        }
        void addWebs(SPWeb web, TreeNode parentNode)
        {
            TreeNode node;
            node = new TreeNode(web.Title, null, null, web.Url, "_self");
            parentNode.ChildNodes.Add(node);
            parentNode = node;
            foreach (SPList list in web.Lists)
            {
                if (!list.Hidden)
                {
                    node = new TreeNode(list.Title, null, null, list.DefaultViewUrl, "_self");
                    parentNode.ChildNodes.Add(node);
                }
            }
            foreach (SPWeb childWeb in web.Webs)
            {
                //Call the addWebs() function from itself (i.e. recursively) 
                //to add all child Webs until there are no more to add.
                addWebs(childWeb, parentNode);
                childWeb.Dispose();

            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

尝试在使用声明之前添加:

If(node.Nodes.Count == 0) { // The rest of your code here }

答案 1 :(得分:0)

WebProperties添加到您的WebPart,以便能够配置您想要使用的库,而不是硬编码的库。在此属性中,您可以指定列表名称并读取它以加载此列表。

另外,为了避免编辑等多次插入,请在

内的Page_Load事件中添加代码
if (!Page.IsPostBack)
{
    Your code goes here...
}

这样可以避免每次加载或甚至回发页面时执行代码,这会导致每次向树中添加新节点时都会添加。