开发者

DateTimeControl Custom OnDateChange event not firing in SharePoint

The custom event for a DateTimeControl is not firing. Instead the CreateChildControls() is firing, every-time I change the date on Calendar.

namespace myn
{
    class StopTimeFieldControl : BaseFieldControl
    {
    protected DateTimeControl dateTime;

    public override object Value
    {
        get
        {
            EnsureChildControls();
            if (dateTime == null)
            {
                return string.Empty;
            }
            return dateTime.SelectedDate;
        }
        set
        {
            EnsureChildControls();
            dateTime.SelectedDate = Convert.ToDateTime(this.ItemFieldValue);
        }
    }

    protected override string DefaultTemplateName
    {
        get
        {
            return "StopTimeFieldControl";
        }
    }

    public override void Validate()
    {
        if (ControlMode == SPControlMode.Display || !IsValid)
        {
            //this.ViewState["StopTimeFieldControl"] = Value.ToString();
            return;
        }
        base.Validate();
        if (dateTime.IsDateEmpty)
        {
            this.ErrorMessage = " Du måste ange ett värde för det här obligatoriska fältet.";
            IsValid = false;
            return;
        }
        try
        {
            StartTimeFieldControl child = (StartTimeFieldControl)FindControlRecursive(this.Page, "startDateTime").Parent;
            if (dateTime.SelectedDate < Convert.ToDateTime(child.Value))
            {
                this.ErrorMessage = " Du måste ange ett värde som är senare än startdatum.";
                IsValid = false;
        开发者_C百科        return;
            }
        }
        catch (Exception e)
        {
            PortalLog.LogString("## Exception Occurred: Fail when trying to catch startDateTime ** {0} || {1}", e.Message, e.StackTrace);
        }
        this.Page.Session["startDateTime"] = Value;
    }

    protected override void CreateChildControls()
    {
        if (Field == null) return;
        base.CreateChildControls();
        if (ControlMode == Microsoft.SharePoint.WebControls.SPControlMode.Display)
            return;
        if (ControlMode == SPControlMode.New || ControlMode == SPControlMode.Edit)
        {
            dateTime = new DateTimeControl();
            dateTime.CssClassTextBox = "ms-long";
            dateTime.TimeZoneID = 1053;
            dateTime.LocaleId = 1053;
            dateTime.ID = "stopDateTime";
            dateTime.AutoPostBack = true;
            this.dateTime.DateChanged += new EventHandler(dateTime_DateChanged);
            Controls.Add(dateTime);
        }
        //ChildControlsCreated = true;
    }

    void dateTime_DateChanged(object sender, EventArgs e)
    {

        string hi = "hej";

    }

    public static Control FindControlRecursive(Control Root, string Id)
    {
        if (Root.ID == Id)
            return Root;
        foreach (Control Ctl in Root.Controls)
        {
            Control FoundCtl = FindControlRecursive(Ctl, Id);
            if (FoundCtl != null)
                return FoundCtl;
        }
        return null;
    }

}

}


Try to create your DateTimeControl control in PreInit or Init phase and not in CreateChildControls. Possible reason of such behaviour - your control is created too late, when page life cycle passed through postback event handling.


CreateChildControls() is firing, every-time I change the date on Calendar

But is the event handler being bound every time?

In most cases i dont create controls in if statements, things tend to not get wired up correctly.

Try just making the control invisible instead.

dateTime = new DateTimeControl();
if (ControlMode == SPControlMode.New || ControlMode == SPControlMode.Edit)
{
    datetime.Visible = false;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