Eric的日期选择下拉列表小控件
利用JS实现日期选择功能,包括润年2月的日数变更, 简单实用!
主要属性: Date
设计时图示:
源代码:
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
[assembly: TagPrefix("EFPlatform.WebControls", "efp")]
namespace EFPlatform.WebControls
{
[DefaultProperty("Date")]
[ToolboxData("<{0}:DateDropDownList runat=server></{0}:DateDropDownList>")]
public class DateDropDownList : WebControl, INamingContainer
{
#region Properties
#region Data(数据)
#region Date
[Bindable(true)]
[Category("Data")]
[DefaultValue("1900-1-1")]
public DateTime Date
{
get
{
this.GetDate();
return (ViewState["Date"] == null) ? (new DateTime(1900, 1, 1)) : (DateTime)ViewState["Date"];
}
set
{
ViewState["Date"] = value;
}
}
#endregion
#region FirstYear
[Category("Data")]
[DefaultValue(1900)]
public int FirstYear
{
get
{
return (ViewState["FirstYear"] == null) ? 1900 : (int)ViewState["FirstYear"];
}
set
{
ViewState["FirstYear"] = value;
}
}
#endregion
#region LastYear
[Category("Data")]
public int LastYear
{
get
{
return (ViewState["LastYear"] == null) ? DateTime.Now.Year : (int)ViewState["LastYear"];
}
set
{
ViewState["LastYear"] = value;
}
}
#endregion
#endregion
#region Appearance(外观)
#region SelectCssClass
[Category("Appearance")]
public string SelectCssClass
{
get
{
return (ViewState["SelectCssClass"] == null) ? string.Empty : (string)ViewState["SelectCssClass"];
}
set
{
ViewState["SelectCssClass"] = value;
}
}
#endregion
#region YearTitle
[Category("Appearance")]
[DefaultValue("年")]
public string YearTitle
{
get
{
return (ViewState["YearTitle"] == null) ? "年" : (string)ViewState["YearTitle"];
}
set
{
ViewState["YearTitle"] = value;
}
}
#endregion
#region MonthTitle
[Category("Appearance")]
[DefaultValue("月")]
public string MonthTitle
{
get
{
return (ViewState["MonthTitle"] == null) ? "月" : (string)ViewState["MonthTitle"];
}
set
{
ViewState["MonthTitle"] = value;
}
}
#endregion
#region DayTitle
[Category("Appearance")]
[DefaultValue("日")]
public string DayTitle
{
get
{
return (ViewState["DayTitle"] == null) ? "日" : (string)ViewState["DayTitle"];
}
set
{
ViewState["DayTitle"] = value;
}
}
#endregion
#endregion
#endregion
#region GetDate
private void GetDate()
{
if(Page.IsPostBack)
{
string strYear = Page.Request.Form[this.ClientID + "_Year"];
string strMonth = Page.Request.Form[this.ClientID + "_Month"];
string strDay = Page.Request.Form[this.ClientID + "_Day"];
ViewState["Date"] = DateTime.Parse(string.Format("{0}-{1}-{2}", strYear, strMonth, strDay));
}
}
#endregion
#region BuildJScript
private string BuildJScript()
{
StringBuilder sb = new StringBuilder();
sb.Append(" <script language="jscript"> <!-- ");
sb.Append("function {0}_Day_Check() {{ ");
sb.Append("var {0}_obj_Year = document.getElementById("{0}_Year"); ");
sb.Append("var {0}_obj_Month = document.getElementById("{0}_Month"); ");
sb.Append("if(parseInt({0}_obj_Month.value) == 2) {{ ");
sb.Append("if(parseInt({0}_obj_Year.value) % 4 == 0) {{ ");
sb.Append("{0}_Day_SetOptions(29); }} ");
sb.Append("else {{ ");
sb.Append("{0}_Day_SetOptions(28); }} }} ");
sb.Append("else {{ ");
sb.Append("switch(parseInt({0}_obj_Month.value)) {{ ");
sb.Append("case 1: {0}_Day_SetOptions(31); break; ");
sb.Append("case 3: {0}_Day_SetOptions(31); break; ");
sb.Append("case 5: {0}_Day_SetOptions(31); break; ");
sb.Append("case 7: {0}_Day_SetOptions(31); break; ");
sb.Append("case 8: {0}_Day_SetOptions(31); break; ");
sb.Append("case 10: {0}_Day_SetOptions(31); break; ");
sb.Append("case 12: {0}_Day_SetOptions(31); break; ");
sb.Append("case 4: {0}_Day_SetOptions(30); break; ");
sb.Append("case 6: {0}_Day_SetOptions(30); break; ");
sb.Append("case 9: {0}_Day_SetOptions(30); break; ");
sb.Append("case 11: {0}_Day_SetOptions(30); break; ");
sb.Append("default: break; }} }} }} ");
sb.Append(" ");
sb.Append("function {0}_Day_SetOptions({0}_Day_Count) {{ ");
sb.Append("var {0}_obj_Day = document.getElementById("{0}_Day"); ");
sb.Append("var {0}_Day_SelectedDay; ");
sb.Append("if({0}_obj_Day.value == "") {{ ");
sb.Append("{0}_Day_SelectedDay = 1; }} ");
sb.Append("else {{ ");
sb.Append("{0}_Day_SelectedDay = parseInt({0}_obj_Day.value); }} ");
sb.Append("if({0}_Day_SelectedDay > {0}_Day_Count) {{ ");
sb.Append("{0}_Day_SelectedDay = {0}_Day_Count; }} ");
sb.Append("{0}_obj_Day.length = 0; ");
sb.Append("for(var i = 1; i <= {0}_Day_Count; i++) {{ ");
sb.Append("{0}_obj_Day.options.add(new Option(i, i)); }} ");
sb.Append("{0}_obj_Day.value = {0}_Day_SelectedDay; }} ");
sb.Append("--> </script> ");
return string.Format(sb.ToString(), this.ClientID);
}
#endregion
#region BuildHtmlElement
private string BuildHtmlElement()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat(" <select id="{0}_Year" name="{0}_Year" οnchange="{0}_Day_Check();" class="{1}">", this.ClientID, this.SelectCssClass);
for(int i = this.FirstYear; i <= this.LastYear; i++)
{
if(i == this.Date.Year)
{
sb.AppendFormat(" <option value="{0}" selected>{0}</option>", i);
}
else
{
sb.AppendFormat(" <option value="{0}">{0}</option>", i);
}
}
sb.AppendFormat(" </select> {1}<select id="{0}_Month" name="{0}_Month" οnchange="{0}_Day_Check();" class="{2}">", this.ClientID, this.YearTitle, this.SelectCssClass);
for(int i = 1; i <= 12; i++)
{
if(i == this.Date.Month)
{
sb.AppendFormat(" <option value="{0}" selected>{0}</option>", i);
}
else
{
sb.AppendFormat(" <option value="{0}">{0}</option>", i);
}
}
sb.AppendFormat(" </select>{1}<select id="{0}_Day" name="{0}_Day" οnmοuseοver="{0}_Day_Check();" class="{2}">", this.ClientID, this.MonthTitle, this.SelectCssClass);
for(int i = 1; i <= DateTime.DaysInMonth(this.Date.Year, this.Date.Month); i++)
{
if(i == this.Date.Day)
{
sb.AppendFormat(" <option value="{0}" selected>{0}</option>", i);
}
else
{
sb.AppendFormat(" <option value="{0}">{0}</option>", i);
}
}
sb.AppendFormat(" </select>{0} ", this.DayTitle);
return sb.ToString();
}
#endregion
#region override RenderChildren
protected override void RenderChildren(HtmlTextWriter writer)
{
writer.Write(this.BuildJScript());
writer.Write(this.BuildHtmlElement());
base.RenderChildren(writer);
}
#endregion
}
}
转载于:https://www.cnblogs.com/zgqys1980/archive/2006/11/06/551645.html
Eric的日期选择下拉列表小控件相关推荐
- 9 款样式华丽的 jQuery 日期选择和日历控件
现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...
- android日历控件之显示当前月份,Android 日历方式显示的日期选择组件(日历控件之一).doc...
运行结果: 此Widget组件只包含五个类文件: DateWidget DateWidgetDayCell DateWidgetDayHeader DayStyle SymbolButton *红色为 ...
- android组件开关按钮,简单聊聊“开关”这个小控件
开关虽然只是一个小控件,看起来很简单,但其实它的设计也有着大学问.本文和你一起探讨一下~ 一.开关是什么 开关,英文Switch,常被翻译为开关.滑动开关.切换开关,作为界面中可直接操作的元件,提供两 ...
- Android之RemoteViews篇上————通知栏和桌面小控件
Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...
- Android上一种用于选择颜色的控件(颜色选择器)
目录 引言 核心代码 控件整体代码 demo 引言 最近在做一个项目时其中有一个需求–自定义灯光颜色.要求通过手机端控制灯光颜色,手机端预设五种颜色及用户可自定义颜色.在百度上搜索找到一个开源的色环控 ...
- mac下dashboard小控件开发实例(附源码)
1.背景 用mac的用户都应该知道,mac有一个很好的功能,就是dashboard小控件的功能,按下F12键就可以自由切换.博主最近在背GRE单词,就尝试这开发了一个背单词的dash ...
- 一个抓取电脑屏幕的小控件台程序
一个抓取电脑屏幕的小控件台程序 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- Flutter 一个电话样式小控件
在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...
- 实现拖拽上传文件的一款小控件——dropzone
由于专注所以专业.非常多小巧的东西乍一看非常不起眼,却在特定的领域表现不俗,就是由于集中了热情. dropzone就是这样一款小控件,实现拖拽上传.它不依赖于其他像jquery等JS库.并且支持多方面 ...
- Android UI设计之十一自定义ViewGroup,打造通用的关闭键盘小控件ImeObser
2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 ...
最新文章
- C++类成员函数重载问题
- xml c libxml类库使用
- Linux命令——mv
- ASP.Net MVC 在ajax接收controller返回值为Json数据
- python 随机获取数组元素_Python创建二维数组的正确姿势
- Appium+Python移动端(Android)自动化测试环境搭建原来没有那么难!+ 带你实战去
- sonarqube没有html插件,spring-boot – 找不到id为’org.sonarqube’的插件
- linux glibc安装mysql_Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm
- 20.MySQL 常用命令
- python做网络图_使用Python的networkx绘制精美网络图教程
- 最大子序列、最长连续公共子串(连续)、最长公共子序列(动态规划)
- 【知乎解密(最新版-rpc版本)】
- SHAP:解释模型预测的通用方法
- 139邮箱服务器的ip,[原创]中国移动139邮箱和说客
- 打印机修复工具_打印机常见故障排除及修复方法
- 《Photoshop+Lightroom数码摄影后期处理经典教程》—第1章1.5节准备将Lightroom和Photoshop结合起来...
- 帝国织梦和各种php网页将局部广告进行屏蔽搜索引擎蜘蛛
- 【Python】未知来源的Python 2020期末考试试题,大家可以来答题学习了
- Java 8 并发篇 - 冷静分析 Synchronized(下)
- 职场必备技之二阶堂红丸