使用SPFolderCollection以及SPFolder对象分层次显示文档列表

Shaerpoint 的文档库的功能很强大,显示文档列表的方式也很多,我们可以使用系统的视图显示文档,我们也可以定义视图来显示文档列表。在系统提供的视图中您可以选择是否显示文件夹。但是,我们有时候希望向察看本地资源管理器那样的分层查看文档列表,即展现出文档以及文档夹之间的层次关系。我这里介绍使用 SPFoldercollection 和 SPFolder 对象模型来实现这个功能。

首先,由于我们的 Webpart 可能要用于显示不同的文档库,所以,我们自定义一个属性用于传递您要显示的文档库的名称:

namespace WPDocLibTree

{

///

1<summary>
2
3/// Description for WebPart1. 
4
5/// </summary>

[DefaultProperty("Text"),

ToolboxData("<{0}:WPDocLibTree runat=server>

"),

XmlRoot(Namespace="WPDocLibTree")]

public class WPDocLibTree : Microsoft.SharePoint.WebPartPages.WebPart

{

private const string defaultText = "";

private string text = defaultText;

private string _myDoc="";

[Browsable(true),

Category("Miscellaneous"),

DefaultValue(defaultText),

WebPartStorage(Storage.Personal),

FriendlyName("Text"),

Description("Text Property")]

public string Text

{

get

{

return text;

}

set

{

text = value;

}

}

//文档库名称

[Category("文档库定义")]

[DefaultValue("")]

[WebPartStorage(Storage.Personal)]

[FriendlyNameAttribute("文档库名称")]

[Description("请输入要显示的文档库德名称")]

[Browsable(true)]

[XmlElement(ElementName="myDoc")]

public string myDoc

{

get

{

return _myDoc;

}

set

{

_myDoc=value;

}

}

然后,在RenderWebPart来显示我们的文档列表:

protected override void RenderWebPart(HtmlTextWriter output)

{

// 首先,我们通过下列语句格式化我们的文档列表:

output.Write("

 1<style><!--.folder1 { font-size: 10pt; color: #000080;margin-left: 50; font-weight:bold;}"); 
 2
 3output.Write (".file1 { font-size: 10pt; color: #3366CC;margin-left: 50; }"); 
 4
 5output.Write(".folder2 { font-size: 10pt; color: #000080;margin-left: 70; font-weight:bold}"); 
 6
 7output.Write (".file2 { font-size: 10pt; color: #3366CC;margin-left: 70 }"); 
 8
 9output.Write(".folder3 { font-size: 10pt; color: #000080;margin-left: 90; font-weight:bold}"); 
10
11output.Write (".file3 { font-size: 10pt; color: #3366CC;margin-left: 90 }"); 
12
13output.Write(".folder4 { font-size: 10pt; color: #000080;margin-left: 110; font-weight:bold}"); 
14
15output.Write (".file4 { font-size: 10pt; color: #3366CC;margin-left: 110 }"); 
16
17output.Write ("--></style>

");

//打开当前站点

SPWeb site=SPControl.GetContextWeb(Context);

// 获取站点中的所有文件夹

SPFolderCollection folders=site.Folders;

// 获取指定的文档库(文件夹)

SPFolder folder=folders[_myDoc];

// 获取所有文档

SPFileCollection files=folder.Files;

for(int i=0;i

 1<files.count;i++) class="file1" href=' "+files[i].ServerRelativeUrl.ToString()+"' output.write("<a="" target="_blank" {=""><img border='\"0\"' src='\"../_layouts/images/keyword.gif\"'/>  "+files[i].Name.ToString()+"<br/>"); 
 2
 3} 
 4
 5//  检查是否有子文件夹 
 6
 7SPFolderCollection subFolders=folder.SubFolders ; 
 8
 9if(subFolders.Count&gt;1) 
10
11{ 
12
13//  显示子文件夹 
14
15foreach(SPFolder subFolder in subFolders) 
16
17{ 
18
19//  过滤掉系统文件夹“  forms  ” 
20
21if(subFolder.Name.ToString().ToUpper()!="FORMS") 
22
23{ 
24
25//folder=subFolder; 
26
27output.Write("<a class="folder1" href=' "+subFolder.ServerRelativeUrl.ToString()+"' target="_blank"><img border='\"0\"' src='\"../_layouts/images/folder.gif\"'/>  "+subFolder.Name.ToString()+"</a><br/>"); 
28
29SPFileCollection files1=subFolder.Files; 
30
31//  显示子文件夹中的文件 
32
33foreach(SPFile file1 in files1) 
34
35{ 
36
37output.Write("<a class="file2" href=' "+file1.ServerRelativeUrl.ToString()+"' target="_blank"><img border='\"0\"' src='\"../_layouts/images/keyword.gif\"'/>  "+file1.Name.ToString()+"</a><br/>"); 
38
39} 
40
41} 
42
43} 
44
45}</files.count;i++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus