Databinding of radschedular

2 posts, 0 answers
  1. Amit
    Amit avatar
    53 posts
    Member since:
    Aug 2012

    Posted 08 Jan 2014 Link to this post

    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);
           }
  2. Plamen
    Admin
    Plamen avatar
    2734 posts

    Posted 09 Jan 2014 Link to this post

    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.
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top