精灵巫婆 发表于 2015-2-3 23:38:21

ASP网站制作之一种监听DataList中Calendar事务的处理...

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服务器,所以性能稳定性也一般

分手快乐 发表于 2015-2-4 04:02:52

用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

第二个灵魂 发表于 2015-2-7 19:22:40

学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:

简单生活 发表于 2015-2-23 02:10:22

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

admin 发表于 2015-3-7 05:01:24

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

飘灵儿 发表于 2015-3-14 10:46:44

我想问如何掌握学习节奏(先学什么再学什么)最好详细点?

莫相离 发表于 2015-3-17 22:10:47

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

愤怒的大鸟 发表于 2015-3-25 03:50:35

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。

蒙在股里 发表于 2015-3-27 18:06:50

我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。

再现理想 发表于 2015-4-3 04:36:41

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。

因胸联盟 发表于 2015-4-5 20:58:40

我想问如何掌握学习节奏(先学什么再学什么)最好详细点?

冷月葬花魂 发表于 2015-4-6 18:09:10

跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组

山那边是海 发表于 2015-4-11 21:06:07

尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。

兰色精灵 发表于 2015-4-21 05:31:26

作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。

仓酷云 发表于 2015-4-27 10:35:00

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

海妖 发表于 2015-4-29 05:55:42

我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。

谁可相欹 发表于 2015-4-30 15:09:56

不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍

若天明 发表于 2015-5-4 05:57:59

交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。

小魔女 发表于 2015-5-5 22:56:46

我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
页: [1]
查看完整版本: ASP网站制作之一种监听DataList中Calendar事务的处理...