DatePicker(日期选择自定义服务器控件)的实现

服务器|控件|日期选择

在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;

}

}

/// <summary>

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

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

/// </summary>

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<objDateInfo.MonthNames.Length;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<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;

}

}

/// <summary>

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

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

/// </summary>

/// <param name="tw">HtmlTextWriter 对象</param>

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);

}

}

时间: 2024-11-04 22:40:18

DatePicker(日期选择自定义服务器控件)的实现的相关文章

WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展

原文:WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 日历控件Calendar自定义样式: 日期控件DatePicker自定义样式,及Label标签.水印.清除日期功能扩展: 二.Calendar自定义样式 先看看效果: 从上面图可以看出,日历的显示其实有三种

jQuery插件datepicker 日期连续选择

 先上效果: 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

Jquery日期选择datepicker插件用法实例分析

  本文实例讲述了Jquery日期选择datepicker插件用法.分享给大家供大家参考.具体如下: 1.首先将Jquery中的datepicker插件中的相关属性值改成中文的: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $.datepicker.regional['zh-CN'] = { clearText: '清除', clearStatus: '清除已选日期',

Jquery日期选择datepicker插件用法实例分析_jquery

本文实例讲述了Jquery日期选择datepicker插件用法.分享给大家供大家参考.具体如下: 1.首先将Jquery中的datepicker插件中的相关属性值改成中文的: $.datepicker.regional['zh-CN'] = { clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigTe

my97 datepicker-My97 DatePicker 中可以使日期选择框和显示日期的文本框绑定在一起吗?

问题描述 My97 DatePicker 中可以使日期选择框和显示日期的文本框绑定在一起吗? 做项目是用easyui,引进了My97 DatePicker控件,在浏览器窗口大小改变,而弹出的dialog不能居中,我专门写了一个事件使得浏览器窗口改变时,使dialog居中,其中有的dialog中有选择时间的文本框.当弹出dialog,触发时间的文本框onfocus事件,弹出日期选择框,此时改变浏览器窗口,整个dialog移动居中,但是日期选择框并没有移动.所以,想请教各位大神,怎么使My97 Da

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件           使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateCho

java-如何阻止用户在 datepicker 中选择过去的日期?

问题描述 如何阻止用户在 datepicker 中选择过去的日期? 我在程序中使用 datepicker 对话框.当用户从Dialog中选择任何日期时,我不想让用户选出 已经过了的日期.代码如下: private DatePickerDialog.OnDateSetListener mdateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker vie

浅谈Bootstrap的DatePicker日期范围选择_AJAX相关

用日期插件时,经常会有一种需求.两个input框选择.开始时间小于结束时间,结束时间大于开始时间,开始时间和结束时间都不大于当前时间. 我们当然可以用选择的结果来判断输入正确与否.但是更好的办法是让我们的日期选择插件做出一些限制. Bootstrap搭配了很优秀的日期选择插件.DatePicker和DateTimePicker. 两者功能很类似.使用方法也是差不多的.DatePicker支持更多的事件和设置. 看api知道日期变化的时候会有一个事件changeDate.当选择的日期变化的时候,会

jQuery插件datepicker 日期连续选择_javascript技巧

先上效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&quo