一个日期选择控件,(半原创)

时间:2020-12-29 23:37:31
微软自带的日期控件感觉不太好用,到处找,最后客户写了个JS(客户也是搞开发的),我把JS封装了一下
比较简单,不写注释了
CS代码如下
  1 一个日期选择控件,(半原创)using  System;
  2 一个日期选择控件,(半原创) using  System.Collections.Generic;
  3 一个日期选择控件,(半原创) using  System.ComponentModel;
  4 一个日期选择控件,(半原创) using  System.Text;
  5 一个日期选择控件,(半原创) using  System.Web;
  6 一个日期选择控件,(半原创) using  System.Web.UI;
  7 一个日期选择控件,(半原创) using  System.Web.UI.WebControls;
  8 一个日期选择控件,(半原创) using  System.Security.Permissions;
  9 一个日期选择控件,(半原创)
 10 一个日期选择控件,(半原创)[assembly: WebResource( " WYN.WebControls.script_PopupCalender.js " " application/x-javascript " , PerformSubstitution  =   true )]
 11 一个日期选择控件,(半原创)[assembly:TagPrefix( " WYN " , " TextBoxCalendar " )]
 12 一个日期选择控件,(半原创) namespace  WYN.WebControls
 13 一个日期选择控件,(半原创)一个日期选择控件,(半原创) {
 14一个日期选择控件,(半原创)    [ToolboxData("<{0}:TextBoxCalendar runat=server></{0}:TextBoxCalendar>")]
 15一个日期选择控件,(半原创)    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
 16一个日期选择控件,(半原创)    public class TextBoxCalendar :TextBox
 17一个日期选择控件,(半原创)一个日期选择控件,(半原创)    {
 18一个日期选择控件,(半原创)
 19一个日期选择控件,(半原创)        [Bindable(true)]
 20一个日期选择控件,(半原创)        [Category("Appearance")]
 21一个日期选择控件,(半原创)        [DefaultValue("")]
 22一个日期选择控件,(半原创)        [Localizable(true)]
 23一个日期选择控件,(半原创)        [Description("控件选定的短日期字符串格式")]
 24一个日期选择控件,(半原创)        public string ShortDate
 25一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
 26一个日期选择控件,(半原创)            get
 27一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 28一个日期选择控件,(半原创)                if (String.IsNullOrEmpty(Text))
 29一个日期选择控件,(半原创)                    base.Text = System.DateTime.Now.Date.ToShortDateString();
 30一个日期选择控件,(半原创)
 31一个日期选择控件,(半原创)                return base.Text;
 32一个日期选择控件,(半原创)            }

 33一个日期选择控件,(半原创)
 34一个日期选择控件,(半原创)            set
 35一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 36一个日期选择控件,(半原创)                base.Text = value;
 37一个日期选择控件,(半原创)            }

 38一个日期选择控件,(半原创)        }

 39一个日期选择控件,(半原创)
 40一个日期选择控件,(半原创)        [Bindable(true)]
 41一个日期选择控件,(半原创)        [Category("Appearance")]
 42一个日期选择控件,(半原创)        [DefaultValue("")]
 43一个日期选择控件,(半原创)        [Localizable(true)]
 44一个日期选择控件,(半原创)        [Description("控件选定的日期")]
 45一个日期选择控件,(半原创)        public DateTime SelectedDate
 46一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
 47一个日期选择控件,(半原创)            get
 48一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 49一个日期选择控件,(半原创)                if (String.IsNullOrEmpty(Text))
 50一个日期选择控件,(半原创)                    base.Text = System.DateTime.Now.Date.ToShortDateString();
 51一个日期选择控件,(半原创)
 52一个日期选择控件,(半原创)                return Convert.ToDateTime(base.Text);
 53一个日期选择控件,(半原创)            }

 54一个日期选择控件,(半原创)            set
 55一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 56一个日期选择控件,(半原创)                base.Text = value.ToShortDateString();
 57一个日期选择控件,(半原创)            }

 58一个日期选择控件,(半原创)        }

 59一个日期选择控件,(半原创)
 60一个日期选择控件,(半原创)        [Browsable(false)]
 61一个日期选择控件,(半原创)        public override string Text
 62一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
 63一个日期选择控件,(半原创)            get
 64一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 65一个日期选择控件,(半原创)                return base.Text;
 66一个日期选择控件,(半原创)            }

 67一个日期选择控件,(半原创)            set
 68一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 69一个日期选择控件,(半原创)                ;
 70一个日期选择控件,(半原创)            }

 71一个日期选择控件,(半原创)        }

 72一个日期选择控件,(半原创)
 73一个日期选择控件,(半原创)        [Browsable(false)]
 74一个日期选择控件,(半原创)        public override TextBoxMode TextMode
 75一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
 76一个日期选择控件,(半原创)            get
 77一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 78一个日期选择控件,(半原创)                return base.TextMode;
 79一个日期选择控件,(半原创)            }

 80一个日期选择控件,(半原创)            set
 81一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 82一个日期选择控件,(半原创)                ;
 83一个日期选择控件,(半原创)            }

 84一个日期选择控件,(半原创)        }

 85一个日期选择控件,(半原创)
 86一个日期选择控件,(半原创)        [Browsable(false)]
 87一个日期选择控件,(半原创)        public override bool ReadOnly
 88一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
 89一个日期选择控件,(半原创)            get
 90一个日期选择控件,(半原创)一个日期选择控件,(半原创)            {
 91一个日期选择控件,(半原创)                return true;
 92一个日期选择控件,(半原创)            }

 93一个日期选择控件,(半原创)        }

 94一个日期选择控件,(半原创)
 95一个日期选择控件,(半原创)        protected override void OnLoad(EventArgs e)
 96一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
 97一个日期选择控件,(半原创)            // Define the resource name and type.
 98一个日期选择控件,(半原创)            String rsname = "WYN.WebControls.script_PopupCalender.js";
 99一个日期选择控件,(半原创)            Type rstype = this.GetType();
