前段时间用过一个酒店入住预约网站,当你点击"入住时间"时会悬浮出一对并列的日历,然后点击左边的日历就能选择入住时间,点击右侧的日历就能自动得到离店时间,当时没有太留意是怎么实现的,现在在做项目时,需要这样的日期选择功能,又到了那个网站查看了源代码,发现好像是用js和div做出来的,在网上找了很多博客,希望得到这样的代码,但是都不尽如人意,由于我一点都不会js,这个模块又很重要,所以干脆自己做一个用户自定义控件吧,功能是实现了,但是美感和代码质量是一定比不上在客户端做了,如果有路过的朋友知道用js和div做我如下的效果,请一定给小女我留言,给我指点下迷津。

   第一步:制作自定义用户控件datecontrol.ascx,为了实现部分页面刷新,使用了vs2008中的Ajax控件组,在页面拖放scriptmanagerproxy及updatepanel控件,在updatepanel中放入一个label1、一个textbox1、一个button1,给button的text之中加入一个向下的箭头(可以从word文档中粘贴一个特殊符号▼,当然如果你有合适的ico也可以拖放一个imagebutton,修饰的更漂亮一些),然后在这三个并排的控件后加一个<br>,另起一行加入一个标准的calendar1(web)控件,实现效果是当点击button1时,才出现calendar1,textbox1的值就是选择的日期,label1提供了一个只写属性,给这个日历控件定义使用说明,如label1.value=“入店时间"或"开始时间"等。我们来看一下客户端源代码:

 


 1<%@ Control Language="C#" AutoEventWireup="true" CodeFile="datecontrol.ascx.cs" Inherits="datecontrol" %>    
 2            <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
 3</asp:ScriptManagerProxy>
 4             <asp:UpdatePanel ID="UpdatePanel1" runat="server">
 5                <ContentTemplate>
 6                    <asp:Label ID="Label1" runat="server"></asp:Label>
 7                    <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="a"></asp:TextBox>
 8                    <asp:Button ID="Button1" runat="server" Font-Size="XX-Small" 
 9                        ForeColor="#006600" Height="22px" onclick="Button1_Click" Text="" 
10                        Width="19px" /><br>
11                    <asp:Calendar ID="Calendar1" runat="server" BackColor="White" 
12                        BorderColor="#3366CC" BorderWidth="1px" CellPadding="1" 
13                        DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" 
14                        ForeColor="#003399" Height="82px" 
15                        onselectionchanged="Calendar1_SelectionChanged" Width="297px" 
16                        Visible="False">
17                        <SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
18                        <SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />
19                        <WeekendDayStyle BackColor="#CCCCFF" />
20                        <TodayDayStyle BackColor="#99CCCC" ForeColor="White" />
21                        <OtherMonthDayStyle ForeColor="#999999" />
22                        <NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />
23                        <DayHeaderStyle BackColor="#99CCCC" ForeColor="#336666" Height="1px" />
24                        <TitleStyle BackColor="#003399" BorderColor="#3366CC" BorderWidth="1px" 
25                            Font-Bold="True" Font-Size="10pt" ForeColor="#CCCCFF" Height="25px" />
26                    </asp:Calendar>                   
27                </ContentTemplate>
28            </asp:UpdatePanel>

 

设计页面的效果图如下:

 

第二步:实现自定义控件服务器端代码:

Code

 这样一个自定义的日历控件就写完了。

第三步:具体使用。现在我们来看一下具体怎么用这个自定义控件,下面是我现在做的一个项目,有个页面hisotrytime.aspx中用到时间段查询,我就使用了在这个页面中使用了两个自定义的日历控件,拖放到页面上的<tr>中,他们分别是date1、date2.在使用这个控件时,因为用到了Ajax,就必须加入一个scriptmanager,具体为什么加,小女因为没学过Ajax,只是在报错时vs提示必须加我就加上了,结果好用。现在还没有时间好好研究为什么,将来一定苦心专研技术,希望路过的朋友们提出自己的见解,我好吸取你的精华,加入到我的hisotrytime.aspx页面的效果图是这样的。

 图2      

 图3设置自定义控件lableText的只写属性(我们自己封装好的只写属性第二步中的第35行),添加内容“开始时间:”,date2中lableText=“结束时间”;

        在页面hisotrytime.aspx中添加一个imagebutton1,图片显示为“开始搜索”,也将是选择完开始时间和结束时间后,点击搜索,我的GridView7中,就填充好所有符合条件的数据,看一下我hisotrytime.aspx页面的客服端代码:

Code

 第四步:写客户端的js脚本,提示开始时间不能大于结束时间,因为本人基本上不会js,所以从网上找到了一个获得当前时间的一个js的代码,在这里谢谢这位仁兄,下面我们来看一下客户端源代码。

Code

 第20行的getdate()方法是获取当前时间,第37行bj()方法是比较开始时间不能大于结束时间,否则弹出对话款提示错误,在这里要说一下,39和47中的一串看似很奇怪的代码就是执行我的hisotry.aspx页面后,ie把我的自定义控件date1、date2中的textbox翻译成我们看到的源代码,找到这个源代码后,才能在客户端的脚本中判断它的.value了。

以上就是我总结的获取时间的日历控件的步骤,希望大家能用得上。

 

 

 

 

 

 

 

 

posted on 2008-11-21 16:34  叶子文文  阅读(2911)  评论(2编辑  收藏  举报