我想做一个自定义的日历控件,就是把星期五、星期一等换成“”一、“五”等。看了网上广为流传的“为你的Blog打造个性日历控件”一文,开始学着做。
1、新建项目,添加Web自定义控件,在页面上添加一个日历控件。
2、在代码中加入PreRender和DayRender事件。编译。
3、在要包含自定义日历控件的页中引用上面新建的项目,在ASPX页中加上注册项,在页面的合适位置添加控件。在上述过程中,编译成功过一次,不过执行页面时出现了找不到自定义日历控件的DayRender 和PreRender事件的提示,具体忘了,意思是在当前页面中找不到,可这两个事件是在ASCX.CS里面的啊。以后出的错是:“虚拟路径“/CustomCalendar.ascx”映射到另一个应用程序,这是不允许的。”我要是不把此自定义日历控件放在一个新项目里,还怎么实现控件重用呢?
1、新建项目,添加Web自定义控件,在页面上添加一个日历控件。
2、在代码中加入PreRender和DayRender事件。编译。
3、在要包含自定义日历控件的页中引用上面新建的项目,在ASPX页中加上注册项,在页面的合适位置添加控件。在上述过程中,编译成功过一次,不过执行页面时出现了找不到自定义日历控件的DayRender 和PreRender事件的提示,具体忘了,意思是在当前页面中找不到,可这两个事件是在ASCX.CS里面的啊。以后出的错是:“虚拟路径“/CustomCalendar.ascx”映射到另一个应用程序,这是不允许的。”我要是不把此自定义日历控件放在一个新项目里,还怎么实现控件重用呢?
!!!!!CustomCalendar.ascx的内容:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="CustomCalendar.ascx.cs" Inherits="Component.CustomCalendar" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<asp:Calendar ID="myclndr" Runat="server"></asp:Calendar>
CustomCalendar.ascx.cs
!!!!!CustomCalendar.ascx.sc的内容:
namespace Component
{
using System;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Threading;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls; /// <summary>
/// CustomCalendar 的摘要说明。
/// </summary>
public class CustomCalendar : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Calendar myclndr; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.myclndr.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler(this.myclndr_DayRender);
this.myclndr.PreRender += new System.EventHandler(this.myclndr_PreRender);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void myclndr_PreRender(object sender, System.EventArgs e)
{
Thread threadDQ=Thread.CurrentThread;
CultureInfo cltnf=(CultureInfo)threadDQ.CurrentCulture.Clone();
cltnf.DateTimeFormat.DayNames=new string[]{"日","一","二","三","四","五","六"};
cltnf.DateTimeFormat.FirstDayOfWeek=DayOfWeek.Sunday;
threadDQ.CurrentCulture=cltnf;
} private void myclndr_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
CalendarDay d=((DayRenderEventArgs)e).Day;
TableCell c=((DayRenderEventArgs)e).Cell;
}
}
}!!!!!使用该控件的页面的注册值:
<%@ Register TagPrefix="Component" TagName="CustomCalendar" Assembly ="Component" Src="\CustomCalendar.ascx"%>
!!!!!引用语句:
<Component:CustomCalendar id="myClndr" runat="server"></Component:CustomCalendar>
一)点击日历控件,在“事件”窗口中的杂项PreRender中引入那个函数名称PreRender,编译后就自动引入了。二)不需要在“web窗体设计器生成的代码”中引入,在calendar控件中加一句OnPreRender=PreRender,不过这时你可能要将PreRender函数设为protected
你说的方法是在自定义控件所在的ascx呢,还是在使用它的aspx中?
不过看过一篇asp.net10大不良习惯(很容易搜到的),说不会用自定义控件就是不会asp.net,才有学他的想法的。
本人最近网站改版,在做一个自己的博客站点,所以在网上查了一下资料,也看到了楼主讲到的“为你的Blog打造个性日历控件”一文,自己试着做了一下,的确受益匪浅,不过其中一些东西我觉得没有必要做的那么麻烦。如果楼主需要可以到我网站留下联系方式,或者直接发邮件到[email protected],我可以把我现在做的日历控件源码发给你。