设为首页 收藏本站
查看: 754|回复: 0

[经验分享] 步步为营 SharePoint 开发学习笔记系列 六、EditorPart开发

[复制链接]

尚未签到

发表于 2015-9-25 11:08:55 | 显示全部楼层 |阅读模式
  概要
  System.Web.UI.WebControls.WebParts,并让这个类继承EditorPart类,并实现它的两个方法ApplyChanges和SyncChanges,简单描述:


  • ApplyChanges:是由配置界面向WebPart传值;
  • SyncChanges:是由WebPart向配置界面传值。
  就是实现如下图的效果:
DSC0000.png
  在我们定制的用户祥细信息webpart点击modify shared web part的显示界面上显示我们定制的用户祥细信息,显所的部门和级别.
  代码设计:
  新建用户祥细信息web part的user control设计,新建UserDetailUserControl.ascx:
  page设计:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UserDetailUserControl.ascx.cs" Inherits="WebUserControl_UserDetailUserControl" %>
<style type="text/css">
.style1
{
width: 23%;
height: 82px;
}
.style2
{
width: 112px;
}
.style3
{
width: 112px;
height: 21px;
}
.style4
{
height: 21px;
}
</style>
<table class="style1">
<tr>
<td class="style2">
<asp:Label ID="lblName" runat="server" Text="Name"></asp:Label>
:</td>
<td>
<asp:Label ID="lblUserName" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td class="style3">
<asp:Label ID="lblAge" runat="server" Text="Age"></asp:Label>
:</td>
<td class="style4">
<asp:Label ID="lblUserAge" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td class="style2">
<asp:Label ID="lblSex" runat="server" Text="Sex"></asp:Label>
:</td>
<td>
<asp:Label ID="lblUserSex" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td class="style2">
<asp:Label ID="lblCity" runat="server" Text="City"></asp:Label>
:</td>
<td>
<asp:Label ID="lblUserCity" runat="server"></asp:Label>
</td>
</tr>
</table>


  UserDetailUserControl.ascx.cs的代码设计:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
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 System.Xml.Linq;
using LearnWriteWebPart.BE;
using LearnWriteWebPart.BO;
using LearnWriteWebPart.Util;
using LearnWriteWebPart.Interface;
public partial class WebUserControl_UserDetailUserControl : System.Web.UI.UserControl
{
private string parmKeyItemId = "ItemID";

/// <summary>
/// The property that holds Item id.
/// </summary>
private int ItemId
{
get
{
if (Request[this.parmKeyItemId] != null)
return Convert.ToInt32(Request[this.parmKeyItemId].ToString());
else return Constants.USERDETAIL_ID_DEFAULT;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
private void BindData()
{
UserBO bo = new UserBO ();
UserBE user = bo.GetUserByID(ItemId);
lblUserName.Text = user.UserAccount;
lblUserAge.Text = user.Age;
lblUserSex.Text = user.Sex;
lblUserCity.Text = user.City;
}
}
  web part 代码的设计:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Web.UI;
using LearnWriteWebPart.Util;
using LearnWriteWebPart.Interface;
using System.Collections;
using System.ComponentModel;
using Microsoft.SharePoint.WebPartPages;
namespace LearnWriteWebPart.Webpart
{
[ToolboxData("<{0}:UserDetailWebPart runat=server></{0}:UserDetailWebPart>")]
[XmlRoot(Namespace = "LearnWriteWebPart.Webpart")]
public class UserDetailWebPart : System.Web.UI.WebControls.WebParts.WebPart,IUserGroup
{
#region [Private Variable]
private string _ListName = string.Empty;
private string _Url = string.Empty;
private string TheListName = Constants.LISTNAME_USERDETAIL;
private UserControl _userControl;
private string _Dept;
private string _Level;
#endregion

#region [Custom Properties]

/// <summary>
/// The property that holds how many rows will be retrieved
/// </summary>
[WebBrowsable(false),
Personalizable(true)]
public string Dept
{
get
{
return _Dept;
}
set
{
_Dept = value;
}
}
/// <summary>
/// The property that holds how many rows will be retrieved
/// </summary>
[WebBrowsable(false),
Personalizable(true)]
public string Level
{
get
{
return _Level;
}
set
{
_Level = value;
}
}
/// <summary>
/// This list naem
/// </summary>
[WebBrowsable(false),
Personalizable(true)]
public string ListName
{
get
{
return _ListName;
}
set
{
_ListName = value;
}
}
/// <summary>
/// The list Url
/// </summary>
[WebBrowsable(false),
Personalizable(true)]
public string Url
{
get
{
return _Url;
}
set
{
_Url = value;
}
}
#endregion
#region [Constructors]
/// <summary>
/// The sample constructor
/// </summary>
public UserDetailWebPart()
{
this.ListName = TheListName;
this.Dept = Constants.DEFAULT_USERDEPT_USERDETAIL;
this.Level = Constants.DEFAULT_USERLEVEL_USERDETAIL;
}
#endregion
#region [Override Methods]
/// <summary>
/// Override method to OnInit method
/// </summary>
/// <param name="e">The EventsArgs object</param>
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
SetWebPartTitleAndUrlWhenAdded(this.ListName, this.Url);
AddControlToWebPart();
}
#endregion
#region [Private Methods]
/// <summary>
/// Add Login Control
/// </summary>
private void AddControlToWebPart()
{
Type controlType = Type.GetType("ASP.webusercontrol_userdetailusercontrol_ascx,Web_deploy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1234567f94a516f5");
_userControl = (UserControl)this.Page.LoadControl(controlType, null);
this.Controls.Add(_userControl);
}
/// <summary>
/// Set webpart title and url
/// </summary>
/// <param name="ListName"></param>
/// <param name="Url"></param>
private void SetWebPartTitleAndUrlWhenAdded(string ListName, string Url)
{
this.Title = this.ListName;
this.TitleUrl = this.Url;
}

/// <summary>
/// Reload Webpart
/// </summary>
public void ReLoadWebPart()
{
if (_userControl != null)
{
this.Controls.Remove(_userControl);
this.AddControlToWebPart();
}
}
/// <summary>
/// CreateEditorParts - Override to declare our own editor part
/// </summary>
/// <returns></returns>
public override EditorPartCollection CreateEditorParts()
{
ArrayList editorPartArray = new ArrayList();
UserDetailEditWebPart editorPart = new UserDetailEditWebPart();
editorPart.ID = this.ID + "_editorPart";
editorPartArray.Add(editorPart);
return new EditorPartCollection(editorPartArray);
}
#endregion

}
}
  加入我们站点后,结果如下所示:
DSC0001.png
  注意
  关键是如下代码和editorPart关联起来了,重载了CreateEditorParts方法。

