asp.net中自定义日期控件方法(转载)

在最近开发的一个asp.net 2.0系统上,要给业务部门出数据,在查询界面上经常要用到一个日期选择框,2周前看了www.asp.net上发布的一本书Asp.net Data Tutorial,对asp.net的三层结构开发方式有了一定了解(DataSet, ObjectDataStore)。上周,下了两个asp.net上的范例程序代码,一个是Duwamish7,另一个是petshop3.0(j2ee平台上petstore的竞争版)。网上也有这两个程序的代码分析,Duwamish7采用自定义DataSet+sqlconnection封装存储过程的方式,petshop3.0则采用常见的三层结构,数据访问层DAL通过ORM映射,将结果表的一行映射成一个对象(比如Customer,Product,Order等,考虑了分页机制),业务逻辑层BLL处理参数校验等业务逻辑的实现,展现层处理数据的显示(内容和形式的分离)。看过代码后,感觉asp.net里边的自定义控件的功能还是很强大的。比起j2ee里边的标签库,代码复用程度更高,尤其适合于做各种表单查询控件。比如根据业务逻辑,将各种输入框、下拉框组合起来,进行复用。

    本系统中要用到一个日期输入框,日期标题可变(操作日期、申请日期、确认日期、开始日期、截止日期....),可以为空或者必须输入,光标在输入框中时,自动弹出日期选择框。结合这些需求,封装了一个日期选择控件。

asp端代码
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CustomDate.ascx.cs" Inherits="Control_StartEndDate" %>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:TextBox ID="txtEndDate" runat="server" onfocus="setday(this)" Width="88px" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtEndDate"
     Enabled="false" Display="None">
</asp:RequiredFieldValidator>

asp对应的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 Control_StartEndDate : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Label1.Text是动态变化的,所以验证信息也相应动态生成
        RequiredFieldValidator1.ErrorMessage = Label1.Text + "不能为空!";
    }

    // 当前日期字符串值
    public string DateString
    {
        get
        {
            return txtEndDate.Text;
        }
    }

    // 日期的标题名称(操作日期、申请日期、确认日期、开始日期、截止日期....)
 public string DateTitle
    {
        set
        {
            //"截止日期";
            Label1.Text = value;
        }
    }

 

    // 日期是否允许为空,即是否启用RequiredFieldValidator
    public bool Nullable
    {
        set
        {
            //bool nullable = bool.Parse(value);
            if (value == true)
                RequiredFieldValidator1.Enabled = false;
            else
                RequiredFieldValidator1.Enabled = true;
        }
    }

    // 初始日期字符串文本
    public string InitialText
    {
        set
        {
            txtEndDate.Text = value;
        }
    }

    // 初始日期值
    public String InitialDate
    {
        set
        {
            //if (IsPostBack) return;

            string dateStr = "";
            DateTime dt = DateTime.Today; // 取当日日期

            // 取上一开放日的日期
            if ("LastOpenDay".Equals(value))
            {
                // 为简单起见,上一个开放日取前天(要精确日期则必须查询数据库)
                DateTime newdt = dt.AddDays(-2);
dateStr = newdt.ToString("yyyy-MM-dd");
            }
            else if ("Today".Equals(value))
            {
                dateStr = dt.ToString("yyyy-MM-dd");
            }
            else
            {
            }
           
            txtEndDate.Text = dateStr;
        }
    }
}

使用范例
<%@ Page Language="C#" MasterPageFile="~/MasterPage/Navigation.master" AutoEventWireup="true"
    CodeFile="share4areadis.aspx.cs" Inherits="report_share4birthsex" Theme="Harvest" %>

 

<%@ Register Src="../Control/FundCodeList.ascx" TagName="FundCodeList" TagPrefix="uc1" %>
<%@ Register Src="../Control/CustomDate.ascx" TagName="CustomDate" TagPrefix="uc2" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

    <div>
        <uc1:FundCodeList ID="FundCodeList1" runat="server" ShowCustomItem="true" />
        <uc2:CustomDate ID="CustomDate1" runat="server" DateTitle="截止日期" Nullable="false"
            InitialDate="LastOpenDay" />
        <asp:Button ID="Button1" runat="server" Text="查询" OnClick="Button1_Click" />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="BulletList"
            ShowMessageBox="true" ShowSummary="false" />
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt"
Style="width: 100%; height: 120%">
            <LocalReport>
            </LocalReport>
        </rsweb:ReportViewer>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetShare4AreaDis"
            TypeName="VM.BusinessRule.CustAnalysis">
            <SelectParameters>
                <asp:ControlParameter ControlID="FundCodeList1" Name="FundCode" PropertyName="FundCode"
                    Type="String" />
                <asp:ControlParameter ControlID="CustomDate1" Name="EndDate" PropertyName="DateString"
                    Type="String" />
            </SelectParameters>
        </asp:ObjectDataSource>
    </div>
</asp:Content>

 

具体看<uc2:CustomDate ID="CustomDate1" runat="server" DateTitle="截止日期" Nullable="false"
            InitialDate="LastOpenDay" />这行,DateTitle为日期标题,Nullable设置是否允许为空,InitialDate设置初始日期(当天,上一个开放日)
<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="BulletList"
            ShowMessageBox="true" ShowSummary="false" />为验证汇总,将各个控件中的验证信息汇总起来,统一显示(ShowMessageBox="true"表示用弹出消息框的形式显示验证信息)。

posted on 2007-06-12 09:08  念时  阅读(603)  评论(0编辑  收藏  举报

细节决定成败!态度决定一切!