TreeView控件的节点加载一般有两种方式,静态加载与动态加载,下面分别进行实现。
(1) 静态加载节点,一次加载所有节点
创建用户控件FolderTree1.ascx ,在ascx页面拖一个Button和TreeView上去,cs页面代码如下。
using System;
using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using Microsoft.SharePoint;public partial class FolderTree1 : System.Web.UI.UserControl
{ protected void Page_Load(object sender, EventArgs e) { }protected void Button1_Click(object sender, EventArgs e)
{ //获取当前网站实例 SPWeb mySPWeb = SPContext.Current.Web;//添加第一个节点作为临时根节点
TreeNode firstNode = new TreeNode(); TreeView1.Nodes.Add(firstNode);//读取SharePoint网站文件结构,填充TreeView节点
CreateTree(mySPWeb.RootFolder, firstNode);//删除先前添加的第一个临时节点,以网站根文件夹作为根节点
//(一般SharePoint根文件夹Text属性为空,因此取网站名作为根节点Text值) TreeNode rootNode = firstNode.ChildNodes[0]; rootNode.Text = mySPWeb.Title; TreeView1.Nodes.Remove(firstNode); TreeView1.Nodes.Add(rootNode); }//读取网站结构并填充到TreeView控件的递归函数
protected void CreateTree(SPFolder myFolder, TreeNode myNode) { //添加当前文件夹节点到TreeView TreeNode newNode = new TreeNode(myFolder.Name ); myNode.ChildNodes.Add(newNode);//添加当前文件夹下的文件节点到TreeView
foreach (SPFile myFile in myFolder.Files) { TreeNode childNode = new TreeNode(myFile.Name); newNode.ChildNodes.Add(childNode); }//递归调用,添加当前文件夹的子文件夹节点
foreach (SPFolder mySubFolder in myFolder.SubFolders) { CreateTree(mySubFolder, newNode); } }}(2)动态加载节点,只在展开节点时加载其子节点
创建用户控件FolderTree2.ascx ,在ascx页面拖一个Button和TreeView上去,cs页面代码如下。
using System;
using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using Microsoft.SharePoint;public partial class FolderTree2 : System.Web.UI.UserControl
{ protected void Page_Load(object sender, EventArgs e) { }protected void Button1_Click(object sender, EventArgs e)
{ SPWeb myWeb = SPContext.Current.Web;//页面载入时只加载根节点
TreeNode rootNode = new TreeNode(myWeb.Title); rootNode.Value = myWeb.Url; rootNode.PopulateOnDemand = true; TreeView1.Nodes.Add(rootNode); }//节点展开时加载其子节点
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e) { //获取当前节点及当前文件夹 TreeNode currentNode = e.Node; SPFolder currentFolder = SPContext.Current.Web.GetFolder(currentNode.Value);//加载当前文件夹下的文件节点
foreach (SPFile theFile in currentFolder.Files) { TreeNode fileNode = new TreeNode(theFile.Name); currentNode.ChildNodes.Add(fileNode); } //加载当前文件下的文件夹节点 foreach (SPFolder theFolder in currentFolder.SubFolders) { TreeNode folderNode = new TreeNode(theFolder.Name); folderNode.Value = theFolder.Url; folderNode.PopulateOnDemand = true; currentNode.ChildNodes.Add(folderNode); } }}用户控件FolderTree1.ascx ,FolderTree2.ascx 做好后可以用WebPart包装器QuickPart部署到SharePoint网站,或者直接创建页面部署到SharePoint服务器上。