Hello,
I'm using RadToolTip in a RadScheduler with sqldatasource and i can see only and empty RadScheduler. Also, when i press the Save button a null reference exception arises in the following line of the Radscheduler1_AppointmentCreated method: string id = e.Appointment.ID.ToString; (The DataItem and the ID are null). The data insert to the database.
What am i doing wrong;
Thank you very much.
P.S.
I have writthen the following code:
aspx code
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"> <Scripts> <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" /> <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" /> <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" /> </Scripts> </telerik:RadScriptManager> <script type="text/javascript"> function hideActiveToolTip() { var tooltip = Telerik.Web.UI.RadToolTip.getCurrent(); if (tooltip) { tooltip.hide(); } } Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequestHandler); function beginRequestHandler(sender, args) { var prm = Sys.WebForms.PageRequestManager.getInstance(); if (args.get_postBackElement().id.indexOf('RadScheduler1') != -1) { hideActiveToolTip(); } } function OnClientRequestStart(sender, args) { args.set_cancel(true); var tooltip = Telerik.Web.UI.RadToolTip.getCurrent(); if (tooltip) { var element = tooltip.get_targetControl(); var apt = $find("<%=RadScheduler1.ClientID %>").getAppointmentFromDomElement(element); $get("startTime").innerHTML = apt.get_start().format("MM/dd/yyyy HH:mm"); $get("endTime").innerHTML = apt.get_end().format("MM/dd/yyyy HH:mm"); $get("descriptionDiv").innerHTML = apt.get_subject(); tooltip.set_text($get("contentContainer").innerHTML); } } function OnClientAppointmentContextMenu(sender, args) { hideActiveToolTip(); } </script> <telerik:RadScheduler runat="server" ID="RadScheduler1" Width="750px" TimeZoneOffset="03:00:00" EnableDescriptionField="true" SelectedDate="2012-04-16" DayStartTime="08:00:00" DayEndTime="18:00:00" DataSourceID="SqlDataSource1" DataKeyField="ID" DataSubjectField="Subject" DataDescriptionField="Description" DataStartField="Start" DataEndField="End" DataRecurrenceField="RecurrenceRule" DataRecurrenceParentKeyField="RecurrenceParentID" DisplayDeleteConfirmation="true" SelectedView="WeekView" OnClientAppointmentContextMenu="OnClientAppointmentContextMenu" CustomAttributeNames="LastModified, Annotations, User"> <AdvancedForm Modal="true" /> <TimelineView UserSelectable="false" /> <TimeSlotContextMenuSettings EnableDefault="true" /> <AppointmentContextMenuSettings EnableDefault="true" /> </telerik:RadScheduler> <telerik:RadToolTipManager runat="server" ID="RadToolTipManager1" Width="320" Height="170" Animation="None" HideEvent="Default" Text="Loading..." OnAjaxUpdate="RadToolTipManager1_AjaxUpdate" /> <div style="display: none;"> <div id="contentContainer"> <div class="appointment-tooltip"> <p> Starts on: <span id="startTime"> <!-- --> </span> <br /> Ends on: <span id="endTime"> <!-- --> </span> </p> <hr /> Description: <div id="descriptionDiv"> </div> </div> </div> </div> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:HumanResourcesConnectionString %>" DeleteCommand="DELETE FROM [Schedule] WHERE [ID] = @ID" InsertCommand="INSERT INTO [Schedule] ([Subject], [Description], [Start], [End], [RecurrenceRule], [RecurrenceParentID], [User], [LastModified]) VALUES (@Subject, @Description, @Start, @End, @RecurrenceRule, @RecurrenceParentID, @User, @LastModified)" SelectCommand="SELECT * FROM [Schedule]" UpdateCommand="UPDATE [Schedule] SET [Subject] = @Subject, [Description]=@Description, [Start] = @Start, [End] = @End, [RecurrenceRule]=@RecurrenceRule, [RecurrenceParentID]=@RecurrenceParentID, [User]=@User, [LastModified]=@LastModified WHERE [ID] = @ID"> <SelectParameters> <asp:SessionParameter Name="User" SessionField="User" DefaultValue="" /> </SelectParameters> <DeleteParameters> <asp:Parameter Name="ID" Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="Subject" Type="String" /> <asp:Parameter Name="Description" Type="String" /> <asp:Parameter Name="Start" Type="DateTime" /> <asp:Parameter Name="End" Type="DateTime" /> <asp:Parameter Name="ID" Type="Int32" /> <asp:Parameter Name="RecurrenceRule" Type="String" /> <asp:Parameter Name="RecurrenceParentID" Type="Int32" /> <asp:Parameter Name="Annotations" Type="String" /> <asp:SessionParameter Name="User" SessionField="User" DefaultValue="" /> <asp:Parameter Name="LastModified" Type="String" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="Subject" Type="String" /> <asp:Parameter Name="Description" Type="String" /> <asp:Parameter Name="Start" Type="DateTime" /> <asp:Parameter Name="End" Type="DateTime" /> <asp:Parameter Name="Annotations" Type="String" /> <asp:Parameter Name="RecurrenceRule" Type="String" /> <asp:Parameter Name="RecurrenceParentID" Type="Int32" /> <asp:SessionParameter Name="User" SessionField="User" DefaultValue="" /> <asp:Parameter Name="LastModified" Type="String" /> </InsertParameters> </asp:SqlDataSource>
aspx.cs code
public partial class _Default : System.Web.UI.Page{ private void Page_Load(object sender, EventArgs e) { RadScheduler1.AppointmentCreated += RadScheduler1_AppointmentCreated; RadScheduler1.DataBound += RadScheduler1_DataBound; RadToolTipManager1.OnClientRequestStart = String.Empty; } protected void RadScheduler1_AppointmentDataBound(object sender, SchedulerEventArgs e) { RadToolTipManager1.TargetControls.Clear(); ScriptManager.RegisterStartupScript(this, typeof(Page), "HideToolTip", "hideActiveToolTip();", true); } protected void RadScheduler1_AppointmentCreated(object sender, AppointmentCreatedEventArgs e) { if (e.Appointment.Visible && !IsAppointmentRegisteredForTooltip(e.Appointment)) { string id = e.Appointment.ID.ToString(); foreach (string domElementID in e.Appointment.DomElements) { RadToolTipManager1.TargetControls.Add(domElementID, id, true); } } } protected void RadToolTipManager1_AjaxUpdate(object sender, ToolTipUpdateEventArgs e) { int aptId; Appointment apt; if (!int.TryParse(e.Value, out aptId))//The appoitnment is occurrence and FindByID expects a string apt = RadScheduler1.Appointments.FindByID(e.Value); else //The appointment is not occurrence and FindByID expects an int apt = RadScheduler1.Appointments.FindByID(aptId); AppointmentToolTip toolTip = (AppointmentToolTip)LoadControl("AppointmentToolTip.ascx"); toolTip.TargetAppointment = apt; e.UpdatePanel.ContentTemplateContainer.Controls.Add(toolTip); } protected void RadScheduler1_DataBound(object sender, EventArgs e) { RadToolTipManager1.TargetControls.Clear(); ScriptManager.RegisterStartupScript(this, typeof(Page), "HideToolTip", "hideActiveToolTip();", true); } private bool IsAppointmentRegisteredForTooltip(Appointment apt) { foreach (ToolTipTargetControl targetControl in RadToolTipManager1.TargetControls) { if (apt.DomElements.Contains(targetControl.TargetControlID)) { return true; } } return false; } }