为SharePoint列表数据创建树视图结构

        为SharePoint列表数据创建树视图结构
        在我们的项目中,我们有个要求,所有类别/子类别详细信息将在名为CategoryDetails的列表中储存。需要以树视图展示给终端用户。
1. 创建自定义列表CategoryDetails

2. 创建栏目Category Name,类型单行文本,必填,强制唯一值。创建后效果图:


3. 创建栏目Parent Category,类型查阅项,在其他栏设置下,信息来源选择CategoryDetails,此栏包含选择Category Name。


4. 样例列表数据。


5. 现在我们看看创建树结构的代码,使用ASP树视图控件。
        创建空白SharePoint项目,添加可见Web部件TreeStructure。
        代码首先寻找parent为null的项目。如China,India。
        然后对每个顶级项目,子项目将使用查询语句获得。
        同样的方法将被循环调用获得所有子项目。

        在TreeStructureUserControl.ascx中添加一个Treeview控件。(注意更改ID)


        TreeStructureUserControl.ascx.cs添加如下代码,并部署解决方案。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Text;
using System.Collections.Generic;
using System.Web;

namespace TreeViewForListData.TreeStructure
{
    public partial class TreeStructureUserControl : UserControl
    {
        public const string DYNAMIC_CAML_QUERY = "
   
   
    
    
     
     
    
    
   
   ";
        public const string DYNAMIC_CAML_QUERY_GET_CHILD_NODE = "
   
   
    
    
     
     
     
     
      
      {1}
     
     
    
    
   
   ";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                BuildTree();
            }
        }
        protected void BuildTree()
        {
            SPList TasksList;
            SPQuery objSPQuery;
            StringBuilder Query = new StringBuilder();
            SPListItemCollection objItems;
            string DisplayColumn = string.Empty;
            string Title = string.Empty;
            string[] valueArray = null;
            treeViewCategories.Nodes.Clear();
            try
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {

                        TasksList = SPContext.Current.Web.Lists["CategoryDetails"];
                        if (TasksList != null)
                        {

                            objSPQuery = new SPQuery();
                            Query.Append(String.Format(DYNAMIC_CAML_QUERY, "Parent_x0020_Category"));
                            objSPQuery.Query = Query.ToString();
                            objItems = TasksList.GetItems(objSPQuery);
                            if (objItems != null && objItems.Count > 0)
                            {
                                foreach (SPListItem objItem in objItems)
                                {
                                    DisplayColumn = Convert.ToString(objItem["Category_x0020_Name"]);
                                    Title = Convert.ToString(objItem["Category_x0020_Name"]);
                                    CreateTree(Title, valueArray, null, DisplayColumn, objItem["ID"].ToString());
                                }
                            }

                        }
                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private void CreateTree(string RootNode, string[] valueArray, List
   
   
    
     objNodeCollection, string DisplayValue, string KeyValue)
        {

            string objExpandValue = string.Empty;
            TreeNode objTreeNode;
            TreeNodeCollection objChildNodeColn;
            try
            {
                objTreeNode = new TreeNode(DisplayValue, KeyValue);
                treeViewCategories.Nodes.Add(objTreeNode);
                objTreeNode.CollapseAll();
                objChildNodeColn = GetChildNode(RootNode, valueArray, objNodeCollection);
                foreach (TreeNode childnode in objChildNodeColn)
                {
                    objTreeNode.ChildNodes.Add(childnode);

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private TreeNodeCollection GetChildNode(string RootNode, string[] valueArray, List
    
    
     
      objListItemColn)
        {
            TreeNodeCollection childtreenodes = new TreeNodeCollection();
            SPQuery objSPQuery;
            SPListItemCollection objItems = null;
            List
     
     
      
       objNodeListItems = new List
      
      
       
       ();
            SiteMapNodeCollection objNode = new SiteMapNodeCollection();
            objSPQuery = new SPQuery();
            string objNodeTitle = string.Empty;
            string objLookupColumn = string.Empty;
            StringBuilder Query = new StringBuilder();
            SPList objTaskList;
            SPField spField;
            string objKeyColumn;

            try
            {
                objTaskList = SPContext.Current.Web.Lists["CategoryDetails"];
                objLookupColumn = "Parent_x0020_Category";//objTreeViewControlField.ParentLookup;  

                spField = SPContext.Current.Web.Lists["CategoryDetails"].Fields["Parent Category"];

                Query.Append(String.Format(DYNAMIC_CAML_QUERY_GET_CHILD_NODE, spField.InternalName, RootNode));
                objSPQuery.Query = Query.ToString();


                objItems = objTaskList.GetItems(objSPQuery);
                foreach (SPListItem objItem in objItems)
                {
                    objNodeListItems.Add(objItem);
                }


                if (objNodeListItems != null && objNodeListItems.Count > 0)
                {
                    foreach (SPListItem objItem in objNodeListItems)
                    {
                        RootNode = Convert.ToString(objItem["Category_x0020_Name"]);
                        objKeyColumn = Convert.ToString(objItem["ID"]);

                        objNodeTitle = Convert.ToString(objItem["Category_x0020_Name"]);
                        if (!String.IsNullOrEmpty(objNodeTitle))
                        {
                            TreeNode childNode = new TreeNode();
                            childNode.Text = objNodeTitle;
                            childNode.Value = objKeyColumn;
                            childNode.CollapseAll();
                            foreach (TreeNode cnode in GetChildNode(RootNode, valueArray, objListItemColn))
                            {
                                childNode.ChildNodes.Add(cnode);

                            }
                            childtreenodes.Add(childNode);
                        }
                    }
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return childtreenodes;
            // Call method again (recursion) to get the child items  
        }

    }
}

      
      
     
     
    
    
   
   

        现在添加Treestructure Web部件到页面,样例数据将显示在下边:(此图借用原文图片,我练习过程中出现了错误)


PS:我的错误原因,求高手解答,我也会自己琢磨一下的。


        大虾可以看原文链接

PS:

        经过月飘冥的指点, 在代码里栏名中间空格换成_x0020_,即解决问题。这里附上他的 博客链接
        论坛的朋友也给出了原因, 参考链接
        本机效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值