zoukankan      html  css  js  c++  java
  • 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"表示用弹出消息框的形式显示验证信息)。

  • 相关阅读:
    c:forTokens标签循环输出
    jsp转long类型为date,并且格式化
    spring中@Param和mybatis中@Param使用区别(暂时还没接触)
    734. Sentence Similarity 有字典数组的相似句子
    246. Strobogrammatic Number 上下对称的数字
    720. Longest Word in Dictionary 能连续拼接出来的最长单词
    599. Minimum Index Sum of Two Lists两个餐厅列表的索引和最小
    594. Longest Harmonious Subsequence强制差距为1的最长连续
    645. Set Mismatch挑出不匹配的元素和应该真正存在的元素
    409. Longest Palindrome 最长对称串
  • 原文地址:https://www.cnblogs.com/noahsky/p/1114746.html
Copyright © 2011-2022 走看看