100一个日期选择控件,(半原创)
101一个日期选择控件,(半原创)            // Get a ClientScriptManager reference from the Page class.
102一个日期选择控件,(半原创)            ClientScriptManager cs = Page.ClientScript;
103一个日期选择控件,(半原创)       
104一个日期选择控件,(半原创)            // Register the client resource with the page.
105一个日期选择控件,(半原创)            cs.RegisterClientScriptResource(rstype, rsname);
106一个日期选择控件,(半原创)
107一个日期选择控件,(半原创)
108一个日期选择控件,(半原创)            base.OnLoad(e);
109一个日期选择控件,(半原创)        }

110一个日期选择控件,(半原创)
111一个日期选择控件,(半原创)        protected override void Render(HtmlTextWriter writer)
112一个日期选择控件,(半原创)一个日期选择控件,(半原创)        {
113一个日期选择控件,(半原创)            writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "PopupCalender();");
114一个日期选择控件,(半原创)            base.Render(writer);
115一个日期选择控件,(半原创)        }

116一个日期选择控件,(半原创)    }

117一个日期选择控件,(半原创)}

118 一个日期选择控件,(半原创)

JS文件如下
一个日期选择控件,(半原创)var  oPopup  =  window.createPopup();
一个日期选择控件,(半原创)
var  oSrc;
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
var  theDate;  
一个日期选择控件,(半原创)
var  theYear;
一个日期选择控件,(半原创)
var  theMonth;
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)theDate 
=   new  Date();
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  PopupCalender()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    
一个日期选择控件,(半原创)    
var s="<div style='background-color:#F5F5F5;width:310;padding:5px;'>" +
一个日期选择控件,(半原创)    
"<table style='font-size:9pt' cellspacing='0' cellpadding='0' bgcolor='#ffffff' style='margin-top:0px' width='300'>" +
一个日期选择控件,(半原创)    
"<tr><td><input id='b1' type='button' value='上一年' style='font-size:9pt'></td>" +
一个日期选择控件,(半原创)    
"<td><input id='b2' type='button' value='下一年' style='font-size:9pt'></td>" +
一个日期选择控件,(半原创)    
"<td width='60'><input name='theDate' type='text' value='' size='12' readonly style='font-size:9pt'></td>" +
一个日期选择控件,(半原创)    
"<td><input id='b3' type='button' value='上一月' style='font-size:9pt'></td>"+
一个日期选择控件,(半原创)    
"<td><input id='b4' type='button' value='下一月' style='font-size:9pt'></td></tr></table>" +
一个日期选择控件,(半原创)    
"<table style='font-size:9pt' border='1' cellspacing='1' cellpadding='1' bordercolor='#cccccc' id='C' bgcolor='#ffffff' style='margin-top:0px' width='300'>" +
一个日期选择控件,(半原创)    
"<tr style='background-color:#f0eada'>" +
一个日期选择控件,(半原创)    
"<td height='26'><font color='red'>星期日</font></td>" +
一个日期选择控件,(半原创)    
"<td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td><font color='blue'>星期六</font></td>" +
一个日期选择控件,(半原创)    
"</tr></table></div>"
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    oPopup.document.body.innerHTML 
= s;
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    oPopup.document.all.b1.onclick 
= pyear;
一个日期选择控件,(半原创)    oPopup.document.all.b2.onclick 
= nyear;
一个日期选择控件,(半原创)    oPopup.document.all.b3.onclick 
= pmonth;
一个日期选择控件,(半原创)    oPopup.document.all.b4.onclick 
= nmonth;
一个日期选择控件,(半原创)    
//oPopup.document.all.C.onclick=setTheDate;
一个日期选择控件,(半原创)

