如何自己写一个用户控件包装器来代替QuickPart!
具体步骤如下:
1.打开VS2008,新建一个Web Part类型的项目工程,命名为SuperWebPart
注:Windows SharePoint Services 3.0 工具:Visual Studio 2008 Extensions 1.2 版,下载地址如下:
新建工程如下图:
2.点击OK后,在项目中新建一个名称为 TreeWebPart.cs 类库文件和一个类型为Web Part的文件(命名为SuperWebPart),如下图:
3.在TreeWebPart.cs类库文件中编写代码,此类继承System.Web.UI.WebControls.WebParts.EditorPart这个编辑部件,目的用于编辑System.Web.UI.WebControls.WebParts.WebPart控件,并且需要重写ApplyChanges,SyncChanges,CreateChildControls等方法,
完整代码如下:
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint;
using System.IO;
using System.Configuration;
namespace SuperWebPart
{
class TreeWebPart:EditorPart
{
private DropDownList ddlTree = new DropDownList();
public override bool ApplyChanges()
{
SuperWebPart part = (SuperWebPart)WebPartToEdit;
part.Url = this.ddlTree.SelectedItem.Value;
return true;
}
public override void SyncChanges()
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
//从wpresources目录下找出所有的文件
string[] a = System.IO.Directory.GetFiles(HttpContext.Current.Server.MapPath("../wpresources"));
FileInfo info;
for (int i = 0; i < a.Length; i++)
{
info = new FileInfo(a[i]);
ddlTree.Items.Add(info.Name);
}
Controls.Add(ddlTree);
}
protected override void RenderChildren(System.Web.UI.HtmlTextWriter writer)
{
base.RenderChildren(writer);
}
public override void RenderControl(System.Web.UI.HtmlTextWriter writer)
{
base.RenderControl(writer);
}
}
}
4.SuperWebPart.cs类库文件的完整代码如下,此类需要从WebParts和IWebEditable接口继承:
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Collections;
using System.ComponentModel;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace SuperWebPart
{
[Guid("d833c329-1066-4c59-a73b-38341ae07797")]
public class SuperWebPart : System.Web.UI.WebControls.WebParts.WebPart,IWebEditable
{
public SuperWebPart()
{
}
private UserControl usercontrol;
protected override void CreateChildControls()
{
base.CreateChildControls();
Controls.Clear();
if (this.Url != string.Empty)
{
usercontrol = (UserControl)Page.LoadControl(@"/wpresources/" + this.Url);
Controls.Add(usercontrol);
}
}
protected override void Render(HtmlTextWriter writer)
{
EnsureChildControls();
if (usercontrol != null)
{
usercontrol.RenderControl(writer);
}
}
private string _url = string.Empty;
[Personalizable]
[WebBrowsable]
[WebDisplayName("请手工输入一个控件文件")]
[WebDescription("只需要文件名就行了")]
[Category("个性设置")]
public string Url
{
get { return _url; }
set { _url = value; }
}
//把TreeWebPart部件加入到俄EditorParts中
public EditorPartCollection CreateEditorParts()
{
TreeWebPart obj = new TreeWebPart();
obj.ID = this.ID + "_selectTreeWebpart";
obj.Title = "选择用户控件by zhangyun";
ArrayList EditorParts = new ArrayList();
EditorParts.Add(obj);
return new EditorPartCollection(EditorParts);
}
}
}
5.编译成功后,
(1).把生成的SuperWebPart.dll放到SharePoint网站对应的bin目录下 C:\Inetpub\wwwroot\wss\VirtualDirectories\8080\bin
,在对应的SharePoint网站的webconfig文件中的<SafeControl></SafeControl>代码中添加如下代码:
<SafeControl Assembly="SuperWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
Namespace="SuperWebPart" TypeName="*" Safe="True" />,并修改 <trust level="Full" originUrl="" />
(2).把写好用户控件(?.ascx)文件放到SharePoint网站对应的wpresources目录下 C:\Inetpub\wwwroot\wss\VirtualDirectories\8080\wpresources
这样,SuperWebPart用户控件包装器就开发完成了,效果和QuickPart一样,最后的效果如下: