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
;
}
}