Sharepoint 2010 控件系统 之 扩展 SaveButton
2013-04-03 08:52
295 查看
上一篇介绍了Sharepoint控件的基本应用,这一篇介绍一下SaveButton的扩展,在扩展之前讲个案例,通过两个字段验证唯一性,这样在开发时就要用到扩展了,但用EventReceive也可以,哪个更好就自己体会吧。
SaveButton目前不支付保存前事件和保存后事件,但是在开发项目时,保存前总要用到验证,因此为了更好的满足要求,合理规划代码就有了扩展这一篇文章,对SaveButton扩展了两个事件,保存前BeforeSaveItem,保存后AfterSaveItem,这两个事件在实际应用中应用比较多。
首先声明事件和委托,如果对事件和委托不清楚可以Google一下,分页就是最好的事例。
继承SaveButton ,Override SaveItem ,下面为所有的代码
View Code
扩展完成之后,就是如何运用了,在上一篇中已经提到了这两个事件 OnBeforeSaveItem OnAfterSaveItem
现在事件已经注册好了,接下来就是写 BeforeSaveItem的方法
就这样完成了SaveButton的扩展。如果有其它特殊要求就自己扩展吧。
参考文章:/article/6185202.html
SaveButton目前不支付保存前事件和保存后事件,但是在开发项目时,保存前总要用到验证,因此为了更好的满足要求,合理规划代码就有了扩展这一篇文章,对SaveButton扩展了两个事件,保存前BeforeSaveItem,保存后AfterSaveItem,这两个事件在实际应用中应用比较多。
首先声明事件和委托,如果对事件和委托不清楚可以Google一下,分页就是最好的事例。
/// <summary> /// 保存前 /// </summary> public class BeforeSaveItemArgs : EventArgs { /// <summary>当前列表的ListItem</summary> public SPListItem ListItem { get; set; } /// <summary>默认True,如果是False,则验证通不过,不能保存</summary> public bool Validate { get; set; } /// <summary>当前列表的 List</summary> public SPList List { get; set; } public Dictionary<string, string> Parameters { get; set; } } /// <summary> /// 保存后 /// </summary> public class AfterSaveItemArgs : EventArgs { /// <summary>当前列表的 List</summary> public SPList List { get; set; } /// <summary>当前列表的ListItem</summary> public SPListItem ListItem { get; set; } /// <summary>判断是否保存成功</summary> public bool Success { get; set; } public Dictionary<string, string> Parameters { get; set; } } /// <summary> /// 声明委托 保存前事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public delegate void BeforeSaveItemHandler(object sender, BeforeSaveItemArgs e); /// <summary> /// 声明委托 保存后事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public delegate void AfterSaveItemHandler(object sender, AfterSaveItemArgs e);
继承SaveButton ,Override SaveItem ,下面为所有的代码
View Code
public class TSaveButton : SaveButton { private static readonly object EventBeforeSaveItem = new object(); private static readonly object EventAfterSaveItem = new object(); #region Event /// <summary> /// 定义保存前事件 /// </summary> public event BeforeSaveItemHandler BeforeSaveItem { add { base.Events.AddHandler(EventBeforeSaveItem, value); } remove { base.Events.RemoveHandler(EventBeforeSaveItem, value); } } /// <summary> /// 定义保存后事件 /// </summary> public event AfterSaveItemHandler AfterSaveItem { add { base.Events.AddHandler(EventAfterSaveItem, value); } remove { base.Events.RemoveHandler(EventAfterSaveItem, value); } } #endregion protected virtual void SaveIteming(BeforeSaveItemArgs e) { BeforeSaveItemHandler handler = (BeforeSaveItemHandler)base.Events[EventBeforeSaveItem]; if (handler != null) { handler(this, e); } } protected virtual void SaveItemed(AfterSaveItemArgs e) { AfterSaveItemHandler handler = (AfterSaveItemHandler)base.Events[EventAfterSaveItem]; if (handler != null) { handler(this, e); } } /// <summary> /// Override SaveItem /// </summary> /// <returns></returns> protected override bool SaveItem() { SPListItem item = base.ItemContext.ListItem; //获取当前Items BeforeSaveItemArgs beforeSaveArgs = new BeforeSaveItemArgs() { ListItem = item, Validate = true, List = base.List }; //构造默认值 SaveIteming(beforeSaveArgs); if (beforeSaveArgs.Validate) //验证保存是否成功 { bool result = base.SaveItem(); //保存成功返回True AfterSaveItemArgs afterSaveArgs = new AfterSaveItemArgs() { ListItem = item, Success = result,List = base.List}; SaveItemed(afterSaveArgs); return result; } else return false; } }
扩展完成之后,就是如何运用了,在上一篇中已经提到了这两个事件 OnBeforeSaveItem OnAfterSaveItem
<T:TSaveButton runat="server" ID="btnSave" OnInit="OnInitSave" OnBeforeSaveItem="BeforeSaveItem" OnAfterSaveItem="AfterSaveItem" />
现在事件已经注册好了,接下来就是写 BeforeSaveItem的方法
#region OnBeforeSaveItem public void BeforeSaveItem(object sender, EventArgs e) { BeforeSaveItemArgs beforeSaveItemArgs = e as BeforeSaveItemArgs; if (beforeSaveItemArgs != null) { beforeSaveItemArgs.Validate = false; if (ValidateCode(beforeSaveItemArgs.ListItem.ID, beforeSaveItemArgs.ListItem.Title, txtCodeKey.Text, beforeSaveItemArgs.List)) { beforeSaveItemArgs.ListItem["ParentId"] = hfParentId.Value; beforeSaveItemArgs.Validate = true; } else { Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "ModalHostScript", "alert('代码已存在!');", true); return; } beforeSaveItemArgs.Validate = false; if (ValidateCodeName(beforeSaveItemArgs.ListItem.ID, txtCodeName.Text, txtCodeKey.Text, beforeSaveItemArgs.List)) { beforeSaveItemArgs.Validate = true; } else { Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "ModalHostScript", "alert('名称已存在!');", true); } } } #endregion
就这样完成了SaveButton的扩展。如果有其它特殊要求就自己扩展吧。
参考文章:/article/6185202.html
相关文章推荐
- Sharepoint 2010 控件系统 之 TextField、LookupField、NoteField、RichTextField、SaveButton
- sharepoint 2010 社区中心系统-在线问答-扩展讨论板Dicussion答复功能
- sharepoint 2010 扩展调查字段属性系列-投票系统扩展方案
- sharepoint 2010 在线学习系统-培训系统-资源库系统 扩展
- sharepoint 2010 扩展富文本框上传图片功能extend InputFormTextBox for uploading image
- sharepoint 2010 可视web部件 自定义属性 控件获取到自定义属性的值
- sharepoint 2010 扩展调查字段属性(1)-增加图片支持
- Android 自定义属性,系统控件扩展
- SharePoint 2010 master page 控件介绍(3) :页面主体内容
- Android 自定义属性,系统控件扩展
- sharepoint 2010 扩展调查字段属性(3)-根据权限设置是否允许多次回复
- sharepoint 2010 列表数据分页控件介绍 pagination UserControl
- 在SharePoint 2010系统中安装RBS FILESTREAM Provider
- 在Windows 7 X64系统中安装SharePoint 2010 Beta版
- SharePoint 2010 master page 控件介绍(3) :页面主体内容
- sharepoint 2010 扩展调查字段属性(6)-增加图片支持-多选-根据权限控制是否允许用户多次评选
- sharepoint 2010 列表数据分页控件介绍 pagination UserControl
- sharepoint 2010自定义访问日志列表设置移动终端否和客户端访问系统等计算列的公式
- 在SharePoint 2010系统中安装RBS FILESTREAM Provider 推荐
- Windows7 系统 如何将QuickFlow2.0 添加的sharepoint 2010 的场解决方案