一个日期选择控件,(半原创)    oSrc 
= window.event.srcElement; 
一个日期选择控件,(半原创)    theYear 
= theDate.getFullYear();
一个日期选择控件,(半原创)    theMonth 
= theDate.getMonth();
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    displayC(
0);
一个日期选择控件,(半原创)    oPopup.show(
0024310176, oSrc);
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  pyear()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    theYear
--;    displayC(0);
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  nyear()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    theYear
++;    displayC(0);
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  pmonth()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    theMonth
--;    displayC(0);
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  nmonth()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    theMonth
++;    displayC(0);
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  getLastDay()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    
var lyear = theDate.getFullYear();
一个日期选择控件,(半原创)    
var lmonth = theDate.getMonth() + 1;
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
switch(lmonth)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)    
{
一个日期选择控件,(半原创)        
case 1:
一个日期选择控件,(半原创)        
case 3:
一个日期选择控件,(半原创)        
case 5:
一个日期选择控件,(半原创)        
case 7:
一个日期选择控件,(半原创)        
case 8:
一个日期选择控件,(半原创)        
case 10:
一个日期选择控件,(半原创)        
case 12:  return 31break;
一个日期选择控件,(半原创)        
case 4:
一个日期选择控件,(半原创)        
case 6:
一个日期选择控件,(半原创)        
case 9:
一个日期选择控件,(半原创)        
case 11:  return 30break;
一个日期选择控件,(半原创)        
case 2:   
一个日期选择控件,(半原创)            
if((lyear % 4)!=0)  return 28;
一个日期选择控件,(半原创)            
if((lyear % 100)!=0)  return 29;
一个日期选择控件,(半原创)            
return 28;        
一个日期选择控件,(半原创)    }

