高分是手段,求助是目的,散分是结果:用户Calendar控件的问题(月份转换时的bug)
做了一个Calendar.ascx(参考自CodeProjects)
思路: 一个TextBox 一个asp:Calendar(一开始隐藏,浮动,放在一个Div里面)
结果: 点TextBox或者图标,出现Calendar ,选完时间写到TextBox或者点关闭图标就关闭
问题: 转换月份的时候,Calendar就消失
完整代码:
1.Calendar.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HexieCalendar.ascx.cs" Inherits="UserControl_HexieCalendar" %>
<!--这个函数是实现哪个Calendar显示或隐藏-->
<script type="text/javascript" language="javascript">
function <%= this.ClientName %>_SetDisplay(doDisplay)
{
if(doDisplay == true)
{
document.getElementById('<%= this.ClientName %>').style.display='block';
}
else
{
document.getElementById('<%= this.ClientName %>').style.display='none';
}
}
</script>
<table><tr>
<td valign="top" align="left" nowrap onclick="javascript:<%= this.ClientName %>_SetDisplay(true);">
<asp:TextBox ID="txtDate" runat="server" MaxLength="10" OnTextChanged="txtDate_TextChanged" Width="100px" ></asp:TextBox>
<asp:Image ID="imgDisplayCalendar" runat="server" ImageUrl="~/images/calendar/calendar.jpg" />
</td>
</tr></table>
<div id="<%= this.ClientName %>" style=" position:absolute; display:none" >
<table style="background-repeat:no-repeat; font-size:10pt" cellpadding="1" cellspacing="0">
<tr>
<td align="right" valign="top" style=" height:14px; font-size:10px; font-weight:bold; font-family:Arial, Helvetica, sans-serif; color:#FFFFFF; background-color:#CCCCCC; ">和谐日历控件
<a href="#" onclick="<%= this.ClientName %>_SetDisplay(false);">
<img id="imgX" alt="" style="border:0; top:0px" src="../images/calendar/x.gif"/></a>
</td>
</tr>
<tr >
<td >
<asp:Calendar ID="calDate" runat="server"
OnSelectionChanged="calDate_SelectionChanged" >
</asp:Calendar>
</td>
</tr>
</table>
</div>
2.Calendar.ascx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class UserControl_HexieCalendar : System.Web.UI.UserControl
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
protected void Page_Load(object sender, EventArgs e)
{
}
public string ClientName //得到自定义名字
{
get { return this.ClientID + "_Selectable"; }
}
protected void txtDate_TextChanged(Object sender, EventArgs e)
{
}
protected void calDate_SelectionChanged(Object sender, EventArgs e)//把时间写到TextBox
{
txtDate.Text = calDate.SelectedDate.ToShortDateString();
}
}