[SharePoint]简单实现Treeview Navigation

Treeview Navigation是一个用树形结构显示当前站点导航结构的SharePoint WebPart, 详细情况请看:http://www.cnblogs.com/rickie/archive/2004/12/18/78665.html 。
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"

        
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 窗体设计器生成的代码
    }

源代码下载地址:http://files.cnblogs.com/dudu/AreaTreeView.rar
部置方法:
1、下载并安装iewebcontrols:http://files.cnblogs.com/dudu/iewebcontrols.rar
2、如果没有安装SmartPart 1.0, 请下载并安装:http://www.gotdotnet.com/workspaces/workspace.aspx?id=6cfaabc8-db4d-41c3-8a88-3f974a7d0abe
3、排除管理路径webctrl_client,该目录是在安装iewebcontrols时生成的,如果不排除的话,就无法显示TreeView(经过kaneboy的指点, 我才知道这个的, 感谢kaneboy),操作方法:在Windows SharePoint Services 管理中心=》配置虚拟服务器设置=》选择你的虚拟服务器=》定义管理路径中添加新路径webctrl_client(排除的路径)。
4、将DUDU.AreaTreeView.dll复制到SharePoint站点的bin目录中(如果没有该目录,就手工创建)。
5、将AreaTreeView.ascx复制到SharePoint站点的UserControls目录中(如果没有该目录,就手工创建)。

我觉得Treeview Navigation如果只显示站点与子站点的结构,并不是很实用,我们更需要显示区域的结构,这样才能全面显示站点的导航结构,使用起来才更方便,所以我想开发一个显示区域结构的AreaTreeView。


posted @ 2004-12-21 11:50 dudu 阅读(3946) 评论(4)  编辑 收藏 所属分类: SharePoint

  回复  引用    
#1楼 2004-12-21 23:52 | seasky7 [未注册用户]
哈哈,我做了一个JS版本的呢:)

http://man.lawoy.com

另:Windows SharePoint Services 是不是必须安装在WIN2003上面的啊?


  回复  引用  查看    
#2楼 [楼主]2004-12-27 15:04 | dudu      
不好意思, 原来MyTreeView也是个开放源代码的Asp.net控件: http://www.funkelab.com/website.aspx?objectid=1&displayid=1216
  回复  引用    
#3楼 2005-08-12 10:11 | 浩洋 [未注册用户]
Dudu, 我按照你的步骤进行到第5步后,在页面上加了一个smarpart,然后-点击“open the tool pane”,在 “User Control”属性中,输入:UserControls、AreaTreeView.ascx,点击OK.smartpart有如下错误:Error: unable to load UserControls/AreaTreeView.ascx
Details: ? (d:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config line 199)
实在不知如何解决。把输入改为:UserControls÷AreaTreeView.ascx或者/UserControls/AreaTreeView.ascx都无济于事。请指教。谢谢!!!
  回复  引用    
#4楼 2008-04-23 10:11 | meinving [未注册用户]
3、排除管理路径webctrl_client,该目录是在安装iewebcontrols时生成的,如果不排除的话,就无法显示TreeView
是否就是在添加路径中写“/webctrl_client”,然后选中“排出的路径”?
我这样做了,可是TreeView仍然无法加载,一旦把Microsoft.Web.UI.WebControls.dll文件加入到sharepoint 网站的Bin目录中,就会出错,连页面都打不开,到底是什么原因呢?

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-12-21 11:58 编辑过


相关链接: