|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。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控件途径
///string strCalendarName:需求停止监听的Calendar控件名
public DateTime GetDateTime(NameValueCollection form,string strFindControlPath,string strCalendarName)
{
if(form["__EVENTARGUMENT"] != null &&
form["__EVENTTARGET"] != null &&
form["__EVENTARGUMENT"] != "" &&
form["__EVENTTARGET"] != "" )
{
char[] cSplitArray = {':'};
string[] strPath = form["__EVENTTARGET"].ToString().Split(cSplitArray);
string strTempPath = form["__EVENTTARGET"].Substring(0,form["__EVENTTARGET"].LastIndexOf(":"));
strTempPath = strTempPath.Substring(0,strTempPath.LastIndexOf(":"));
string strTempCalendarName = form["__EVENTTARGET"].Substring(form["__EVENTTARGET"].LastIndexOf(":")+1);
if(strTempCalendarName!=strCalendarName)//不是想要找的Calendar控件
return new DateTime();
if(strTempPath!=strFindControlPath)//不是想要找的控件途径
return new DateTime();
if(form["__EVENTARGUMENT"].Substring(0,1)!="V")
{
return GetDateTime(Convert.ToInt32(form["__EVENTARGUMENT"]));
}
else
{//翻页
return new DateTime();
}
}
return new DateTime();
}
///经由过程绝对2000年1月1日的日偏移量,前往响应的工夫对象
///道理:依据偏移量盘算响应的日期,2000年1月1日的日偏移量为0,往后是负数,往前是正数
///天数是每400年为一个周期,这是由闰年酿成的
///闰年是或被400被整除 或 被4整除但不被100整除的年份
public DateTime GetDateTime(int iPos)
{
int iSign = 1;
if(iPos < 0)
{
iSign = -1;
iPos = (-1) *iPos;
}
int Year4 = (365*4+1); //普通4年的天数
int Year400 = Year4*100-3; //400年的天数,周期
int[] Year100Array ={Year4*25,Year4*25-1,Year4*25-1,Year4*25-1};//400年中,每100年的天数
int[] MonthArray = {31,28,31,30,31,30,31,31,30,31,30,31}; //12月中普通的天数
int[] YearArray = {366,365,365,365}; //4年中普通的天数
int iYearBy400 = iPos/Year400; //400年的倍数
int iYearBy400Residue = iPos%Year400; //400年的余数
int iYearBy100 = 0; //100年的倍数
int iYearBy100Residue = 0; //100年的余数
int iYearBy4 = 0; //4年的倍数
int iYearBy4Residue = 0; //4年的余数
int iYearIn4 = 0; //4年这一小段中所处的年
int iYearResidue = 0; //4年这一小段中在所处的年的天的余数
int iYear=0; //年
int iMonth=0; //月
int iDay=0; //日
int iMonthResidue = 0; //月中的偏移量
if(iYearBy400Residue == 0)
{//400全年
iYear = 2000 + iSign*400*iYearBy400;
return new DateTime(iYear,1,1);
}
int iYear100Start = (Year100Array.Length)*(1-iSign)/2-(1-iSign)/2;
int iYear100End = (Year100Array.Length)*(1+iSign)/2-(1-iSign)/2;
iYearBy100Residue = iYearBy400Residue;
for(int i=iYear100Start; i!=iYear100End;i=i+iSign)
{//盘算在哪一个100年内
</p> asp可以使用微软的activeX 使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般 |
|