zoukankan      html  css  js  c++  java
  • 日期选择器

    为了实现报表,写了一个日期选择功能。可以参考下图:

    下面内容是在2011年8月21日更新添加的:

    实现这个功能,需要在数据库准备星期与月份的数据:

    星期函数:http://www.cnblogs.com/insus/articles/1622988.html

    月份函数:http://www.cnblogs.com/insus/articles/1535448.html

    准备好数据源之后,当然是写存储过程了,Insus.NET会以星期与月份分开写出来,首先是星期:

    usp_Week_GetByDate
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[usp_Week_GetByDate]
    (
        
    @Date DATETIME
    )
    AS
    DECLARE @Year INT = YEAR(@Date)
    SELECT * FROM udf_Week(@Year,@YearWHERE CONVERT(NVARCHAR(100),@Date,23BETWEEN [StartDate] and [EndDate] 

      

    usp_Week_GetByYear
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    ALTER PROCEDURE [dbo].[usp_Week_GetByYear]
    (
        
    @StartYear INT,
        
    @EndYear INT
    )
    AS
    SELECT * FROM [dbo].[udf_Week](@StartYear,@EndYear)

      

    usp_Week_GetByYearAndWeek
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO



    ALTER PROCEDURE [dbo].[usp_Week_GetByYearAndWeek]
    (
        
    @Year INT,
        
    @Week INT
    )
    AS

    SELECT * FROM udf_Week(@Year,@YearWHERE [Week] = @Week

    下面的是月份的存储过程:

    usp_Month_GetByDate
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO



    ALTER PROCEDURE [dbo].[usp_Month_GetByDate]
    (
        
    @Date DATETIME
    )
    AS
    DECLARE @Year INT = YEAR(@Date)
    SELECT * FROM udf_Month(@Year,@YearWHERE CONVERT(NVARCHAR(100),@Date,23BETWEEN [StartDate] and [EndDate] 

       

    usp_Month_GetByYear
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[usp_Month_GetByYear]
    (
        
    @StartYear INT,
        
    @EndYear INT
    )
    AS
    SELECT * FROM [dbo].[udf_Month](@StartYear,@EndYear)

      

    usp_Moth_GetByYearAndMonth
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[usp_Moth_GetByYearAndMonth]
    (
        
    @Year INT,
        
    @Month INT
    )
    AS

    SELECT * FROM udf_Month(@Year,@YearWHERE [Month] = @Month

    最后还再写一个存储过程,就是可浏览几年前的数据:

    usp_HistoryYear
    ALTER PROCEDURE [dbo].[usp_HistoryYear]
    (
        
    @Years INT
    )
    AS

    BEGIN
        
    IF OBJECT_ID('dbo.#HistoryYear'IS NOT NULL
        
    DROP TABLE dbo.#HistoryYear    
        
    CREATE TABLE  #HistoryYear 
         (   
            YearId 
    INT IDENTITY(1,1PRIMARY KEY NOT NULL,
            
    [Year] INT NOT NULL
         ) 
        
    BEGIN
            
    DECLARE @EndYear INT = (SELECT Year(GETDATE()))
            
    DECLARE @StartYear INT =@EndYear - (@Years - 1))    
            
    WHILE @StartYear <= @EndYear
            
    BEGIN    
                
    INSERT INTO #HistoryYear([Year]VALUES (@StartYear)    
                
    SET @StartYear = @StartYear + 1
            
    END  
        
    END      
    END

    SELECT * FROM #HistoryYear ORDER BY [YearId] DESC

    下面是星期与月份以及年份三个类别的实现。

    Week
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;

    /// <summary>
    /// Summary description for Week
    /// </summary>

    namespace Insus.NET
    {
        
    public class Week
        {
            BusinessBase objBusinessBase 
    = new BusinessBase();

            
    public Week()
            {
                
    //
                
    // TODO: Add constructor logic here
                
    //
            }

            
    public DataTable GetWeek(string startYear, string endYear)
            {
                Parameter[] parameter 
    = {                                      
                                            
    new Parameter ("@StartYear",SqlDbType.Int ,4,ConvertData.ToInt(startYear)),
                                            
    new Parameter ("@EndYear",SqlDbType.Int ,4,ConvertData.ToInt(endYear))
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_Week_GetByYear", parameter).Tables[0];
            }

            
    public DataTable GetWeekByYearAndWeek(string year, string week)
            {
                Parameter[] parameter 
    = {                                      
                                            
    new Parameter ("@Year",SqlDbType.Int ,4,ConvertData.ToInt(year)),
                                            
    new Parameter ("@Week",SqlDbType.Int ,4,ConvertData.ToInt(week))
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_Week_GetByYearAndWeek", parameter).Tables[0];
            }

            
    public DataTable GetWeekByDate(DateTime date)
            {
                Parameter[] parameter 
    = {                                    
                                            
    new Parameter ("@Date",SqlDbType.DateTime ,8,date)
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_Week_GetByDate", parameter).Tables[0];
            }   
        }
    }

      

    Month
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;

    /// <summary>
    /// Summary description for Month
    /// </summary>

    namespace Insus.NET
    {
        
    public class Month
        {
            BusinessBase objBusinessBase 
    = new BusinessBase();

            
    public Month()
            {
                
    //
                
    // TODO: Add constructor logic here
                
    //
            }

            
    public DataTable GetMonth(string startYear, string endYear)
            {
                Parameter[] parameter 
    = {                                      
                                            
    new Parameter ("@StartYear",SqlDbType.Int ,4,ConvertData.ToInt(startYear)),
                                            
    new Parameter ("@EndYear",SqlDbType.Int ,4,ConvertData.ToInt(endYear))
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_Month_GetByYear", parameter).Tables[0];
            }

            
    public DataTable GetMonthByYearAndMonth(string year, string month)
            {
                Parameter[] parameter 
    = {                                      
                                            
    new Parameter ("@Year",SqlDbType.Int ,4,ConvertData.ToInt(year)),
                                            
    new Parameter ("@Month",SqlDbType.Int ,4,ConvertData.ToInt(month))
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_Moth_GetByYearAndMonth", parameter).Tables[0];
            }

            
    public DataTable GetMonthByDate(DateTime date)
            {
                Parameter[] parameter 
    = {                                    
                                            
    new Parameter ("@Date",SqlDbType.DateTime ,8,date)
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_Month_GetByDate", parameter).Tables[0];
            }
        }
    }

       

    Year
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;

    /// <summary>
    /// Summary description for Year
    /// </summary>

    namespace Insus.NET
    {    
        
    public class Year
        {
            BusinessBase objBusinessBase 
    = new BusinessBase();

            
    public Year()
            {
                
    //
                
    // TODO: Add constructor logic here
                
    //
            }

            
    public DataTable GetHistoryYear(int years)
            {
                Parameter[] parameter 
    = {                                      
                                            
    new Parameter ("@Years",SqlDbType.Int ,4,years)
                                        };
                
    return objBusinessBase.GetDataToDataSet("usp_HistoryYear", parameter).Tables[0];
            }
        }
    }

     接下来,我们可以写三个用户控件UserControl,这个页需要时,接进去就可以了。

    DateSelector.ascx
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="DateSelector.ascx.cs"
        Inherits
    ="System_SystemControl_DateSelector" %>
    <table id="Table1" runat="server" cellpadding="0" cellspacing="0" border="0" width="100%">
        
    <tr>
            
    <td width="45px">
                日期:
            
    </td>
            
    <td align="left">
                
    <asp:TextBox ID="txtStartDate" runat="server" CssClass="textbox" Width="70px"></asp:TextBox>
                
    <img id="img2" src='<%= ResolveUrl("~/System/Image/Calendar.gif")%>' border="0" />
                
    <ajaxToolkit:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender3" runat="server"
                    TargetControlID
    ="txtStartDate" WatermarkText="开始日期" WatermarkCssClass="watermarked">
                
    </ajaxToolkit:TextBoxWatermarkExtender>
                
    <ajaxToolkit:CalendarExtender ID="CalendarExtender2" runat="server" TargetControlID="txtStartDate"
                    PopupButtonID
    ="img2" Format="yyyy-MM-dd">
                
    </ajaxToolkit:CalendarExtender>
                
    <asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtStartDate"
                    Operator
    ="DataTypeCheck" Type="date" Display="None" ErrorMessage="开始日期栏位,非有效日期!"></asp:CompareValidator>
                
    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtStartDate"
                    Display
    ="none" ErrorMessage="填写开始日期。"></asp:RequiredFieldValidator>
                至
                
    <asp:TextBox ID="txtEndDate" runat="server" CssClass="textbox" Width="70px"></asp:TextBox>
                
    <img id="img3" src='<%= ResolveUrl("~/System/Image/Calendar.gif")%>' border="0" />
                
    <ajaxToolkit:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender4" runat="server"
                    TargetControlID
    ="txtEndDate" WatermarkText="结束日期" WatermarkCssClass="watermarked">
                
    </ajaxToolkit:TextBoxWatermarkExtender>
                
    <ajaxToolkit:CalendarExtender ID="CalendarExtender3" runat="server" TargetControlID="txtEndDate"
                    PopupButtonID
    ="img3" Format="yyyy-MM-dd">
                
    </ajaxToolkit:CalendarExtender>
                
    <asp:CompareValidator ID="CompareValidator3" runat="server" ControlToValidate="txtEndDate"
                    Operator
    ="DataTypeCheck" Type="date" Display="None" ErrorMessage="结束日期栏位,非有效日期!"></asp:CompareValidator>
                
    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtEndDate"
                    Display
    ="none" ErrorMessage="填写结束日期。"></asp:RequiredFieldValidator>
                
    <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="txtEndDate"
                    ControlToCompare
    ="txtStartDate" Display="None" ErrorMessage="结束日期必须大于或等于开始日期!"
                    Operator
    ="GreaterThanEqual" Type="Date"></asp:CompareValidator>
            
    </td>
        
    </tr>
    </table>

      

    DateSelector.ascx.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;

    public partial class System_SystemControl_DateSelector : System.Web.UI.UserControl;
    {   
        
        
    protected void Page_Load(object sender, EventArgs e)
        {
          
        }

        
    public TextBox StartDate
        {
            
    get
            {
                
    return this.txtStartDate;
            }
        }

        
    public TextBox EndDate
        {
            
    get
            {
                
    return this.txtEndDate;
            }
        }
    }

      

    WeekSelector.ascx
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WeekSelector.ascx.cs"
        Inherits
    ="System_SystemControl_WeekSelector" %>
    <table id="Table1" runat="server" cellpadding="0" cellspacing="0" border="0" width="100%">
        
    <tr>
            
    <td width="45px">
                年份:
            
    </td>
            
    <td align="left">
                
    <asp:DropDownList ID="ddlYear" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlYear_SelectedIndexChanged">
                
    </asp:DropDownList>
                
    &nbsp;&nbsp;当前第<asp:Label ID="lblCurrentWeek" runat="server" Text="" ForeColor="Red"></asp:Label>周(<asp:Label
                    ID
    ="lblDate" runat="server" Text=""></asp:Label>)
            
    </td>
        
    </tr>
        
    <tr>
            
    <td width="45px" valign="top">
                
    <div style="height: 5px;">
                
    </div>
                周别:
            
    </td>
            
    <td align="left">
                
    <asp:DataList ID="dlWeek" runat="server" DataKeyField="WeekId" RepeatColumns="13"
                    RepeatDirection
    ="Horizontal">
                    
    <ItemTemplate>
                        
    <asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("Week") %>' ToolTip='<%# Eval("StartDate", "{0:yyyy-MM-dd}") + "~" + Eval("EndDate", "{0:yyyy-MM-dd}") %>' />
                    
    </ItemTemplate>
                
    </asp:DataList>
            
    </td>
        
    </tr>
    </table>

      

    WeekSelector.ascx.cs
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;

    public partial class System_SystemControl_WeekSelector : System.Web.UI.UserControl
       
        Week objWeek 
    = new Week();
        Year objYear 
    = new Year();    

        
    protected void Page_Load(object sender, EventArgs e)
        {
            
    if (!IsPostBack)
            {
                Data_Binding();
            }
        }   

        
    private void Data_Binding()
        {
            objListControlUtility.DropDownListParse(ddlYear, objYear.GetHistoryYear(
    5), "Year""YearId");

            DataRow dataRow 
    = objWeek.GetWeekByDate(DateTime.Now.Date).Rows[0];
            
    this.lblCurrentWeek.Text = dataRow["week"].ToString();
            
    this.lblDate.Text = objInsusDateTimeUtility.GetDateTime(dataRow["StartDate"], "yyyy-MM-dd"+ "" + objInsusDateTimeUtility.GetDateTime(dataRow["EndDate"], "yyyy-MM-dd");

            WeekBinding();
        }

        
    public DropDownList DropDownListYear
        {
            
    get
            {
                
    return this.ddlYear;
            }
        }

        
    public DataList DataListWeek
        {
            
    get
            {
                
    return this.dlWeek;
            }
        }

        
    protected void ddlYear_SelectedIndexChanged(object sender, EventArgs e)
        {
            WeekBinding();
        }

        
    private void WeekBinding()
        {
            
    string year = ddlYear.SelectedItem.Text;
            
    this.dlWeek.DataSource = objWeek.GetWeek(year, year);
            
    this.dlWeek.DataBind();
        }
    }

      

    MonthSelector.ascx
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="MonthSelector.ascx.cs"
        Inherits
    ="System_SystemControl_MonthSelector" %>
    <table id="Table1" runat="server" cellpadding="0" cellspacing="0" border="0" width="100%">
        
    <tr>
            
    <td width="45px">
                年份:
            
    </td>
            
    <td align="left">
                
    <asp:DropDownList ID="ddlYear" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlYear_SelectedIndexChanged">
                
    </asp:DropDownList>
                 
    &nbsp;&nbsp;当前第<asp:Label ID="lblCurrentMonth" runat="server" Text="" ForeColor="Red"></asp:Label>月份(<asp:Label
                    ID
    ="lblDate" runat="server" Text=""></asp:Label>)
            
    </td>
        
    </tr>
        
    <tr>
            
    <td width="45px" valign="top">
                
    <div style="height: 5px;">
                
    </div>
                月份:
            
    </td>
            
    <td align="left">
                
    <asp:DataList ID="dlMonth" runat="server" DataKeyField="MonthId" RepeatColumns="12"
                    RepeatDirection
    ="Horizontal">
                    
    <ItemTemplate>
                        
    <asp:CheckBox ID="CheckBox2" runat="server" Text='<%# Eval("Month") %>' ToolTip='<%# Eval("StartDate", "{0:yyyy-MM-dd}") + "~" + Eval("EndDate", "{0:yyyy-MM-dd}") %>' />
                    
    </ItemTemplate>
                
    </asp:DataList>
            
    </td>
        
    </tr>
    </table>

      

    MonthSelector.ascx.cs
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;

    public partial class System_SystemControl_MonthSelector : System.Web.UI.UserControl 
    {
        Month objMonth 
    = new Month();
        Year objYear 
    = new Year();      

        
    protected void Page_Load(object sender, EventArgs e)
        {
            
    if (!IsPostBack)
            {
                Data_Binding();
            }
        }

        
    private void Data_Binding()
        {
            objListControlUtility.DropDownListParse(ddlYear, objYear.GetHistoryYear(
    5), "Year""YearId");

            DataRow dataRow 
    = objMonth.GetMonthByDate(DateTime.Now.Date).Rows[0];
            
    this.lblCurrentMonth.Text = dataRow["Month"].ToString();
            
    this.lblDate.Text = objInsusDateTimeUtility.GetDateTime(dataRow["StartDate"], "yyyy-MM-dd"+ "" + objInsusDateTimeUtility.GetDateTime(dataRow["EndDate"], "yyyy-MM-dd");

            MonthBinding();
        }

        
    public DropDownList DropDownListYear
        {
            
    get
            {
                
    return this.ddlYear;
            }
        }

        
    public DataList DataListMonth
        {
            
    get
            {
                
    return this.dlMonth;
            }
        }

        
    protected void ddlYear_SelectedIndexChanged(object sender, EventArgs e)
        {
            MonthBinding();
        }

        
    private void MonthBinding()
        {
            
    string year = ddlYear.SelectedItem.Text;
            
    this.dlMonth.DataSource = objMonth.GetMonth(year, year);
            
    this.dlMonth.DataBind();
        }
    }

    终于把这几个用户控件代码帖完了。任务还没有完成,还要完成最终的功能效果,就是最开始的动画: 

    View Code
     <fieldset id="fieldset3" runat="server" style="position: relative; margin: 5px; padding: 5px;">
                    
    <legend>时间</legend>
                    
    <asp:RadioButtonList ID="rblDateType" runat="server" RepeatDirection="Horizontal"
                        AutoPostBack
    ="true" OnSelectedIndexChanged="rblDateType_SelectedIndexChanged">
                        
    <asp:ListItem Text="日期" Value="0"></asp:ListItem>
                        
    <asp:ListItem Text="周别" Value="1"></asp:ListItem>
                        
    <asp:ListItem Text="月份" Value="2"></asp:ListItem>
                    
    </asp:RadioButtonList>
                    
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="rblDateType"
                        Display
    ="none" ErrorMessage="选择时间。" SetFocusOnError="true"></asp:RequiredFieldValidator>
                    
    <div id="DivDay" runat="server" visible="false">
                        
    <insus:DateSelector ID="DateSelector1" runat="server" />
                    
    </div>
                    
    <div id="DivWeek" runat="server" visible="false">
                        
    <insus:WeekSelector ID="WeekSelector1" runat="server" />
                    
    </div>
                    
    <div id="DivMonth" runat="server" visible="false">
                        
    <insus:MonthSelector ID="MonthSelector1" runat="server" />
                    
    </div>
                
    </fieldset>

      

    View Code
     protected void rblDateType_SelectedIndexChanged(object sender, EventArgs e)
        {
            
    if (!string.IsNullOrEmpty(rblDateType.SelectedItem.Value))
            {
                
    switch (rblDateType.SelectedItem.Value)
                {
                    
    case "0":
                        
    this.DivDay.Visible = true;
                        
    this.DivWeek.Visible = false;
                        
    this.DivMonth.Visible = false;
                        
    break;
                    
    case "1":
                        
    this.DivDay.Visible = false;
                        
    this.DivWeek.Visible = true;
                        
    this.DivMonth.Visible = false;
                        
    break;
                    
    case "2":
                        
    this.DivDay.Visible = false;
                        
    this.DivWeek.Visible = false;
                        
    this.DivMonth.Visible = true;
                        
    break;
                }
            }
        }

    上面代码,只作为参考,如果你也想使用,在实现过程中,如果遇上问题,可以联系Insus.NET,除了QQ,其它联系方式均可,QQ上班不可以使用,最好是发送邮件。

  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/insus/p/2136892.html
Copyright © 2011-2022 走看看