在.NET开发中,经常需要处理日期和时间。但是,许多开发者并没有充分利用.NET的System.Globalization类来获取不同语言的月份名称。通过这个类,可以轻松地获取从南非荷兰语到越南语的月份名称,而无需了解这些语言。此外,还增加了使用任何选择的日期格式的可能性。这个控件可以很好地与美国或欧洲的日期格式一起工作,并且支持Visual Studio设计器。
System.Globalization命名空间包含了定义与文化相关的信息的类,包括语言、国家/地区、使用的日历、日期、货币和数字的格式模式。
使用了David Truxall在CodeProject上找到的控件作为模板,并添加了以下功能:
以下是控件的一些属性及其默认值和描述:
以下是一些ASP.NET中的示例用法:
<%@ Register TagPrefix="cc1" Namespace="i386.UI" Assembly="i386.UI" %>
<cc1:dropdowndatetime id="DropDownDateTime1" runat="server" YearsForward="2" YearsBack="10" Culture="de-DE" SelectCurrentDate="False" MonthFormat="MMM">
</cc1:dropdowndatetime>
美国日期格式化:
<cc1:dropdowndatetime id="Dropdowndatetime4" runat="server" dateFormat="MM/dd/yyyy" Value="11/02/2005">
</cc1:dropdowndatetime>
首先,DateFormat默认设置为服务器当前使用的格式,除非设置了DateFormat属性。
private string _DateFormat = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;
public string Value {
get {
string s = (string)ViewState["Value"];
if (s == null) return String.Empty;
else return s;
}
set {
this.SetSelected(value);
ViewState["Value"] = value;
}
}
控件实现了IPostBackDataHandler接口,以管理在PostBack时控件值的重置。这与David Truxall的实现相同,除了构建postCollection的Value属性。
bool IPostBackDataHandler.LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) {
// ...
if (this.SelectedDay == -1 && this.SelectedMonth == -1 && this.SelectedYear == -1)
this.Value = "";
else {
// 根据DateFormat构建DateTime字符串
DateTimeFormatInfo formatInfo = new DateTimeFormatInfo();
formatInfo.FullDateTimePattern = DateFormat;
DateTime dt = new DateTime(this.SelectedYear, this.SelectedMonth, this.SelectedDay);
this.Value = dt.ToString(DateFormat, formatInfo);
}
}
构建子控件:
protected override void CreateChildControls() {
DateTime dt = DateTime.Today;
// ...
if (SelectCurrentDate && this.Value == "")
{
// 使用当前日期
SelectedDay = dt.Day;
SelectedMonth = dt.Month;
SelectedYear = dt.Year;
DateTimeFormatInfo formatInfo = new DateTimeFormatInfo();
formatInfo.FullDateTimePattern = DateFormat;
this.Value = dt.ToString(DateFormat, formatInfo);
}
// ...
Controls.Add(ddlboxDay);
Controls.Add(ddlboxMonth);
Controls.Add(ddlboxYear);
}
调试模式用于检查控件的当前状态。DebugMode输出Value、ViewStates、CultureInfo和DateFormat。要设置DebugMode,请使用DebugMode="true"。
<cc1:dropdowndatetime DebugMode="true" id="DropDownDateTime1" runat="server">
</cc1:dropdowndatetime>
以下是测试过的浏览器的简短列表。没有在电脑上安装Netscape。
从调试模式中,可能会注意到隐藏的输入框。在PostBack到服务器之前,可以使用JavaScript中的这个输入框。