为SharePoint列表数据创建树视图结构
2014-04-25 23:39
302 查看
为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添加如下代码,并部署解决方案。
现在添加Treestructure Web部件到页面,样例数据将显示在下边:(此图借用原文图片,我练习过程中出现了错误)
PS:我的错误原因,求高手解答,我也会自己琢磨一下的。
大虾可以看原文链接。
论坛的朋友也给出了原因,参考链接
本机效果图:
在我们的项目中,我们有个要求,所有类别/子类别详细信息将在名为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_,即解决问题。这里附上他的博客链接论坛的朋友也给出了原因,参考链接
本机效果图:
相关文章推荐
- 为SharePoint列表数据创建树视图结构
- SharePoint 2010 使用url参数过滤列表视图数据(使用get方法过滤列表数据)
- SharePoint 2010 中有个新的列表模板“导入电子表格”可以直接导入Excel数据并创建为列表
- MySQL表结构复制、表数据迁移以及临时表、视图创建
- Android创建自定义视图列表对话框(数据库中的数据作为数据源,使用RecyclerView作为列表)
- SharePoint 2010 中有个新的列表模板“导入电子表格”可以直接导入Excel数据并创建为列表
- MySQL表结构复制、表数据迁移以及临时表、视图创建
- 在定义SharePoint列表的SPD数据视图的时候需要注意的问题
- sharepoint 2010 列表的数据表视图无法使用 the list cannot be displayed in datasheet view 解决方法
- SharePoint 2010 中有个新的列表模板“导入电子表格”可以直接导入Excel数据并创建为列表 .
- SharePoint 2010 中有个新的列表模板“导入电子表格”可以直接导入Excel数据并创建为列表 .
- sharepoint 2013 如何创建一个webservice获取sharepoint列表数据
- SharePoint开发 - Excel数据导入到SharePoint自定义列表(数据视图方式)
- MySQL表结构复制、表数据迁移以及临时表、视图创建
- 转:oracle 视图创建和操作,创建简单,复杂的视图,创建基表不存在的视图,视图增删改,查看视图的结构
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)
- R语言入门之创建数据集——向量、矩阵、数组、数据框和列表
- 数据结构之栈的初始化、创建、入栈、出栈、销毁-c++代码实现及运行实例结果
- 转:C# 对sharepoint 列表的一些基本操作,包括添加/删除/查询/上传文件给sharepoint list添加数据