0

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

它还放入了重复的节点,所以如果我去编辑页面,它会添加一个副本,如果我离开编辑模式,它会添加另一个副本。在此处输入图像描述

任何人都可以帮忙吗?

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();

            }
        }
    }
}
4

2 回答 2

2

尝试在您的 using 语句之前添加此内容:

If(node.Nodes.Count == 0) { // The rest of your code here }
于 2012-10-09T03:20:15.397 回答
0

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

还要避免在编辑等时多次插入,请在里面的 Page_Load 事件中添加您的代码

if (!Page.IsPostBack)
{
    Your code goes here...
}

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

于 2015-11-24T19:39:56.880 回答