指引网

当前位置: 主页 > 编程开发 > ASP >

一种监听DataList中Calendar事件的解决方法

来源:网络 作者:佚名 点击: 时间:2017-06-22 20:21
[摘要] 有时你想在DataList的编辑模板项中加入在DataList的模板中加入System.Web.UI.WebControls.Calendar,这样你可以通过Calendar来更改日期属性,只需一点,就行了,不需要用户填写固定格式的日期.可是在
有时你想在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控件路径
------分隔线----------------------------