65.9K
CodeProject 正在变化。 阅读更多。
Home

月年选择器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.29/5 (5投票s)

2012年6月8日

CPOL

1分钟阅读

viewsIcon

33005

downloadIcon

436

如何创建自己的月年选择器控件

介绍 

在本文结束时,你将能够创建自己的月份年份选择器。

为什么需要月份年份选择器?

在创建报表时,我们通常提供从日期到日期的筛选器,为此我们使用普通的 DateTimePicker。但最近我收到一个需求,需要提供“起始月份年份”到“结束月份年份”的报表筛选器。这可以使用对 JavaScript 进行一些修改的 DateTimePicker 实现。但在某些情况下我失败了,并决定创建自己的用户控件。

使用技术

.NET 3.5 框架,AJAX。

月份选择器控件

 
按照以下步骤创建你的月份年份选择器.

步骤 1. 创建一个用户控件

1. 右键单击项目,然后单击“添加新项”。
2. 选择 Web 用户控件,将其命名为“MonthYearPicker.ascx”,然后单击“添加”。
3. 现在将以下代码放入用户控件的设计部分

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="txtValue" runat="server" Enabled="false" BackColor="White">
        </asp:TextBox>
        <asp:Button ID="btnSelect" runat="server" Text="..." OnClick="btnSelect_Click" />
        <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
            <ProgressTemplate>
                loading...
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:Panel ID="pnlDate" runat="server" Visible="false" CssClass="DatePanel">
            <asp:DropDownList ID="ddlMonth" runat="server">
            </asp:DropDownList>
            <asp:DropDownList ID="ddlYear" runat="server">
            </asp:DropDownList>
            <asp:Button ID="btnSet" runat="server" Text="Set" OnClick="btnSet_Click" />
        </asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel> 

