首先是以下这几项, // 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();
}
}
}