利用JS实现日期选择功能,包括润年2月的日数变更, 简单实用!

主要属性: Date

设计时图示: 

源代码:

using System;
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的日期选择下拉列表小控件相关推荐

  1. 9 款样式华丽的 jQuery 日期选择和日历控件

    现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...

  2. android日历控件之显示当前月份,Android 日历方式显示的日期选择组件(日历控件之一).doc...

    运行结果: 此Widget组件只包含五个类文件: DateWidget DateWidgetDayCell DateWidgetDayHeader DayStyle SymbolButton *红色为 ...

  3. android组件开关按钮,简单聊聊“开关”这个小控件

    开关虽然只是一个小控件,看起来很简单,但其实它的设计也有着大学问.本文和你一起探讨一下~ 一.开关是什么 开关,英文Switch,常被翻译为开关.滑动开关.切换开关,作为界面中可直接操作的元件,提供两 ...

  4. Android之RemoteViews篇上————通知栏和桌面小控件

    Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...

  5. Android上一种用于选择颜色的控件(颜色选择器)

    目录 引言 核心代码 控件整体代码 demo 引言 最近在做一个项目时其中有一个需求–自定义灯光颜色.要求通过手机端控制灯光颜色,手机端预设五种颜色及用户可自定义颜色.在百度上搜索找到一个开源的色环控 ...

  6. mac下dashboard小控件开发实例(附源码)

    1.背景          用mac的用户都应该知道,mac有一个很好的功能,就是dashboard小控件的功能,按下F12键就可以自由切换.博主最近在背GRE单词,就尝试这开发了一个背单词的dash ...

  7. 一个抓取电脑屏幕的小控件台程序

    一个抓取电脑屏幕的小控件台程序 using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  8. Flutter 一个电话样式小控件

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  9. 实现拖拽上传文件的一款小控件——dropzone

    由于专注所以专业.非常多小巧的东西乍一看非常不起眼,却在特定的领域表现不俗,就是由于集中了热情. dropzone就是这样一款小控件,实现拖拽上传.它不依赖于其他像jquery等JS库.并且支持多方面 ...

  10. Android UI设计之十一自定义ViewGroup,打造通用的关闭键盘小控件ImeObser

    2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 ...

最新文章

  1. C++类成员函数重载问题
  2. xml c libxml类库使用
  3. Linux命令——mv
  4. ASP.Net MVC 在ajax接收controller返回值为Json数据
  5. python 随机获取数组元素_Python创建二维数组的正确姿势
  6. Appium+Python移动端(Android)自动化测试环境搭建原来没有那么难!+ 带你实战去
  7. sonarqube没有html插件,spring-boot – 找不到id为’org.sonarqube’的插件
  8. linux glibc安装mysql_Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm
  9. 20.MySQL 常用命令
  10. python做网络图_使用Python的networkx绘制精美网络图教程
  11. 最大子序列、最长连续公共子串(连续)、最长公共子序列(动态规划)
  12. 【知乎解密(最新版-rpc版本)】
  13. SHAP:解释模型预测的通用方法
  14. 139邮箱服务器的ip,[原创]中国移动139邮箱和说客
  15. 打印机修复工具_打印机常见故障排除及修复方法
  16. 《Photoshop+Lightroom数码摄影后期处理经典教程》—第1章1.5节准备将Lightroom和Photoshop结合起来...
  17. 帝国织梦和各种php网页将局部广告进行屏蔽搜索引擎蜘蛛
  18. 【Python】未知来源的Python 2020期末考试试题,大家可以来答题学习了
  19. Java 8 并发篇 - 冷静分析 Synchronized(下)
  20. 职场必备技之二阶堂红丸

热门文章

  1. E-BERT: 电商领域语言模型优化实践
  2. 【Transformer】Transformer中16个注意力头一定要比1个注意力头效果好吗?
  3. 【面经】关于Transformer,面试官们都怎么问
  4. 【机器学习】萌新必学的 Top10 算法
  5. 20191202_2_识别偷税漏税人
  6. 每日算法系列【LeetCode 16】最接近的三数之和
  7. 金融评分卡项目—7.申请评分卡中的数据预处理和特征衍生
  8. mysql基础3-数据表的相关操作1
  9. Pandas文件读取详解
  10. 语音识别技术发展迅速,这本书是你需要的全方位解读语音识别的最新著作!