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

Databinding of radschedular

1 Answer 67 Views
Scheduler
This is a migrated thread and some comments may be shown as answers.
Amit
Top achievements
Rank 1
Amit asked on 08 Jan 2014, 08:05 AM
Hi 

I am binding the object datasorce at runtime to radschedular and also I have validate overriding of appointment


help me in which page event I should bind data so data is available for data binding
My problem is if I add data in oninit the schedular not get refreshed after insert data and if I bind data in onprerender the validation not working 
<telerik:RadScheduler runat="server" ID="EventScheduler" Skin="Office2010Silver"
            EnableEmbeddedSkins="false" ShowViewTabs="False" SelectedView="TimelineView"
            StartEditingInAdvancedForm="true" StartInsertingInAdvancedForm="true" CustomAttributeNames="BookedBy,HostEmpNo,HostName,BookedByName"
            AppointmentStyleMode="Default" OverflowBehavior="Expand" RowHeaderWidth="230"
            RowHeight="48" EnableExactTimeRendering="True" ShowFooter="False" OnClientAppointmentInserting="AppointmentInserting"
            OnClientAppointmentMoveEnd="AppointmentMoveEnd" OnClientAppointmentResizing="AppointmentResizing"
            OnClientTimeSlotClick="InsertAppointment" OnClientFormCreated="SchedulerFormCreated"
            OnAppointmentDataBound="EventScheduler_AppointementDataBound" OnResourceHeaderCreated="EventScheduler_ResourceHeaderCreated"
            OnNavigationCommand="EventScheduler_NavigationCommand" OnNavigationComplete="EventScheduler_NavigationComplete"
            OnPreRender="EventScheduler_PreRender" OnTimeSlotCreated="EventScheduler_TimeSlotCreated"
            OnAppointmentCreated="EventScheduler_AppointmentCreated" OnAppointmentInsert="EventScheduler_AppointmentInsert"
            OnAppointmentUpdate="EventScheduler_AppointmentUpdate" OnAppointmentDelete="EventScheduler_AppointmentDelete"
            OnRecurrenceExceptionCreated="EventScheduler_RecurrenceExceptionCreated">
            <AdvancedForm Modal="True" EnableCustomAttributeEditing="True" />
            <TimeSlotContextMenuSettings EnableDefault="True" />
            <TimeSlotContextMenus>
                <telerik:RadSchedulerContextMenu runat="server" ID="SchedulerTimeSlotContextMenu">
                    <Items>
                        <telerik:RadMenuItem Text="New Event" ImageUrl="Images/EventNew.gif" Value="CommandAddAppointment">
                        </telerik:RadMenuItem>
                        <telerik:RadMenuItem Text="New Recurring Event" ImageUrl="Images/EventRecurring.gif"
                            Value="CommandAddRecurringAppointment">
                        </telerik:RadMenuItem>
                    </Items>
                </telerik:RadSchedulerContextMenu>
            </TimeSlotContextMenus>
            <TimelineView GroupBy="Room" GroupingDirection="Vertical" TimeLabelSpan="1" ColumnHeaderDateFormat="HH:mm" />
            <ResourceTypes>
                <telerik:ResourceType Name="Room" KeyField="ResourceID" TextField="ResourceName"
                    ForeignKeyField="ResourceID" />
            </ResourceTypes>
            <ResourceHeaderTemplate>
                <div style="text-align: left; padding: 5px 0 0 5px;">
                    <asp:Label ID="lblRoom" runat="server" ForeColor="DarkBlue" Text='<%# Eval("Text") %>' />
                    <br />
                    <br />
                    <div class="floatingmandiv">
                        <asp:HyperLink ID="hlImgRoom" runat="server" ClientIDMode="Static" NavigateUrl='<%# String.Concat(@"~/Pages/Handlers/ImgHandler.ashx?key=",Eval("Key")) %>'>
                            <asp:Image ID="imgRoom" runat="server" CssClass="zoomCursor" ImageUrl='<%# String.Concat(@"~/Pages/Handlers/ImgHandler.ashx?key=",Eval("Key")) %>' />
                        </asp:HyperLink>
                    </div>
                    <asp:Label ID="lblCapacity" runat="server" Visible="False" />
                    <asp:Repeater runat="server" ID="rptABC">
                        <ItemTemplate>
                            <div class="floating">
                                <asp:Image ID="imgProjector" runat="server" ToolTip='<%# Eval("RaRoomName") %>' Height="30"
                                    Width="30" ImageUrl='<%# string.Format("../Pages/Handlers/IconHandler.ashx?key={0}",Eval("RaId"))%>'
                                    onmouseover='showToolTip(this);' />
                            </div>
                        </ItemTemplate>
                    </asp:Repeater>
                    <%--   <asp:Image ID="imgProjector" runat="server" Height="32" Width="32" Visible="False"
                        ImageUrl="../Pages/Handlers/IconHandler.ashx?key=1" onmouseover='showToolTip(this);' />
                    <asp:Image ID="imgBoard" runat="server" Height="32" Width="32" Visible="False" ImageUrl="../Pages/Handlers/IconHandler.ashx?key=3"
                        onmouseover='showToolTip(this);' />
                    <asp:Image ID="imgCapacity" runat="server" Height="32" Width="32" Visible="False"
                        ImageUrl="../Pages/Handlers/IconHandler.ashx?key=2" onmouseover='showToolTip(this);' />
                    <asp:Label ID="lblCapacity" runat="server" Visible="False" />--%>
                </div>
            </ResourceHeaderTemplate>
            <AdvancedInsertTemplate>
                <scheduler:AdvancedForm runat="server" ID="AdvancedFormInsert1" Mode="Insert" Subject='<%# Bind("Subject") %>'
                    Start='<%# Bind("Start") %>' End='<%# Bind("End") %>' RecurrenceRuleText='<%# Bind("RecurrenceRule") %>'
                    Booker='<%# Bind("BookedBy") %>' HostEmp='<%# Bind("HostEmpNo") %>' />
            </AdvancedInsertTemplate>
            <AdvancedEditTemplate>
                <scheduler:AdvancedForm runat="server" ID="AdvancedFormEdit1" Mode="Edit" Subject='<%# Bind("Subject") %>'
                    Start='<%# Bind("Start") %>' End='<%# Bind("End") %>' RecurrenceRuleText='<%# Bind("RecurrenceRule") %>'
                    Booker='<%# Bind("BookedBy") %>' HostEmp='<%# Bind("HostEmpNo") %>' />
            </AdvancedEditTemplate>
        </telerik:RadScheduler>
  


