如何自己写一个用户控件包装器来代替QuickPart!

如何自己写一个用户控件包装器来代替QuickPart!

具体步骤如下:

1.打开VS2008,新建一个Web Part类型的项目工程,命名为SuperWebPart

注:Windows SharePoint Services 3.0 工具:Visual Studio 2008 Extensions 1.2 版,下载地址如下:

http://www.microsoft.com/downloads/details.aspx?familyid=7BF65B28-06E2-4E87-9BAD-086E32185E68&displaylang=zh-cn  (中文版)

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7bf65b28-06e2-4e87-9bad-086e32185e68    (英文版)

新建工程如下图:

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;
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;
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一样,最后的效果如下:

 

posted @ 2009-03-21 21:39  cloud-zhang  阅读(650)  评论(1编辑  收藏  举报