技术开发 频道

[SharePoint]简单实现Treeview Navigation


【IT168技术新闻】

  Treeview Navigation是通过作者自己写的一个MyTreeView控件来显示的,但这个控件没有开放源代码。我就用 Microsoft.Web.UI.WebControls.TreeView自己写了一个简单的Treeview Navigation,代码如下:
[System.ComponentModel.Description("AreaTreeView")] public class AreaTreeView : System.Web.UI.UserControl, SmartPart.IUserControl { protected System.Web.UI.WebControls.Label ErrorMessage; protected Microsoft.Web.UI.WebControls.TreeView AreaList; protected const string ImagesFolder = "wpresources/images/"; private bool _isExpanded = true; private string _expandLevel; private Microsoft.SharePoint.SPWeb _spweb; "public properties"#region "public properties" [System.ComponentModel.Browsable(true), System.ComponentModel.Description("展开深度")] public string ExpandLevel { get { return _expandLevel; } set { _expandLevel = value;} } [System.ComponentModel.Browsable(true), System.ComponentModel.Description("默认展开")] public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; } } public Microsoft.SharePoint.SPWeb SPWeb { get { return _spweb; } set { _spweb = value; } } #endregion private void Page_Load(object sender, System.EventArgs e) { try { if(ExpandLevel != null) { AreaList.ExpandLevel = int.Parse(ExpandLevel);//TreeView的展开深度 } if(AreaList.Nodes.Count>0) { AreaList.Nodes.Clear();//清除已有节点 } SPWeb spweb = null; SPWebCollection subWebs = null; TreeNode node = new TreeNode();//定义根节点 spweb = SPControl.GetContextWeb(Context);//获取当前Web站点 subWebs = spweb.GetSubwebsForCurrentUser();//获取当前站点下的所有子站点 if(this.SPWeb.ID == spweb.ID) { node.Text = "<b>"+spweb.Title+"</b>";//当前站点粗体显示 } else { node.Text = spweb.Title; } node.Expanded = this.IsExpanded;//是否展开根节点 node.NavigateUrl = spweb.Url; AreaList.Nodes.Add(node); AddTreeNode(spweb,AreaList.Nodes[0]);//调用递归函数生成所有子节点 } catch(Exception ex) { ErrorMessage.Text = ex.Message; } } private void AddTreeNode(SPWeb currentWeb, TreeNode parentNode) { foreach(SPWeb web in currentWeb.GetSubwebsForCurrentUser()) { TreeNode node = new TreeNode(); if(this.SPWeb.ID == web.ID) { node.Text = "<b>"+web.Title+"</b>"; } else { node.Text = web.Title; } node.NavigateUrl = web.Url; parentNode.Nodes.Add(node); AddTreeNode(web,node); } } Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器 /// 修改此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion }
  我觉得Treeview Navigation如果只显示站点与子站点的结构,并不是很实用,我们更需要显示区域的结构,这样才能全面显示站点的导航结构,使用起来才更方便,所以我想开发一个显示区域结构的AreaTreeView。
0
相关文章