一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  getWeekDay()
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    
var lday = theDate.getDate();
一个日期选择控件,(半原创)    theDate.setDate(
1);
一个日期选择控件,(半原创)    
var lweekday = theDate.getDay();
一个日期选择控件,(半原创)    theDate.setDate(lday);
一个日期选择控件,(半原创)    
return lweekday;
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  displayC(ldate)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    
if(theMonth<0)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)    
{
一个日期选择控件,(半原创)        theMonth 
= 11;    theYear--;
一个日期选择控件,(半原创)    }

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
if(theMonth>11)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)    
{
一个日期选择控件,(半原创)        theMonth 
= 0;    theYear++;
一个日期选择控件,(半原创)    }

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
if(theYear<1000) theYear=1000;
一个日期选择控件,(半原创)    
if(ldate==0) ldate = theDate.getDate();
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    theDate.setDate(
1);
一个日期选择控件,(半原创)    theDate.setYear(theYear);
一个日期选择控件,(半原创)    theDate.setMonth(theMonth);
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
var lastday = getLastDay();
一个日期选择控件,(半原创)    
var weekday = getWeekDay();
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
if(ldate>lastday)
一个日期选择控件,(半原创)        theDate.setDate(lastday);
一个日期选择控件,(半原创)    
else
一个日期选择控件,(半原创)        theDate.setDate(ldate);
一个日期选择控件,(半原创)    
一个日期选择控件,(半原创)    
var objc = oPopup.document.all.C;
一个日期选择控件,(半原创)    
for(var i=objc.rows.length-1;i>0;i--)
一个日期选择控件,(半原创)        objc.deleteRow(i);
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
for(var i=0; i<42; i++)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)    
{
一个日期选择控件,(半原创)        
var col = i % 7;
一个日期选择控件,(半原创)        
var row = (i - col) / 7;
一个日期选择控件,(半原创)        
var d = i- weekday + 1;
一个日期选择控件,(半原创)        
//if(col == 0 && d> lastday) break;
一个日期选择控件,(半原创)

一个日期选择控件,(半原创)一个日期选择控件,(半原创)        
if(col ==0 ) var r = objc.insertRow(); r.style.cursor= "hand"; r.style.textAlign="center"; }
一个日期选择控件,(半原创)        c 
= r.insertCell();
一个日期选择控件,(半原创)        
if(d>0 && d<=lastday)
一个日期选择控件,(半原创)            c.innerText 
= d.toString();
一个日期选择控件,(半原创)        
else
一个日期选择控件,(半原创)            c.innerText 
= " ";
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)        c.attachEvent(
"onclick",setTheDate);
一个日期选择控件,(半原创)    }

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    showDay(objc, weekday);
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  showDay(objc, weekday)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    
var lday = theDate.getDate() + weekday - 1;
一个日期选择控件,(半原创)    
var col = lday % 7;
一个日期选择控件,(半原创)    
var row = (lday - col) / 7 + 1;
一个日期选择控件,(半原创)    objc.rows[row].cells[col].style.backgroundColor 
= "#999999";
一个日期选择控件,(半原创)    objc.rows[row].cells[col].style.color 
= "#ffffff";
一个日期选择控件,(半原创)            
一个日期选择控件,(半原创)    oPopup.document.all.theDate.value 
= theDate.getFullYear().toString() + "-" 
一个日期选择控件,(半原创)        
+ (theDate.getMonth() + 1).toString() + "-" 
一个日期选择控件,(半原创)        
+ theDate.getDate().toString();
一个日期选择控件,(半原创)    
一个日期选择控件,(半原创)}

一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
function  setTheDate(ev)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)
{
一个日期选择控件,(半原创)    
var obj = ev.srcElement;
一个日期选择控件,(半原创)    
var lday = parseInt(obj.innerText);
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    
if(isNaN(lday)) return;
一个日期选择控件,(半原创)    displayC(lday);
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)    oSrc.value 
= oPopup.document.all.theDate.value;
一个日期选择控件,(半原创)    oPopup.hide();
一个日期选择控件,(半原创)}

有一个地方要特别说明一下:
   由于不想让使用者见到JavaScript文件,不想让他们手工设JS路径,所以代码用到了2.0里的一个新东西
在Namespace上打上如下Attribt
[assembly: WebResource("WYN.WebControls.script_PopupCalender.js", "application/x-javascript", PerformSubstitution = true)]

注册JS的方法如下:
一个日期选择控件,(半原创)  protected   override   void  OnLoad(EventArgs e)
一个日期选择控件,(半原创)一个日期选择控件,(半原创)        
{
一个日期选择控件,(半原创)            
// Define the resource name and type.
一个日期选择控件,(半原创)
            String rsname = "WYN.WebControls.script_PopupCalender.js";
一个日期选择控件,(半原创)            Type rstype 
= this.GetType();
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)            
// Get a ClientScriptManager reference from the Page class.
一个日期选择控件,(半原创)
            ClientScriptManager cs = Page.ClientScript;
一个日期选择控件,(半原创)       
一个日期选择控件,(半原创)            
// Register the client resource with the page.
一个日期选择控件,(半原创)
            cs.RegisterClientScriptResource(rstype, rsname);
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)
一个日期选择控件,(半原创)            
base.OnLoad(e);
一个日期选择控件,(半原创)        }

然后在JS文件右击,选属性,生成操作(Build Action) 设为嵌入的资源

收工!可以用了