有时你想在DataList的编辑模板项中加入在DataList的模板中加入System.Web.UI.WebControls.Calendar,这样你可以通过Calendar来更改日期属性,只需一点,就行了,不需要用户填写固定格式的日期.可是在DataList中System.Web.UI.WebControls.Calendar控件,点击Calendar,是无法响应SelectDate事件的.它只是进行简单的提交,不会出发ItemCreated,ItemBound,select,edit,update,cancel等等DataList时间.(可能有,可是俺没找到)这就是本贴想要解决的问题. 我先前在这个版找了一下,没看见有人讨论这个问题,当然这个如果使用客户端控件应该可以解决.不过我这个人比较固执,不想用梅花雨,自己做了一个服务器端的控件,来解析DataList中Calendar提交表单的参数(主要就是form["__EVENTARGUMENT"]和form["__EVENTTARGET"]这两个表单隐藏域),并将结果保存在这个控件中,这样在稍后就可以访问到了. 我把解决代码贴在下面,希望大家多拍砖,多给点意见,我也好有所提高!:) 监听Calendar控件的控件CageCalendar.dll using System; using System.Web.UI.WebControls; using System.Collections.Specialized; namespace Cage { /// <summary> /// CageCalendar用于检测客户端Canlendar的SelectedDate事件,通过检测Form中__EVENTARGUMENT和 /// __EVENTTARGET的这两个表单隐藏域,返回相应Canlendar控件中所选择的日期。本控件主要用于 /// DataList和DataGrid中的Calendar响应事件的处理,Cage因而得名。 /// </summary> public class CageCalendar : System.Web.UI.Control { private DateTime dtSniffTime; public CageCalendar() { } //保存解析的日期,这样使属性能够保存在ViewState中 public DateTime SniffTime { get { return dtSniffTime; } set { dtSniffTime = value; } } ///通过相对2000年1月1日的日偏移量,返回相应的时间对象 ///原理:检测表单中得__EVENTARGUMENT和__EVENTTARGET这两个表单隐藏域,如果合法,将解析后得参数传给帮助类 ///返回日期,如果不合法,返回new DateTime()了事 ///NameValueCollection form:Web表单的属性集 ///string strFindControlPath:需要进行搜索的DataList控件路径 |