       /// <summary>
/// CreateEditorParts - Override to declare our own editor part
/// </summary>
/// <returns></returns>
public override EditorPartCollection CreateEditorParts()
{
ArrayList editorPartArray = new ArrayList();
UserDetailEditWebPart editorPart = new UserDetailEditWebPart();
editorPart.ID = this.ID + "_editorPart";
editorPartArray.Add(editorPart);
return new EditorPartCollection(editorPartArray);
}
  接着我们新建UserDetailEditWebPart.cs
  代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using System.Web.UI.WebControls.WebParts;
using LearnWriteWebPart.Util;
using LearnWriteWebPart.Interface;
namespace LearnWriteWebPart.Webpart
{
public class UserDetailEditWebPart : EditorPart
{
private DropDownList ddlUserDept;
private DropDownList ddlUserLevel;

public override bool ApplyChanges()
{
try
{
UserDetailWebPart userDetailWebPart = this.WebPartToEdit as UserDetailWebPart;
if (userDetailWebPart != null)
{
userDetailWebPart.Dept = ddlUserDept.SelectedValue;
userDetailWebPart.Level = ddlUserLevel.SelectedValue;
userDetailWebPart.ReLoadWebPart();
}
return true;
}
catch
{
return false;
}
}
public override void SyncChanges()
{
this.EnsureChildControls();
// Get a reference to the CommentsEditorPart web part we are editing
UserDetailWebPart userDetailWebPart = this.WebPartToEdit as UserDetailWebPart;
if (userDetailWebPart != null)
{
if (!string.IsNullOrEmpty(userDetailWebPart.Dept))
ddlUserDept.SelectedValue = userDetailWebPart.Dept;
if (!string.IsNullOrEmpty(userDetailWebPart.Level))
ddlUserLevel.SelectedValue = userDetailWebPart.Level;
}
}
/// <summary>
/// Create dropdownlist for annoucement type
/// </summary>
protected override void CreateChildControls()
{
base.CreateChildControls();
this.Title = Constants.LISTNAME_USERDETAIL;
BindDept();
BindLevel();
this.Controls.Add(CreateLiteral("部门 <br/>"));
this.Controls.Add(ddlUserDept);
this.Controls.Add(CreateLiteral("级别 <br/>"));
this.Controls.Add(ddlUserLevel);
}
private void BindDept()
{
ddlUserDept = new DropDownList();
List<ListItem> listItem = new List<ListItem>();
listItem.Add(new ListItem("HR Dept", "HR Dept"));
listItem.Add(new ListItem("FI Dept", "FI Dept"));
listItem.Add(new ListItem("IT Dept", "IT Dept"));
ddlUserDept.DataSource = listItem;
ddlUserDept.DataBind();
}
private void BindLevel()
{
ddlUserLevel = new DropDownList();
List<ListItem> listItem = new List<ListItem>();
listItem.Add(new ListItem("Primary", "Primary"));
listItem.Add(new ListItem("Intermediate", "Intermediate"));
listItem.Add(new ListItem("Senior", "Senior"));
ddlUserLevel.DataSource = listItem;
ddlUserLevel.DataBind();
}
/// <summary>
///
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
private Literal CreateLiteral(string text)
{
Literal lit = new Literal();
lit.Text = text;
return lit;
}
}
}
  关键还是重载了ApplyChanges()和SyncChanges()这两个方法.加上去,点击Modify Shared Wep Part后显示的结果如我们上图所示.
  接下来讲解share point Time Job的开发。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118611-1-1.html 上篇帖子: Sharepoin学习笔记—架构系列-- Sharepoint的四种执行模型 1 下篇帖子: Vs2010开发SharePoint工作流1——关联窗体和启动窗体的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表