• 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=" 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"表示用弹出消息框的形式显示验证信息)。

  • 相关阅读:
    [软件工程 2018西北师范大学]实验一 软件工程准备 评分
    【集美大学1411_助教博客】助教总结
    【集美大学1411_助教博客】团队作业10——项目复审与事后分析(Beta版本)
    【集美大学1411_助教博客】团队作业9——测试与发布(Beta版本)
    【集美大学1411_助教博客】团队作业8——第二次项目冲刺(Beta阶段)
    【集美大学1411_助教博客】alpha阶段后 成绩
    Javascript 异步加载详解
    复选框,全选或者全不选
    Java六大必须理解的问题
    写了一个Java的简单缓存模型
  • 原文地址:https://www.cnblogs.com/noahsky/p/1114746.html
Copyright © 2020-2023  润新知