RadScheduler ajax refresh (Q1 2014 2014.1.403.40)

2 posts, 0 answers
  1. Pierre-Henri
    Pierre-Henri avatar
    6 posts
    Member since:
    Jun 2011

    Posted 19 May 2014 Link to this post

    Hi,

    I have an issue refreshing a radscheduler using Telerik ajax
    My page contains a RadTabStrip, one of which is containing a RadScheduler.
    When I update one of my page element using Telerik ajax, I would like my scheduler to be regreshed but despite my Appointments list is being refreshed server side, the scheduler is not refreshed clietn side whereas another ajaxified field is.
    I have readed many threads on the forum but i still did not find a solution

    Below are some extract of the code:

    .aspx
    <telerik:RadAjaxManager ID="PageRadAjaxManager" runat="server" OnAjaxRequest="PageRadAjaxManager_AjaxRequest">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="PageRadAjaxManager">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="TxtIltExtid" />
                            <telerik:AjaxUpdatedControl ControlID="InstructorId" />
                            <telerik:AjaxUpdatedControl ControlID="LblInstructorName" />
                            <telerik:AjaxUpdatedControl ControlID="IltRoomId" />
                            <telerik:AjaxUpdatedControl ControlID="LblIltRoomName" />
                            <telerik:AjaxUpdatedControl ControlID="InstructorRadGrid" />
                            <telerik:AjaxUpdatedControl ControlID="DiaryRadScheduler" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                    <telerik:AjaxSetting AjaxControlID="InstructorRadGrid">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="InstructorRadGrid" />
                        </UpdatedControls
                    </telerik:AjaxSetting>
                    <telerik:AjaxSetting AjaxControlID="DiaryRadScheduler">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="DiaryRadScheduler" />
                        </UpdatedControls
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>

    <telerik:RadPageView runat="server" ID="lsched_diary_pv" TabIndex="2">
                            <div class="LschedAdminContent">
                                <br />
                                <telerik:radscheduler runat="server" id="DiaryRadScheduler"
                                    DataKeyField="ID" DataSubjectField="Subject" DataStartField="Start" DataEndField="End" DataDescriptionField="Description"
                                    DataRecurrenceField="RecurrenceRule" DataRecurrenceParentKeyField="RecurrenceParentId" DataReminderField="Reminder"
                                    OnAppointmentDataBound="DiaryRadScheduler_AppointmentDataBound"
                                    AllowDelete="false" AllowEdit="false" AllowInsert="false" EnableDescriptionField="true"
                                    EnableRecurrenceSupport="false" EnableResourceEditing="false" EnableExactTimeRendering="false"
                                    DayStartTime="08:00:00" DayEndTime="20:00:00" WorkDayStartTime="08:00:00" WorkDayEndTime="20:00:00"
                                    WeekView-DayStartTime="08:00:00" WeekView-DayEndTime="20:00:00" WeekView-WorkDayStartTime="08:00:00" WeekView-WorkDayEndTime="20:00:00" WeekView-EnableExactTimeRendering="true"
                                    MultiDayView-DayStartTime="08:00:00" MultiDayView-DayEndTime="20:00:00" MultiDayView-WorkDayStartTime="08:00:00" MultiDayView-WorkDayEndTime="20:00:00" MultiDayView-NumberOfDays="5" MultiDayView-EnableExactTimeRendering="true"
                                    AppointmentStyleMode="Auto" SelectedView="WeekView"
                                    StartEditingInAdvancedForm="true" StartInsertingInAdvancedForm="true"
                                    ShowHeader="true" ShowFooter="true" ShowAllDayRow="false" ShowDateHeaders="true" ShowFullTime="false" OverflowBehavior="Expand"
                                    RowHeight="25px" RowHeaderWidth="50px" MinutesPerRow="60" TimeLabelRowSpan="2"
                                    FirstDayOfWeek="Monday" LastDayOfWeek="Sunday" HoursPanelTimeFormat="HH:mm tt"
                                    OnResourceHeaderCreated="DiaryRadScheduler_ResourceHeaderCreated" GroupBy="Type">
                                    <DayView HeaderDateFormat="d" UserSelectable="true" />
                                    <WeekView HeaderDateFormat="d" UserSelectable="true" />
                                    <MonthView HeaderDateFormat="d" UserSelectable="true" />
                                    <AgendaView HeaderDateFormat="d" UserSelectable="false" />
                                    <TimelineView UserSelectable="false" />
                                    <MultiDayView UserSelectable="false" />
                                    <AdvancedForm Modal="true" />
                                    <ResourceHeaderTemplate>
                                        <asp:Panel ID="HeaderLabelWrapper" runat="server">
                                            <%# Eval("Text") %>
                                        </asp:Panel>
                                    </ResourceHeaderTemplate>
                                    <AppointmentTemplate>
                                        <%# Eval("Subject") %><br /><%# Eval("Description") %>
                                    </AppointmentTemplate>
                                </telerik:radscheduler>
                            </div>
                        </telerik:RadPageView>

    .aspx.cs

    ...
    using Telerik.Web.UI;
    ...
     
    namespace WBTManager.manageILT
    {
        public partial class lsched : System.Web.UI.Page
        {
            #region Variables
            ...
            List<AppointmentInfo> Appointments = new List<AppointmentInfo>();
            #endregion Variables
     
            protected void Page_Init(object sender, EventArgs e)
            {
                ...
            }
     
            protected void Page_Load(object sender, EventArgs e)
            {
                #region Session or ViewState
                ...
                if (ViewState["Appointments"] != null)
                    Appointments = (List<AppointmentInfo>)ViewState["Appointments"];
                #endregion Session or ViewState
     
                if (!IsPostBack)
                {
                    ...
     
                    #region Fill values
                    ...
                    // Schedule Pageview
                    if (oLsched != null && (oLsched.Iltroom_Id > 0 || oLsched.Instruc_Id > 0))
                    {
                        // RadScheduler culture
                        DiaryRadScheduler.Culture = new System.Globalization.CultureInfo(sCulture);
                        // RadScheduler default date
                        DiaryRadScheduler.SelectedDate = DateTime.Now;
                        // RadScheduler fill
                        InitializeResources();
                        InitializeAppointments();
                        DiaryRadScheduler.DataSource = Appointments;
                        DiaryRadScheduler.DataBind();
                    }
                    ...
                    #endregion Fill values
     
                    ...
                }
     
                ...
            }
     
            protected void Page_PreRender(object sender, EventArgs e)
            {
                ...
                if (Appointments != null)
                    ViewState["Appointments"] = Appointments;
            }
     
            protected void BtnSubmit_Click(object sender, EventArgs e)
            {
                ...
            }
     
            // Ajax request
            public void PageRadAjaxManager_AjaxRequest(object sender, AjaxRequestEventArgs e)
            {
                bool bRefreshLessonGrid = false;
                bool bRefreshDiary = false;
                string argument = (e.Argument);
                string[] argumentArray = argument.Split("|".ToCharArray(), StringSplitOptions.None);
                ...
                string sUpdateScript = "";
                if (bRefreshDiary && oLsched != null)
                {
                    //DiaryRadScheduler.Resources.Clear();
                    //DiaryRadScheduler.Appointments.Clear();
                    // RadScheduler fill
                    Appointments = new List<AppointmentInfo>();
                    InitializeResources();
                    InitializeAppointments();
                    DiaryRadScheduler.DataSource = Appointments;
                    DiaryRadScheduler.DataBind();
                    //sUpdateScript += "setTimeout(\"forceCalendarRender()\", 500);";
                }
               ...
                if (!string.IsNullOrWhiteSpace(sUpdateScript))
                    ScriptManager.RegisterStartupScript(Page, typeof(Page), "UpdateScript", sUpdateScript, true);
            }
     
            protected void DiaryRadScheduler_ResourceHeaderCreated(object sender, ResourceHeaderCreatedEventArgs e)
            {
                Panel HeaderLabelWrapper = e.Container.FindControl("HeaderLabelWrapper") as Panel;
                if (e.Container.Resource.Key.ToString() == "0")
                    HeaderLabelWrapper.CssClass = "ResourceIlt";
                else if (e.Container.Resource.Key.ToString() == "1")
                    HeaderLabelWrapper.CssClass = "ResourceInstructor";
            }
     
            protected void DiaryRadScheduler_AppointmentDataBound(object sender, Telerik.Web.UI.SchedulerEventArgs e)
            {
                if (e.Appointment.Resources.GetResourceByType("Type") != null)
                {
                    switch ((int)e.Appointment.Resources.GetResourceByType("Type").Key)
                    {
                        case 0:
                            e.Appointment.CssClass = "rsCategoryILT";
                            break;
                        case 1:
                            e.Appointment.CssClass = "rsCategoryInstructor";
                            break;
                        default:
                            break;
                    }
                }
            }
     
            private void InitializeResources()
            {
                // 0 Room
                // 1 Instructor
                DiaryRadScheduler.ResourceTypes.Clear();
                ResourceType resType = new ResourceType("Type");
                resType.ForeignKeyField = "Type";
                DiaryRadScheduler.ResourceTypes.Add(resType);
                DiaryRadScheduler.Resources.Clear();
                //DiaryRadScheduler.Resources.Add(new Resource("Type", 0, oLoc.GetString("LblDiaryTypeRoom", oUser.Subdomain) + ((oLsched.Iltroom_Id > 0) ? " : " + LblIltRoomName.Text : "")));
                DiaryRadScheduler.Resources.Add(new Resource("Type", 0, oLoc.GetString("LblDiaryTypeRoom", oUser.Subdomain) + " : " + LblIltRoomName.Text));
                //DiaryRadScheduler.Resources.Add(new Resource("Type", 1, oLoc.GetString("LblDiaryTypeInstructor", oUser.Subdomain) + ((oLsched.Instruc_Id > 0) ? " : " + LblInstructorName.Text : "")));
                DiaryRadScheduler.Resources.Add(new Resource("Type", 1, oLoc.GetString("LblDiaryTypeInstructor", oUser.Subdomain) + " : " + LblInstructorName.Text));
            }
     
            private void InitializeAppointments()
            {
                DiaryRadScheduler.Appointments.Clear();
                // Display booking for the room
                if (oLsched.Iltroom_Id > 0)
                {
                    DataSet dSchedule = Iltroom.GetIltroomScheduleDS(oLsched.Iltroom_Id, oUser.Lang_Id);
                    foreach (DataRow mSchedule in dSchedule.Tables["Schedule"].Rows)
                    {
                        #region Room
                        DateTime mTmpStartTime;
                        DateTime.TryParse(mSchedule["SCHSTART"].ToString(), out mTmpStartTime);
                        DateTime mTmpEndTime;
                        DateTime.TryParse(mSchedule["SCHEND"].ToString(), out mTmpEndTime);
                        string mTmpCourse = mSchedule["COURSE_NAME"].ToString();
                        string mTmpCsExtid = mSchedule["CS_EXTID"].ToString();
                        string mTmpLesson = mSchedule["LESSON_NAME"].ToString();
                        string mTmpLsExtid = mSchedule["LS_EXTID"].ToString();
                        string mTmpInstructor = mSchedule["INSTRUCTOR"].ToString();
     
                        if (mTmpStartTime != DateTime.MinValue && mTmpStartTime != new DateTime(1900, 1, 1) &&
                            mTmpEndTime != DateTime.MinValue && mTmpEndTime != new DateTime(1900, 1, 1) &&
                            !string.IsNullOrWhiteSpace(mTmpCourse) && !string.IsNullOrWhiteSpace(mTmpLesson) &&
                            !string.IsNullOrWhiteSpace(mTmpCsExtid) && !string.IsNullOrWhiteSpace(mTmpLsExtid))
                        {
                            string sSubject = oLoc.GetString("LblCourse", oUser.Subdomain) + " : " + mTmpCourse + Environment.NewLine + mTmpCsExtid;
                            string sDescription = oLoc.GetString("LblLesson", oUser.Subdomain) + " : " + mTmpLesson + Environment.NewLine + mTmpLsExtid;
                            if (!string.IsNullOrWhiteSpace(mTmpInstructor))
                                sDescription += "<br />" + oLoc.GetString("LblInstructor", oUser.Subdomain) + " : " + mTmpInstructor;
                            Appointments.Add(new AppointmentInfo(sSubject, sDescription, mTmpStartTime, mTmpEndTime, string.Empty, null, string.Empty, 0));
                        }
                        #endregion Room
                    }
                }
                // Display booking for the instructor
                if (oLsched.Instruc_Id > 0)
                {
                    DataSet dSchedule = Students.GetLschinstrucDS(oLsched.Instruc_Id,  oUser.Lang_Id, false, DateTime.Now);
                    foreach (DataRow mLschinstruc in dSchedule.Tables["Lschinstruc"].Rows)
                    {
                        #region Instructor
                        DateTime mTmpStartTime;
                        DateTime.TryParse(mLschinstruc["SCHSTART"].ToString(), out mTmpStartTime);
                        DateTime mTmpEndTime;
                        DateTime.TryParse(mLschinstruc["SCHEND"].ToString(), out mTmpEndTime);
                        string mTmpCourse = mLschinstruc["COURSE_NAME"].ToString();
                        string mTmpCsExtid = mLschinstruc["CS_EXTID"].ToString();
                        string mTmpLesson = mLschinstruc["LESSON_NAME"].ToString();
                        string mTmpLsExtid = mLschinstruc["LS_EXTID"].ToString();
                        string mTmpCenter = mLschinstruc["ILTLOC_NAME"].ToString();
                        string mTmpRoom = mLschinstruc["ILTROOM_NAME"].ToString();
     
                        if (mTmpStartTime != DateTime.MinValue && mTmpStartTime != new DateTime(1900, 1, 1) &&
                            mTmpEndTime != DateTime.MinValue && mTmpEndTime != new DateTime(1900, 1, 1) &&
                            !string.IsNullOrWhiteSpace(mTmpCourse) && !string.IsNullOrWhiteSpace(mTmpLesson) &&
                            !string.IsNullOrWhiteSpace(mTmpCsExtid) && !string.IsNullOrWhiteSpace(mTmpLsExtid))
                        {
                            string sSubject = oLoc.GetString("LblCourse", oUser.Subdomain) + " : " + mTmpCourse + Environment.NewLine + mTmpCsExtid;
                            string sDescription = oLoc.GetString("LblLesson", oUser.Subdomain) + " : " + mTmpLesson + Environment.NewLine + mTmpLsExtid;
                            if (!string.IsNullOrWhiteSpace(mTmpCenter))
                                sDescription += "<br />" + oLoc.GetString("LblIltLocation", oUser.Subdomain) + " : " + mTmpCenter;
                            if (!string.IsNullOrWhiteSpace(mTmpRoom))
                                sDescription += "<br />" + oLoc.GetString("LblIltRoom", oUser.Subdomain) + " : " + mTmpRoom;
                            Appointments.Add(new AppointmentInfo(sSubject, sDescription, mTmpStartTime, mTmpEndTime, string.Empty, null, string.Empty, 1));
                        }
                        #endregion Instructor
                    }
                }
            }
     
            [Serializable]
            class AppointmentInfo
            {
                ...
            }
        }
    }

    When debugging step by step, I update appointments list but it never appears correctly on client side
    Moreover, if my appointment list is empty at first load, depending on my browser, the radscheduler is sometimes shrinked with a javascript error in the axd file..

    If any one has a good idea....it would be greatly appreciated

    Regards.
  2. Boyan Dimitrov
    Admin
    Boyan Dimitrov avatar
    1746 posts

    Posted 22 May 2014 Link to this post

    Hello,

    I would like to clarify that I tested very similar scenario and it works fine at my end. You mentioned at the end of your last response that sometimes you are facing an JavaScript error. Please note that such error might be the reason why your RadScheduler is not updated visually. Cold you please at least specify what error you are facing? Sending a sample runnable project that replicates the issue would be very helpful because we will be able to test your current implementation at our end. Since this is a forum thread users are not allowed to attached zip files. In order to send us your sample project as attachment you have to open an support ticket.


    Regards,
    Boyan Dimitrov
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top