自定义控件

本文介绍了一个使用ASP.NET自定义的日期选择控件。该控件通过四个下拉列表分别选择年、月、起始日和结束日,并利用JavaScript进行联动更新。文章详细展示了控件的设计与实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是以下这几项, // Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的
 
        //工具箱中拖动自定义控件时为它生成的默认标记
 
          [DefaultProperty("Text"),
 
                    ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")]

上面这些是放在自定义控件的表头的。

这里放在属性那,当然可放可不放。
//Attribute Bindable指定属性是否通常用于绑定
 
//Category指定属性或事件将显示在可视化设计器中的类别
 
//DefalutValue用于指定属性的默认值
 
                    [Bindable(true),
 
                               Category("Appearance"),
 
                               DefaultValue("")]  

 

以下是我写的一个自定义日期的控件,不是很完,  但功能都有了, 采用JS方式来联动。

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;


namespace control
{

   
  [ ToolboxData("<{0}:Class2 runat=server></{0}:Class2>")]
    public class Class2 : System.Web.UI.WebControls.WebControl
    {


        public DropDownList ddlYear = new DropDownList();

        public DropDownList ddlMonth = new DropDownList();

        public DropDownList ddlFirstDay = new DropDownList();

        public DropDownList ddlLastDay = new DropDownList();

 

        public string sm = "";
        public string sd = "";


   
  
  public Class2()
 {
        ddlYear.Attributes.Add("onchange", "DateChange()");
        ddlMonth.Attributes.Add("onchange", "DateChange()");

        this.Controls.Add(ddlYear);
        this.Controls.Add(ddlMonth);
        this.Controls.Add(ddlFirstDay);
        this.Controls.Add(ddlLastDay);

 }

 

      
        protected override void OnInit(EventArgs e)
        {

            this.ddlYear.Items.Clear();
            this.ddlMonth.Items.Clear();
            this.ddlFirstDay.Items.Clear();
            this.ddlLastDay.Items.Clear();
            //算出月份的
            int  IsYear=int.Parse(DateTime.Now.Month.ToString());
            int  IsYear2=int.Parse(DateTime.Now.Year.ToString());
            int  IsDay=int.Parse(DateTime.Now.Day.ToString());
         
            for (int i = 2000; i <= 2050; i++)
            {
                ddlYear.Items.Add(new ListItem(i.ToString(), i.ToString()));
            }
            for (int i = 1; i <= 12; i++)
            {
                sm = strPadLeft(i.ToString());
                ddlMonth.Items.Add(new ListItem(sm, sm));
            }
           int[] monthofday=new int[12]{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31  };
          

            if ((IsYear2 % 4 == 0 && IsYear2 % 100 != 0) || IsYear2 % 400 == 0)
            {
               monthofday[1]=29;
            }

            for (int i = 1; i <= monthofday[IsYear-1]; i++)
            {
                sd = strPadLeft(i.ToString());
                ddlFirstDay.Items.Add(new ListItem(sd, sd));
                ddlLastDay.Items.Add(new ListItem(sd, sd));
            }

            this.ddlYear.SelectedIndex = IsYear2-2000;
            this.ddlMonth.SelectedIndex = IsYear-1;
            ddlFirstDay.SelectedIndex = IsDay - 1;
            ddlLastDay.SelectedIndex = IsDay - 1;


          
        }
      // 填充的
        private string strPadLeft(string str)
        {
            return str.PadLeft(2, '0');
        }


        protected override void Render(HtmlTextWriter output)
        {
            AddAttributesToRender(output);

            output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Cellpadding, "0", false);
            output.RenderBeginTag(HtmlTextWriterTag.Table);
            output.RenderBeginTag(HtmlTextWriterTag.Tr);
            output.RenderBeginTag(HtmlTextWriterTag.Td);

            ddlYear.RenderControl(output);
            output.Write("年");
            ddlMonth.RenderControl(output);
            output.Write("月");
            ddlFirstDay.RenderControl(output);
            output.Write("日--");
            ddlLastDay.RenderControl(output);
            output.Write("日");
       
       
          output.Write(@"<script language='javascript'>
function DateChange()
   {


  var monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

  if((document.getElementById('ctl02').value%4==0 &&document.getElementById('ctl02').value%100!=0)||document.getElementById('ctl02').value%400==0    )
 {        
    monthDays[1]=29;
}

  var monthofday= document.getElementById('ctl03').value;

monthofday=monthofday.substring(1,2);

var FirstDay=document.getElementById('ctl04');
FirstDay.length=0;

var LastDay=document.getElementById('ctl05');
LastDay.length=0;

 


for(i=1;i<=monthDays[monthofday-1];i++)
      {
       var optF=new Option(i,i);
       var optL=new Option(i,i);
       document.all.ctl04.options[i-1]=optF;
       document.all.ctl05.options[i-1]=optL;
      }

 


}
</script>");

 

          output.RenderEndTag();
          output.RenderEndTag();
          output.RenderEndTag();
       
        }
       

    } 

 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值