4. 将以下代码放入用户控件的代码隐藏文件。

    private string _TextBoxCss;
    public string TextBoxCss
    {
        get { return _TextBoxCss; }
        set { _TextBoxCss = value; }
    }

    private string _SelectButtonCss;
    public string SelectButtonCss
    {
        get { return _SelectButtonCss; }
        set { _SelectButtonCss = value; }
    }

    private string _SetButtonCss;
    public string SetButtonCss
    {
        get { return _SetButtonCss; }
        set { _SetButtonCss = value; }
    }

    private string _PanelCss;
    public string PanelCss
    {
        get { return _PanelCss; }
        set { _PanelCss = value; }
    }

    private int _MinYear;
    public int MinYear
    {
        get { return _MinYear; }
        set { _MinYear = value; }
    }

    private int _MaxYear;
    public int MaxYear
    {
        get { return _MaxYear; }
        set { _MaxYear = value; }
    }

    private int _MinMonth;
    public int MinMonth
    {
        get { return _MinMonth; }
        set { _MinMonth = value; }
    }

    private int _MaxMonth;
    public int MaxMonth
    {
        get { return _MaxMonth; }
        set { _MaxMonth = value; }
    }

    private string _Value;
    public string Value
    {
        get
        {
            _Value = GetSelectMonthYear();
            return _Value;
        }
        set { _Value = value; }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            txtValue.CssClass = _TextBoxCss;
            btnSelect.CssClass = _SelectButtonCss;
            btnSet.CssClass = _SetButtonCss;
            pnlDate.CssClass = _PanelCss;

            ddlYear.Items.Clear();
            _MinYear = _MinYear == 0 ? DateTime.MinValue.Year : _MinYear;
            _MaxYear = _MaxYear == 0 ? DateTime.MaxValue.Year : _MaxYear;
            for (int i = _MinYear; i <= _MaxYear; i++)
                ddlYear.Items.Add(new ListItem(i.ToString(), i.ToString()));

            ddlMonth.Items.Clear();
            _MinMonth = _MinMonth == 0 ? DateTime.MinValue.Month : _MinMonth;
            _MaxMonth = _MaxMonth == 0 ? DateTime.MaxValue.Month : _MaxMonth;
            for (int i = _MinMonth; i <= _MaxMonth; i++)
                ddlMonth.Items.Add(new ListItem(GetMonth(i), i.ToString()));


        }
    }

    private string GetSelectMonthYear()
    {
        string _ReturnValue = string.Empty;
        string _Month = string.Empty;

        if (!string.IsNullOrEmpty(txtValue.Text))
        {
            string[] _strValue = txtValue.Text.Split(' ');

            switch (Convert.ToString(_strValue[0]).ToLower())
            {
                case "jan":
                    _Month = "01";
                    break;
                case "feb":
                    _Month = "02";
                    break;
                case "mar":
                    _Month = "03";
                    break;
                case "apr":
                    _Month = "04";
                    break;
                case "may":
                    _Month = "05";
                    break;
                case "jun":
                    _Month = "06";
                    break;
                case "jul":
                    _Month = "07";
                    break;
                case "aug":
                    _Month = "08";
                    break;
                case "sep":
                    _Month = "09";
                    break;
                case "oct":
                    _Month = "10";
                    break;
                case "nov":
                    _Month = "11";
                    break;
                case "dec":
                    _Month = "12";
                    break;
                default:
                    break;
            }
            if (!(string.IsNullOrEmpty(_Month) & string.IsNullOrEmpty(Convert.ToString(_strValue[1]))))
            {
                _ReturnValue = _Month + "," + Convert.ToString(_strValue[1]);
            }

        }
        return _ReturnValue;
    }

    private string GetMonth(int Month)
    {
        string _ReturnValue = string.Empty;
        switch (Month)
        {
            case 1:
                _ReturnValue = "Jan";
                break;
            case 2:
                _ReturnValue = "Feb";
                break;
            case 3:
                _ReturnValue = "Mar";
                break;
            case 4:
                _ReturnValue = "Apr";
                break;
            case 5:
                _ReturnValue = "May";
                break;
            case 6:
                _ReturnValue = "Jun";
                break;
            case 7:
                _ReturnValue = "Jul";
                break;
            case 8:
                _ReturnValue = "Aug";
                break;
            case 9:
                _ReturnValue = "Sep";
                break;
            case 10:
                _ReturnValue = "Oct";
                break;
            case 11:
                _ReturnValue = "Nov";
                break;
            case 12:
                _ReturnValue = "Dec";
                break;
            default:
                break;
        }
        return _ReturnValue;
    }

    protected void btnSelect_Click(object sender, EventArgs e)
    {
        pnlDate.Visible = !pnlDate.Visible;
        if (pnlDate.Visible)
        {
            ddlMonth.SelectedValue = DateTime.Now.Month.ToString();
            ddlYear.SelectedValue = DateTime.Now.Year.ToString();
        }
    }

    protected void btnSet_Click(object sender, EventArgs e)
    {
        txtValue.Text = ddlMonth.SelectedItem.Text + " " + ddlYear.SelectedValue;
        pnlDate.Visible = false;
    }

步骤 2. 创建一个要放置此控件的页面

1. 右键单击项目,然后单击“添加新项”。
2. 选择 Web 表单,将其命名为“Default1.aspx”,然后单击“添加”。

4. 使用以下代码在 <html> 标签之上注册你创建的用户控件。

<%@ Register Src="~/UserControl/MonthYearPicker.ascx" TagName="MonthYearPicker" TagPrefix="myp" %>

3. 现在将以下代码放入页面的设计部分

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Month Year Picker</title>
    <style type="text/css">
        .DatePanel
        {
            position: absolute;
            background-color: #FFFFFF;
            border: 1px solid #646464;
            color: #000000;
            z-index: 1;
            font-family: tahoma,verdana,helvetica;
            font-size: 11px;
            padding: 4px;
            text-align: center;
            cursor: default;
            line-height: 20px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <table>
            <tr>
                <td>
                    Month Year
                </td>
                <td>
                    <myp:MonthYearPicker ID="mypMonthYear" runat="server" PanelCss="DatePanel" MinYear="2011"
                        MaxYear="2020" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    Show Value
                    <asp:Button ID="btnShow" runat="server" Text = "Show" OnClick="btnShow_Click" />
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html> 

4. 将以下代码放入页面的代码隐藏文件。

 protected void btnShow_Click(object sender, EventArgs e) 
    {
        Response.Write(mypMonthYear.Value);
    }  

完成了,你已经完成了你自己的月份年份选择器。

© . All rights reserved.