Настраиваемое событие OnTateChange DateTimeControl не запускается в SharePoint - PullRequest
0 голосов
/ 03 февраля 2011

Пользовательское событие для DateTimeControl не запускается. Вместо этого запускается CreateChildControls (), каждый раз, когда я меняю дату в Календаре.

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;
                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;
    }

}

}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

CreateChildControls () срабатывает, каждый раз, когда я меняю дату в Календаре

Но привязывается ли обработчик событий каждый раз?

В большинстве случаев яНе создавайте элементы управления в операторах if, вещи, как правило, неправильно подключены.

Попробуйте вместо этого просто сделать элемент управления невидимым.

dateTime = new DateTimeControl();
if (ControlMode == SPControlMode.New || ControlMode == SPControlMode.Edit)
{
    datetime.Visible = false;
0 голосов
/ 03 февраля 2011

Попробуйте создать элемент управления DateTimeControl на этапе PreInit или Init, а не в CreateChildControls. Возможная причина такого поведения - ваш элемент управления создан слишком поздно, когда жизненный цикл страницы прошел через обработку событий обратной передачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...