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上班不可以使用,最好是发送邮件。

  • 相关阅读:
    Plotagraph软件五分钟光速速成傻瓜教程
    QT插件+ROS 2 新建项目
    QT插件+ROS 1 安装配置
    GitHub 优秀的 Android 开源项目 (精品)
    ROS的launch文件
    编写第一个 Shell 脚本
    CMake 入门实战
    ROS 创建服务和请求
    ROS 小乌龟测试
    【转】C++中的虚函数的实现
  • 原文地址:https://www.cnblogs.com/insus/p/2136892.html
Copyright © 2011-2022 走看看