|
[ToolboxData("<{0}:ExtjsDateTimeExtender runat=\"server\" />"),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class ExtjsDateTimeExtender : Control
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// Leave the default field shipped for IE as it works well
// Comment the following line to apply this patch to IE too.
if (Page.Request.Browser.Browser.Contains("IE")) return;
DateTimeControl dtControl = FindDateTimeControl(this.Parent);
if (dtControl.TimeOnly) return;
// Not a very elegant way but hey, it works...
String textBoxClientID = dtControl.Controls[0].ClientID;
ClientScriptManager cs = this.Page.ClientScript;
cs.RegisterClientScriptInclude("spdatetime", "/_layouts/spdatetime.js");
System.Text.StringBuilder script = new System.Text.StringBuilder();
script.AppendFormat("Ext.onReady(function() {{ ExtjsDateTimeConvert('{0}',", textBoxClientID);
if (dtControl.MinDate == DateTime.MinValue) script.Append("null,");
else script.AppendFormat("'{0:yyyyMMdd}',", dtControl.MinDate);
if (dtControl.MaxDate == DateTime.MaxValue) script.Append("null,");
else script.AppendFormat("'{0:yyyyMMdd}',", dtControl.MaxDate);
script.AppendFormat("{0}", dtControl.FirstDayOfWeek);
script.AppendLine("); });");
cs.RegisterClientScriptBlock(base.GetType(),
"extjsdatetime" + this.UniqueID.GetHashCode().ToString("X"),
script.ToString(), true);
}
private DateTimeControl FindDateTimeControl(Control templateContainer)
{
return (DateTimeControl) templateContainer.FindControl(this.Target);
}
/// <summary>
/// Gets or sets the ClientID of the DateTimeControl to extend.
/// If you leave empty, it will search for a control named DateTimeField inside its parent template.
/// </summary>
public String Target
{
get { return targetClientID ?? "DateTimeField"; }
set { targetClientID = value; }
}
}
|