This is a migrated thread and some comments may be shown as answers.

RadScheduler ajax refresh (Q1 2014 2014.1.403.40)

1 Answer 73 Views
Scheduler
This is a migrated thread and some comments may be shown as answers.
Pierre-Henri
Top achievements
Rank 1
Pierre-Henri asked on 19 May 2014, 07:48 AM
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.

1 Answer, 1 is accepted

Sort by
0
Boyan Dimitrov
Telerik team
answered on 22 May 2014, 07:22 AM
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.

 
Tags
Scheduler
Asked by
Pierre-Henri
Top achievements
Rank 1
Answers by
Boyan Dimitrov
Telerik team
Share this question
or