怎样修改服务器日期控件,DatePicker(日期选择自定义服务器控件)的实现-.NET教程,数据库应用...

在dotnet中有用户自定义控件(.ascx)和服务器控件(程序代码)

webcontrol 类提供所有 web 服务器控件的公共属性、方法和事件。通过设置在此类中定义的属性,可以控制 web 服务器控件的外观和行为。

例如在community中datepicker控件的实现

public class datepicker : webcontrol, inamingcontainer {

dropdownlist dropmonth;

dropdownlist dropday;

dropdownlist dropyear;

public int month {

get {

if (viewstate["month"] == null)

return datetime.now.month;

else

return (int)viewstate["month"];

}

set { viewstate["month"] = value; }

}

public int day {

get {

if (viewstate["day"] == null)

return datetime.now.day;

else

return (int)viewstate["day"];

}

set { viewstate["day"] = value; }

}

public int year {

get {

if (viewstate["year"] == null)

return datetime.now.year;

else

return (int)viewstate["year"];

}

set {

viewstate["year"] = value;

}

}

public datetime date {

get {

//确定服务器控件是否包含子控件。如果不包含,则创建子控件。

ensurechildcontrols();

int _year = int32.parse(dropyear.selecteditem.value);

int _month = int32.parse(dropmonth.selecteditem.value);

int _day = int32.parse(dropday.selecteditem.value);

if (_day > datetime.daysinmonth(_year, _month) )

throw new argumentexception("invalid date!");

return new datetime

(

_year,

_month,

_day

);

}

set {

month = value.month;

day = value.day;

year = value.year;

}

}

///

/// 通知使用基于合成的实现的服务器控件创建它们包含的任何子控件,以便为回发或呈现做准备。

/// 当开发复合服务器控件或模板服务器控件时,必须重写此方法。

///

protected override void createchildcontrols() {

dropmonth = new dropdownlist();

controls.add(dropmonth);

dropday = new dropdownlist();

controls.add(dropday);

dropyear = new dropdownlist();

controls.add(dropyear);

if (!page.ispostback) {

// get a datetimeformatinfo object

datetimeformatinfo objdateinfo = datetimeformatinfo.currentinfo;

// display months

for (int i=1;i

dropmonth.items.add(new listitem(objdateinfo.getmonthname(i), i.tostring()));

// display days

for (int i=1;i<32;i++)

dropday.items.add(i.tostring());

// display years

for (int i=datetime.now.year – 5;i

dropyear.items.add(i.tostring());

dropmonth.items.findbyvalue(month.tostring()).selected = true;

dropday.items.findbyvalue(day.tostring()).selected = true;

dropyear.items.findbyvalue(year.tostring()).selected = true;

}

}

///

/// 将服务器控件内容发送到提供的 htmltextwriter 对象,此对象编写将在客户端呈现的内容。

/// 在开发自定义服务器控件时,可以重写此方法以生成 asp.net 页的内容。

///

/// htmltextwriter 对象

protected override void render(htmltextwriter tw) {

// get date parts

string[] dateparts;

try {

datetimeformatinfo objdateinfo = datetimeformatinfo.currentinfo;

//modify by yukh ,because in some objdateinfo.shortdatepattern seperate by "-" eg: yyyy-m-d

if (objdateinfo.shortdatepattern.indexof("/")>0)

dateparts = objdateinfo.shortdatepattern.split(/);

else

dateparts = objdateinfo.shortdatepattern.split(-);

}

catch {

dateparts = new string[]{"m","d","y"};

}

tw.renderbegintag(htmltextwritertag.table);

tw.renderbegintag(htmltextwritertag.tr);

tw.renderbegintag(htmltextwritertag.td);

renderdatepart(dateparts[0],tw);

tw.renderendtag();

tw.renderbegintag(htmltextwritertag.td);

renderdatepart(dateparts[1],tw);

tw.renderendtag();

tw.renderbegintag(htmltextwritertag.td);

renderdatepart(dateparts[2],tw);

tw.renderendtag();

tw.renderendtag(); // close row

tw.renderendtag(); // close table

}

private void renderdatepart(string datepart,htmltextwriter tw) {

datepart = datepart.tolower();

if (datepart.startswith("m"))

dropmonth.rendercontrol(tw); //将服务器控件子级的内容输出到提供的 htmltextwriter 对象,

//此对象编写将在客户端呈现的内容。

else

if (datepart.startswith("d"))

dropday.rendercontrol(tw);

else

dropyear.rendercontrol(tw);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值