My97DatePicker封装的日期控件

danjiewu 2010-09-27 12:04:55
My97DatePicker是我目前发现的最好的日期控件了,为了方便使用封装成ASP.Net控件。因为My97DatePicker设置参数太多只写了常用的几个,有需要的自己照样子改下就行了。
#if NoAjax这段是2.0下没有ScriptManager时使用。
需要下载My97DatePicker,默认My97DatePicker路径为当前应用的/My97DatePicker目录。
My97DatePicker下载地址


[DefaultProperty("Value")]
public class DateTimePicker : WebControl
{
public const string DefaultDateFormat = "yyyy-MM-dd";
public const string DefaultClass = "Wdate";
public const string DefaultMy97DatePickerFolder = "~/My97DatePicker";
public const bool DefaultIsShowToday = true;

public DateTimePicker()
{
DateFormat = DefaultDateFormat;
CssClass = DefaultClass;
My97DatePickerFolder = DefaultMy97DatePickerFolder;
IsShowToday = DefaultIsShowToday;
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Text
{
get
{
return Value == null ? String.Empty : Value.Value.ToString(DateFormat ?? DefaultDateFormat);
}
set
{
Value = String.IsNullOrWhiteSpace(value) ? null :
(DateTime?)DateTime.ParseExact(value, DateFormat ?? DefaultDateFormat, null);
}
}

public string StartDate { get; set; }

[DefaultValue(false)]
public bool AlwaysUseStartDate { get; set; }

[DefaultValue(DayOfWeek.Sunday)]
public DayOfWeek FirstDayOfWeek { get; set; }

[DefaultValue(DefaultDateFormat)]
public string DateFormat { get; set; }

[DefaultValue(ErrorDealMode.Warning)]
public ErrorDealMode ErrorDealMode { get; set; }

public string MinDate { get; set; }

public string MaxDate { get; set; }

public DateTime? Value
{
get;
set;
}

public TimeSpan? TimeOfDay
{
get { return Value.HasValue ? (TimeSpan?)Value.Value.TimeOfDay : null; }
set
{
if (value == null) Value = null;
else Value = Value.GetValueOrDefault().Date + value;
}
}

[DefaultValue(DefaultClass)]
public override string CssClass
{
get;
set;
}

[DefaultValue(DefaultIsShowToday)]
public bool IsShowToday { get; set; }

[DefaultValue(DefaultMy97DatePickerFolder)]
public string My97DatePickerFolder { get; set; }

protected override void OnInit(EventArgs e)
{
base.OnInit(e);
#if NoAjax
Page.ClientScript.RegisterClientScriptInclude(typeof(DateTimePicker), "My97DatePicker", ResolveUrl(My97DatePickerFolder.TrimEnd('/') + "/WdatePicker.js"));
#else
ScriptManager.RegisterClientScriptInclude(Page, typeof(DateTimePicker), "My97DatePicker", ResolveUrl(My97DatePickerFolder.TrimEnd('/') + "/WdatePicker.js"));
#endif
if (Page.IsPostBack)
{
Text = Page.Request.Form[UniqueID];
}
}

protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Input;
}
}

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
if (!String.IsNullOrEmpty(CssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
if (!String.IsNullOrEmpty(Text)) writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
string[] args = GenerateWdatePickerArgs();
if (args.Length > 0)
writer.AddAttribute("onfocus", String.Format("WdatePicker({{{0}}})", String.Join(",", args)));
else
writer.AddAttribute("onfocus", "WdatePicker()");

}

protected virtual string[] GenerateWdatePickerArgs()
{
List<string> args = new List<string>();
if (DateFormat != DefaultDateFormat && !String.IsNullOrEmpty(DateFormat)) args.Add(String.Format("dateFmt:'{0}'", DateFormat));
if (ErrorDealMode != 0) args.Add(String.Format("errDealMode:{0}", (int)ErrorDealMode));
if (FirstDayOfWeek != 0) args.Add(String.Format("firstDayOfWeek:{0}", (int)FirstDayOfWeek));
if (!String.IsNullOrEmpty(MinDate)) args.Add(String.Format("minDate:{0}", MinDate));
if (!String.IsNullOrEmpty(MaxDate)) args.Add(String.Format("maxDate:{0}", MaxDate));
if (IsShowToday != DefaultIsShowToday) args.Add(String.Format("isShowToday:{0}", IsShowToday ? "true" : "false"));
if (!String.IsNullOrEmpty(StartDate)) args.Add(String.Format("startDate:'{0}'", StartDate));
if (AlwaysUseStartDate) args.Add("alwaysUseStartDate:true");
return args.ToArray();
}
}

public enum ErrorDealMode
{
Warning,
Rollback,
PointOut
}
...全文
232 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxlee 2011-08-11
  • 打赏
  • 举报
回复
居然用了。net4.0 的String.IsNullOrWhiteSpace...
  • 打赏
  • 举报
回复
wwfgu00ing 2010-09-28
  • 打赏
  • 举报
回复
不错,一直在用
Adechen 2010-09-27
  • 打赏
  • 举报
回复
这个是挺不错的一个,支持。收藏
mengxj85 2010-09-27
  • 打赏
  • 举报
回复
支持分享
Snowdust 2010-09-27
  • 打赏
  • 举报
回复
沙发支持!
hongjiaoli 2010-09-27
  • 打赏
  • 举报
回复
支持楼主!不错。
liffe 2010-09-27
  • 打赏
  • 举报
回复
谢谢分享

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