#region Page Events
 
       protected override void OnPreRender(EventArgs e)
       {
           base.OnPreRender(e);
           BindEventSchedular();
       }
 
       protected override void OnInit(EventArgs e)
       {
           base.OnInit(e);
           BindEventSchedular();
       }
 
 
       protected override void OnPreLoad(EventArgs e)
       {
           //Utility.SetSqlDSQueries(LocationDS, RoomDS, EventsDS);
 
           if (!IsPostBack)
           {
               Session["Locationstring"] = null;
               BindLocation();
           }
           //BindEventSchedular();
 
           if (IsPostBack) return;
           Utility.RefreshContext();
           Utility.SetTooltips();
       }
 
       private void BindEventSchedular()
       {
 
           //ResourceEventCollection oResourceEventColl = ResourceEvent.LoadList();
 
           //if (oResourceEventColl == null)
           //    oResourceEventColl = new ResourceEventCollection();
 
           string sLocations = "";
           if (Session["Locationstring"] != null)
           {
               sLocations = Session["Locationstring"].ToString();
           }
           else
           {
               sLocations = "";
           }
 
           ESSLib.Data.DataObjects.ResourceCollection oResourceColl = ESSLib.Data.DataObjects.Resource.ResourcesByLocation(sLocations);
 
           if (oResourceColl != null)
           {
               List<ResourceEvent> oResourceEventColl = ResourceEvent.LoadList().ToList();
               if (oResourceEventColl == null)
                   oResourceEventColl = new System.Collections.Generic.List<ResourceEvent>();
               else
               {
                   oResourceEventColl = (from oresourceevent in oResourceEventColl
                                         join oresource in oResourceColl on oresourceevent.ResourceID equals oresource.ResourceID
                                         select oresourceevent).ToList();
               }
 
               EventScheduler.DataSource = oResourceEventColl;
               EventScheduler.DataKeyField = "ResourceEventHeadID";
               EventScheduler.DataSubjectField = "ResourceEvent";
               EventScheduler.DataStartField = "EventStartDate";
               EventScheduler.DataEndField = "EventEndDate";
               EventScheduler.DataRecurrenceField = "RecurrenceRule";
               EventScheduler.DataRecurrenceParentKeyField = "RecurrenceParentID";
 
               EventScheduler.ResourceTypes[0].DataSource = oResourceColl;
               EventScheduler.DataBind();
           }
       }
 
       private void BindLocation()
       {
           LocationCollection oLocationColl = Location.LoadList();
           ESSLib.Data.DataObjects.ResourceCollection oResourceColl = ESSLib.Data.DataObjects.Resource.LoadList();
           if (oLocationColl != null && oResourceColl != null)
           {
               List<Location> oLocation = (from olocation in oLocationColl
                                           join oresourcecoll in oResourceColl on olocation.LocationCode equals oresourcecoll.LocationCode
                                           select olocation).ToList();
 
               chkLocationList.DataSource = oLocation;
               chkLocationList.DataTextField = "LocationDesc";
               chkLocationList.DataValueField = "LocationCode";
               chkLocationList.DataBind();
           }
       }
 
       protected void Page_Load(object sender, EventArgs e)
       {
           #region Set logged in user from web.config
 
           // Validate user
           string userRole;
           Employee oEmployee = new Employee(Session["EmpNo"].ToString());
           if (oEmployee.IsExists)
           {
               userRole = oEmployee.ProfileCode == 1 ? "Admin" : "User";
               Session["User"] = new List<string> { userRole, oEmployee.EmpNo };
           }
           else
               Session["User"] = Utility.LoggedUserRole = Utility.LoggedUserEmp = null;
 
           // Save logged in user information
           if (Session["User"] == null) return;
 
           var data = Session["User"] as List<string>;
           if (data == null) return;
 
           Utility.LoggedUserRole = data[0];
           Utility.LoggedUserEmp = data[1];
 
           #endregion
 
           if (IsPostBack) return;
           Utility.SetTimeLineAttributes(EventScheduler, hfSchedulerDate);
       }
 
       protected void Page_LoadComplete(object sender, EventArgs e)
       {
           if (Utility.Resources != null)
               Utility.Resources.Clear();
       }
 
       #endregion
 
       #region Scheduler Events
 
       protected void EventScheduler_AppointementDataBound(object sender, SchedulerEventArgs e)
       {
           //BindEventSchedular();
           Utility.SetAppointmentAttributes(e);
       }
 
       protected void EventScheduler_ResourceHeaderCreated(object sender, ResourceHeaderCreatedEventArgs e)
       {
           Utility.SetHeaderAttributes(e);
       }
 
       protected void EventScheduler_TimeSlotCreated(object sender, TimeSlotCreatedEventArgs e)
       {
           var aptStartTime = e.TimeSlot.Start.TimeOfDay;
           var aptEndTime = e.TimeSlot.End.TimeOfDay;
 
           //Get Open and Close Time
           if (Utility.Resources != null && !Utility.Resources.Contains(e.TimeSlot.Resource.Text))
           {
               Utility.Resources.Add(e.TimeSlot.Resource.Text);
               Utility.GetHours(e.TimeSlot.Resource.Text, out _resStartTime, out _resEndTime);
           }
           else if (Utility.Resources == null)
           {
               Utility.Resources = new List<string> { e.TimeSlot.Resource.Text };
               Utility.GetHours(e.TimeSlot.Resource.Text, out _resStartTime, out _resEndTime);
           }
 
           if (Utility.IsBlockedTimeSlot(aptStartTime, aptEndTime, _resStartTime, _resEndTime))
           {
               e.TimeSlot.CssClass = "Disabled";
           }
       }
 
       protected void EventScheduler_NavigationCommand(object sender, SchedulerNavigationCommandEventArgs e)
       {
           switch (e.Command)
           {
               case SchedulerNavigationCommand.NavigateToPreviousPeriod:
                   //EventScheduler.SelectedDate = Utility.GetDate(Utility.Commands.Prev, EventScheduler.SelectedDate);
                   break;
 
               case SchedulerNavigationCommand.NavigateToNextPeriod:
                   EventScheduler.SelectedDate = Utility.GetDate(Utility.Commands.Next, EventScheduler.SelectedDate);
                   break;
           }
       }
 
       protected void EventScheduler_NavigationComplete(object sender, SchedulerNavigationCompleteEventArgs e)
       {
           if (EventScheduler.SelectedView != SchedulerViewType.TimelineView) return;
           Utility.SetTimeLineAttributes(EventScheduler, hfSchedulerDate);
       }
 
       protected void EventScheduler_PreRender(object sender, EventArgs e)
       {
           // Set Scheduler width as per timeslots
           var slotsWidth = Convert.ToInt32(Utility.NumberOfSlots * 51);
           const int rowHeaderWidth = 230;
           EventScheduler.Width = Unit.Pixel(slotsWidth + rowHeaderWidth);
 
           // Hide location panel if no resources
           var resources = from c in Utility.EssResources select c;
           pnlLocations.Visible = resources.Any();
       }
 
       #endregion
 
       #region Appointement Insert, Update & Delete
 
       protected void EventScheduler_AppointmentInsert(object sender, AppointmentInsertEventArgs e)
       {
           if (Session["User"] != null)
           {
               var aptStartTime = e.Appointment.Start.TimeOfDay;
               var aptEndTime = e.Appointment.End.TimeOfDay;
               var resource = e.Appointment.Resources.GetResourceByType("Room");
               bool isOk = true;
               // Check if blocked timeslot
               Utility.GetHours(resource.Text, out _resStartTime, out _resEndTime);
               if (Utility.IsBlockedTimeSlot(aptStartTime, aptEndTime, _resStartTime, _resEndTime))
               {
                   e.Cancel = true;
                   isOk = false;
                   ShowErrorMessage("Creating events in blocked timeslot is not allowed.");
               }
 
               // Check if there is alreay an appointment
               if (Utility.ExceedsLimit(e.Appointment, EventScheduler))
               {
                   e.Cancel = true;
                   isOk = false;
                   ShowErrorMessage("Creating events in occupied timeslot is not allowed.");
               }
 
               //string s = ((RadComboBox)EventScheduler.FindControl("ResHostEmp")).SelectedValue;\\
               if (isOk)
               {
                   int iRecurrenceParentID;
                   if (e.Appointment.RecurrenceState == RecurrenceState.NotRecurring)
                       iRecurrenceParentID = -1;
                   else
                       iRecurrenceParentID = Convert.ToInt32(e.Appointment.RecurrenceParentID);
 
                   Utility.InsertAppointment(e.Appointment.Subject, e.Appointment.Start, e.Appointment.End, Convert.ToInt32(resource.Key), Session["HostNo"].ToString(), Session["EmpNo"].ToString(), e.Appointment.RecurrenceRule.ToString(), iRecurrenceParentID);
 
                   Session["HostNo"] = null;
                   EventScheduler.Rebind();
               }
               else
               {
                   e.Cancel = true;
               }
           }
           else
           {
               e.Cancel = true;
               ShowErrorMessage("Only logged in user can create events.");
           }
       }
 
       protected void EventScheduler_AppointmentUpdate(object sender, AppointmentUpdateEventArgs e)
       {
           if (Session["User"] != null)
           {
               var aptStartTime = e.Appointment.Start.TimeOfDay;
               var aptEndTime = e.Appointment.End.TimeOfDay;
               var resource = e.Appointment.Resources.GetResourceByType("Room");
               bool isOk = true;
               // Do not allow for blocked timeslot to anyone
               Utility.GetHours(resource.Text, out _resStartTime, out _resEndTime);
               if (Utility.IsBlockedTimeSlot(aptStartTime, aptEndTime, _resStartTime, _resEndTime))
               {
                   e.Cancel = true;
                   isOk = false;
                   ShowErrorMessage("Updating events in blocked timeslot is not allowed.");
               }
 
               // If it is not user's created event
               if (Utility.LoggedUserRole == "User" && !e.Appointment.Attributes["BookedBy"].Equals(Utility.LoggedUserEmp))
               {
                   e.Cancel = true;
                   isOk = false;
                   ShowErrorMessage("You cannot modify other user's created events.");
               }
 
               // If appointment overlaps
               if (Utility.AppointmentsOverlap(e.ModifiedAppointment, EventScheduler))
               {
                   e.Cancel = true;
                   isOk = false;
                   ShowErrorMessage("Updating events in occupied timeslot is not allowed.");
               }
 
               if (isOk)
               {
                   int iRecurrenceParentID;
                   if (e.ModifiedAppointment.RecurrenceState == RecurrenceState.NotRecurring)
                       iRecurrenceParentID = -1;
                   else
                       iRecurrenceParentID = Convert.ToInt32(e.ModifiedAppointment.RecurrenceParentID);
 
                   if (Session["HostNo"] == null)
                   {
                       Session["HostNo"] = e.Appointment.Attributes["HostEmpNo"];
                   }
 
                   Utility.UpdateAppointment(Convert.ToInt32(e.Appointment.ID), e.ModifiedAppointment.Subject, e.ModifiedAppointment.Start, e.ModifiedAppointment.End, Convert.ToInt32(resource.Key), Session["HostNo"].ToString(), Session["EmpNo"].ToString(), e.ModifiedAppointment.RecurrenceRule.ToString(), iRecurrenceParentID);
                   EventScheduler.Rebind();
                   Session["HostNo"] = null;
               }
           }
           else
           {
               e.Cancel = true;
               ShowErrorMessage("Only logged in user can modify events.");
           }
       }
 
       protected void EventScheduler_AppointmentDelete(object sender, AppointmentDeleteEventArgs e)
       {
           if (Session["User"] != null)
           {
               if (Utility.LoggedUserRole == "User" && !e.Appointment.Attributes["BookedBy"].Equals(Utility.LoggedUserEmp))
               {
                   e.Cancel = true;
                   ShowErrorMessage("You cannot delete other user's created events.");
               }
 
               Utility.DeleteAppointment(Convert.ToInt32(e.Appointment.ID));
               EventScheduler.Rebind();
           }
           else
           {
               e.Cancel = true;
               ShowErrorMessage("Only logged in user can delete events.");
           }
 
       }
 
       protected void EventScheduler_RecurrenceExceptionCreated(object sender, RecurrenceExceptionCreatedEventArgs e)
       {
           if (!Utility.AppointmentsOverlap(e.ExceptionAppointment, EventScheduler)) return;
           e.Cancel = true;
           ShowErrorMessage("Exception occured. You are trying disabled actions.");
       }
 
       protected void EventScheduler_AppointmentCommand(object sender, AppointmentCommandEventArgs e)
       {
           Control SchedulerAdvancedForm;
           switch (e.CommandName.ToLower())
           {
               case "insert":
                   SchedulerAdvancedForm = e.Container.FindControl("AdvancedFormInsert1"); break;
               case "update":
                   SchedulerAdvancedForm = e.Container.FindControl("AdvancedFormEdit1"); break;
               default:
                   SchedulerAdvancedForm = e.Container.FindControl("AdvancedFormInsert1"); break;
           }
 
           if (SchedulerAdvancedForm != null)
           {
               e.Container.Appointment.Attributes["HostEmpNo"] = ((RadComboBox)SchedulerAdvancedForm.FindControl("ResHostEmp")).SelectedValue;
           }
       }
 
       #endregion
 
       #region Show Tooltip in EventScheduler
 
       protected void EventScheduler_AppointmentCreated(object sender, AppointmentCreatedEventArgs e)
       {
           if (!e.Appointment.Visible || IsAppointmentRegisteredForTooltip(e.Appointment)) return;
 
           var id = e.Appointment.ID.ToString();
 
           foreach (var domElementID in e.Appointment.DomElements)
           {
               EventToolTipManager.TargetControls.Add(domElementID, id, true);
           }
       }
 
       private bool IsAppointmentRegisteredForTooltip(Appointment apt)
       {
           return EventToolTipManager.TargetControls.Cast<ToolTipTargetControl>().Any(targetControl => apt.DomElements.Contains(targetControl.TargetControlID));
       }
 
       protected void EventToolTipManager_AjaxUpdate(object sender, ToolTipUpdateEventArgs e)
       {
           var appointment = EventScheduler.Appointments.FirstOrDefault(apt => apt.ID.ToString().Equals(e.Value));
           if (appointment == null) return;
 
           var toolTip = (EventToolTip)LoadControl("~/Pages/UserControls/EventToolTip.ascx");
           toolTip.TargetAppointment = appointment;
           e.UpdatePanel.ContentTemplateContainer.Controls.Add(toolTip);
       }
 
       #endregion
 
       #region Location and Filter
 
       protected void chkLocationList_DataBound(object sender, EventArgs e)
       {
           string sLocationstring = "";
           for (var i = 0; i < chkLocationList.Items.Count; i++)
           {
               if (sLocationstring == "")
                   sLocationstring = chkLocationList.Items[i].Value;
               else
                   sLocationstring = sLocationstring + "," + chkLocationList.Items[i].Value;
 
               Session["Locationstring"] = sLocationstring;
               chkLocationList.Items[i].Selected = true;
               chkLocationList.Items[i].Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(chkLocationList.Items[i].Text.ToLower());
           }
       }
 
       protected void chkLocationList_SelectedIndexChanged(object sender, EventArgs e)
       {
           //RoomDS.SelectCommand = Utility.FilterQuery(chkLocationList);
           //RoomDS.DataBind();
           CheckBoxList ocheckboxlist = ((CheckBoxList)sender);
           IEnumerable<string> CheckedItems = ocheckboxlist.Items.Cast<ListItem>()
                                  .Where(i => i.Selected)
                                  .Select(o => o.Value);
           string sLocationstring = "";
 
           if (CheckedItems.Count() > 0)
           {
               foreach (string s in CheckedItems)
               {
                   if (sLocationstring == "")
                       sLocationstring = s;
                   else
                       sLocationstring = sLocationstring + "," + s;
               }
           }
           Session["Locationstring"] = sLocationstring;
           //EventScheduler.Rebind();
       }
 
       #endregion
 
       /// <summary>
       /// Show message to users for insert or update events in Scheduler from Advanced Form.
       /// </summary>
       /// <param name="message">Message to show to user.</param>
       private void ShowErrorMessage(string message)
       {
           Label1.Text = message;
           System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, GetType(), "LabelUpdated", "$telerik.$('.lblError').show().animate({ opacity: 0.9 }, 3000).fadeOut('slow');", true);
       }

1 Answer, 1 is accepted

Sort by
0
Plamen
Telerik team
answered on 09 Jan 2014, 12:50 PM
Hi Amit,

You can refer to this on-line demo and this help article where is described in details how we recommend dealing in such scenarios.

Hope this information will be helpful.

Regards,
Plamen
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
Tags
Scheduler
Asked by
Amit
Top achievements
Rank 1
Answers by
Plamen
Telerik team
Share this question
or