
Is there any example code setup to show how to use an AppointmentComparer?
I've tried setting one up, but it never seems to get called.
I'm using a RadScheduler with WebService binding, would that have any impact in why it doesn't seem to be working?
In the Page_Init method I have the following code:
RadScheduler1.AppointmentComparer = new AppointmentComparer(); |
And I have an AppointmentComparer.cs file with the following code:
public class AppointmentComparer : IComparer<Appointment> |
{ |
#region Constructors |
public AppointmentComparer() |
{ |
} |
#endregion |
int System.Collections.Generic.IComparer<Telerik.Web.UI.Appointment>.Compare(Appointment first, Appointment second) |
{ |
But the breakpoint in the Compare method never seems to be reached.
Thanks very much for all your help,
Greg
10 Answers, 1 is accepted
The appointment sorting is a bit different when using web services. The sorting actually happens on the client, so we need to override the default compare method. This is an instance method and takes the appointment to compare to as an argument.
For example, you can sort appointments alphabetically:
// Place the script block immediately after the ScriptManager on the page
Telerik.Web.UI.SchedulerAppointment.prototype.compare =
function
(otherAppointment)
{
var
subject =
this
.get_subject();
var
otherSubject = otherAppointment.get_subject();
if
(otherAppointment ==
null
)
returnValue = 1;
else
if
(subject == otherSubject)
returnValue = 0;
else
if
(subject < otherSubject)
returnValue = -1;
else
returnValue = 1;
return
returnValue;
}
Our documentation is indeed lacking such example. We'll take care to fix this.
I hope this helps.
All the best,
Tsvetomir Tsonev
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.

Here is my code:
<%
@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
<title></title>
<telerik:RadStyleSheetManager id="RadStyleSheetManager1" runat="server" />
</
head>
<
body>
<form id="form1" runat="server">
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
<Scripts>
<%
--Needed for JavaScript IntelliSense in VS2010--%>
<%
--For VS2008 replace RadScriptManager with ScriptManager--%>
<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">
//Put your JavaScript code here.
.rsAdvancedEdit
{
top: 10px !important;
left: 10px !important;
width: 30px;
}
Telerik.Web.UI.SchedulerAppointment.prototype.compare =
function(otherAppointment)
{
var subject = this.get_subject();
var otherSubject = otherAppointment.get_subject();
if (otherAppointment == null)
returnValue = 1;
else if (subject == otherSubject)
returnValue = 0;
else if (subject < otherSubject)
returnValue = -1;
else
returnValue = 1;
return returnValue;
}
</script>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
</telerik:RadAjaxManager>
<div>
</div>
<telerik:RadScheduler Height="100%" Width="100%" ID="RadScheduler2"
runat="server" DataEndField="END_TIME"
DataKeyField="ID" DataSourceID="SqlDataSource1" DataStartField="START_TIME"
DataSubjectField="SUBJECT" DayEndTime="23:59:59" RowHeight="16px" SelectedView="WeekView"
WorkDayEndTime="8.00:00:00" WorkDayStartTime="00:00:00"
AllowDelete="False"
NumberOfHoveredRows="1" SelectedDate="2012-05-07"
EnableExactTimeRendering="True" DataRecurrenceField="RECURRENCERULE"
DataRecurrenceParentKeyField="RECURRENCEPARENTID">
<AdvancedForm Width="60%" Modal="True" />
<ResourceTypes>
<telerik:ResourceType DataSourceID="SqlDataSource2" ForeignKeyField="USERID"
KeyField="ID" Name="Users" TextField="USERNAME" />
</ResourceTypes>
<TimelineView UserSelectable="False" />
<WeekView DayEndTime="23:59:59" />
<MonthView UserSelectable="False" />
</telerik:RadScheduler>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT "ID", "SUBJECT", "START_TIME", "END_TIME", "USERID", "RECURRENCERULE", "RECURRENCEPARENTID" FROM "AVAILABILITY_TEST""
DeleteCommand="DELETE FROM "AVAILABILITY_TEST" WHERE "ID" = :ID"
InsertCommand="INSERT INTO "AVAILABILITY_TEST" ("ID", "SUBJECT", "START_TIME", "END_TIME", "USERID", "RECURRENCERULE", "RECURRENCEPARENTID") VALUES (:ID, :SUBJECT, :START_TIME, :END_TIME, :USERID, :RECURRENCERULE, :RECURRENCEPARENTID)"
UpdateCommand="UPDATE "AVAILABILITY_TEST" SET "SUBJECT" = :SUBJECT, "START_TIME" = :START_TIME, "END_TIME" = :END_TIME, "USERID" = :USERID, "RECURRENCERULE" = :RECURRENCERULE, "RECURRENCEPARENTID" = :RECURRENCEPARENTID WHERE "ID" = :ID">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Decimal" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="ID" Type="Decimal" />
<asp:Parameter Name="SUBJECT" Type="String" />
<asp:Parameter Name="START_TIME" Type="DateTime" />
<asp:Parameter Name="END_TIME" Type="DateTime" />
<asp:Parameter Name="USERID" Type="Decimal" />
<asp:Parameter Name="RECURRENCERULE" Type="String" />
<asp:Parameter Name="RECURRENCEPARENTID" Type="Decimal" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="SUBJECT" Type="String" />
<asp:Parameter Name="START_TIME" Type="DateTime" />
<asp:Parameter Name="END_TIME" Type="DateTime" />
<asp:Parameter Name="USERID" Type="Decimal" />
<asp:Parameter Name="RECURRENCERULE" Type="String" />
<asp:Parameter Name="RECURRENCEPARENTID" Type="Decimal" />
<asp:Parameter Name="ID" Type="Decimal" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource
ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT "ID", "USERNAME" FROM "AVAILABILITY_TEST_USERS"">
</asp:SqlDataSource>
<br />
<telerik:RadButton ID="save_Rbtn" runat="server" Text="Save"
BackColor="#FF3300" CssClass="RadButton" Font-Bold="True" ForeColor="#FF3300">
</telerik:RadButton>
<telerik:RadButton ID="cancel_Rbtn" runat="server" Text="Cancel"
BackColor="#FF3300" Font-Bold="True" ForeColor="#FF3300">
</telerik:RadButton>
<br />
</form>
</
body>
</
html>
To sort appointments by some custom criteria, you should use the AppointmentComparer property of RadScheduler as shown in this forum post:
http://www.telerik.com/community/forums/aspnet-ajax/scheduler/oder-of-entry-in-scheduler.aspx#1155620
For Web Service binding mode, please see this forum post:
http://www.telerik.com/community/forums/aspnet-ajax/scheduler/example-of-how-to-use-an-appointmentcomparer.aspx#1188449
Feel free to contact us if you have further questions.
Regards,
Peter
the Telerik team

Here is the VB:
Imports
System.IO
Imports
Microsoft.VisualBasic
Imports
System.Collections.Generic
Imports
System.Web
Imports
System.Web.UI
Imports
System.Web.UI.WebControls
Imports
System.Data
Imports
System.Configuration
Imports
System.Web.Security
Imports
System.Web.UI.WebControls.WebParts
Imports
System.Web.UI.HtmlControls
Imports
Telerik.Web.UI
Imports
System.Drawing
 
Public
Class MyAvailability
Inherits System.Web.UI.Page
Private Class CustomAppointmentComparer
Implements IComparer(Of Appointment)
Public Function Compare(first As Appointment, second As Appointment) As Integer Implements IComparer(Of Telerik.Web.UI.Appointment).Compare
Dim infoStart1 As String = first.Start.ToString
Dim infoend1 As String = first.End.ToString
Dim infoStar2 As String = second.Start.ToString
Dim infoend2 As String = second.End.ToString
If first Is Nothing OrElse second Is Nothing Then
Throw New InvalidOperationException("Can't compare null object(s).")
End If
If [String].Compare(first.Subject.ToString, second.Subject.ToString) < 0 Then
Return -1
End If
 
If [String].Compare(first.Subject.ToString, second.Subject.ToString) > 0 Then
Return 1
End If
Return 0
End Function
End Class
Protected Overrides Sub OnInit(e As EventArgs)
MyBase.OnInit(e)
RadScheduler1.Provider =
New XmlSchedulerProvider(Server.MapPath("~/App_Data/Appointments.xml"), True)
End Sub
Protected Sub RadScheduler1_AppointmentDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.SchedulerEventArgs) Handles RadScheduler1.AppointmentDataBound
e.Appointment.CssClass =
"MyCustomAppointmentStyle"
If e.Appointment.Subject = "Availability" Then
e.Appointment.CssClass =
"•rsCategoryYellow"
Else
e.Appointment.CssClass =
"rsCategoryGreen"
End If
''e.Appointment.
End Sub
Protected Sub RadScheduler1_AppointmentCreated(sender As Object, e As AppointmentCreatedEventArgs) Handles RadScheduler1.AppointmentCreated
''If e.Appointment.Subject = "Prefered Availability" Then
If e.Appointment.Subject = "Preference" Then
e.Appointment.BackColor = System.Drawing.Color.Green
End If
If e.Appointment.Subject = "Availability" Then
e.Appointment.BackColor = System.Drawing.Color.FromName(
"#FEEDA9")
End If
If e.Appointment.Visible AndAlso Not IsAppointmentRegisteredForTooltip(e.Appointment) Then
Dim id As String = e.Appointment.ID.ToString()
For Each domElementID As String In e.Appointment.DomElements
RadToolTipManager1.TargetControls.Add(domElementID, id,
True)
Next
End If
End Sub
 
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
RadToolTipManager1.OnClientRequestStart =
"OnClientRequestStart"
RadScheduler1.AppointmentComparer =
New CustomAppointmentComparer()
Dim appointments As Appointment() = RadScheduler1.Appointments.ToArray()
Array.Sort(appointments,
New CustomAppointmentComparer())
For Each appointment As Appointment In appointments
Dim appointmentStart As DateTime = RadScheduler1.UtcToDisplay(appointment.Start)
If appointmentStart > RadScheduler1.SelectedDate Then
RadScheduler1.SelectedDate = appointmentStart.[Date]
Exit For
End If
Next
End Sub
Protected Sub RadScheduler1_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles RadScheduler1.DataBound
RadToolTipManager1.TargetControls.Clear()
ScriptManager.RegisterStartupScript(
Me, GetType(System.Web.UI.Page), "HideToolTip", "hideActiveToolTip();", True)
Dim monthNum As Integer = RadScheduler1.VisibleRangeStart.Month
Dim strDate As New DateTime(1, monthNum, 1)
RadScheduler1.Localization.AllDay = strDate.ToString(
"MMMMM")
End Sub
Protected Sub MyAvailability1_FormCreated(ByVal sender As Object, ByVal e As SchedulerFormCreatedEventArgs) Handles RadScheduler1.FormCreated
If (e.Container.Mode = SchedulerFormMode.AdvancedEdit) OrElse (e.Container.Mode = SchedulerFormMode.AdvancedInsert) Then
Dim allDayCheckbox As CheckBox = DirectCast(e.Container.FindControl("AllDayEvent"), CheckBox)
allDayCheckbox.Style.Add(
"visibility", "hidden")
Dim attrAnnotationsTextbox As RadTextBox = DirectCast(e.Container.FindControl("Subject"), RadTextBox)
attrAnnotationsTextbox.Label =
"Type"
attrAnnotationsTextbox.Enabled =
False
Dim AppointmentID As Integer = e.Appointment.ID
Dim AppointmentIDPrevious As Integer = e.Appointment.ID - 1
Dim PreviousAppointment As New Appointment
''Dim startPicker As RadTimePicker = DirectCast(e.Container.FindControl("StartTime"), RadTimePicker)
''startPicker.TimeView.StartTime = TimeSpan.FromHours(1.5)
''startPicker.TimeView.EndTime = TimeSpan.FromHours(24)
''startPicker.TimeView.DataList.DataSource = Nothing
''startPicker.TimeView.DataBind()
''Dim endPicker As RadTimePicker = DirectCast(e.Container.FindControl("EndTime"), RadTimePicker)
''endPicker.TimeView.StartTime = TimeSpan.FromHours(8)
''endPicker.TimeView.EndTime = TimeSpan.FromHours(24)
''endPicker.TimeView.DataList.DataSource = Nothing
''endPicker.TimeView.DataBind()
'' Dim StartTimeAppointmentIDPrevious As String = RadScheduler1.Appointments.FindByID(52).Start.ToString
'' Catch ex As Exception
''ex.ToString()
'' End Try
Dim scheduler As RadScheduler = DirectCast(sender, RadScheduler)
Dim StartTimeAvail As DateTime
Dim EndTimeAvail As DateTime
If e.Appointment.Subject = "Preference" Then
For Each app As Appointment In scheduler.Appointments.GetAppointmentsInRange(e.Appointment.Start, e.Appointment.[End])
If app.Subject = "Availability" Then
StartTimeAvail = app.Start.ToShortTimeString
EndTimeAvail = app.End.ToShortTimeString
Exit For
End If
Next
End If
Dim startPicker As RadTimePicker = DirectCast(e.Container.FindControl("StartTime"), RadTimePicker)
Dim endPicker As RadTimePicker = DirectCast(e.Container.FindControl("EndTime"), RadTimePicker)
Dim StartDbleTime As Double = StartTimeAvail.ToOADate() * 24
Dim EndDbleTime As Double = EndTimeAvail.ToOADate() * 24 + 0.5
startPicker.TimeView.StartTime = TimeSpan.FromHours(StartDbleTime)
''startPicker.TimeView.EndTime = TimeSpan.FromHours(24)
startPicker.TimeView.EndTime = TimeSpan.FromHours(EndDbleTime)
endPicker.TimeView.StartTime = TimeSpan.FromHours(StartDbleTime)
endPicker.TimeView.EndTime = TimeSpan.FromHours(EndDbleTime)
startPicker.TimeView.DataList.DataSource =
Nothing
startPicker.TimeView.DataBind()
endPicker.TimeView.DataList.DataSource =
Nothing
endPicker.TimeView.DataBind()
''Dim startTime As RadTimePicker = TryCast(e.Container.FindControl("StartTime"), RadTimePicker)
''Dim DbleTime As Double = ADate.ToOADate() * 24
''startPicker.TimeView.StartTime = TimeSpan.FromHours(DbleTime)
End If
End Sub
Protected Sub MyAvailability1_AppointmentInsert(sender As Object, e As AppointmentInsertEventArgs) Handles RadScheduler1.AppointmentInsert
If e.Appointment.Subject = "Preference" Then
Dim scheduler As RadScheduler = DirectCast(sender, RadScheduler)
For Each app As Appointment In scheduler.Appointments.GetAppointmentsInRange(e.Appointment.Start, e.Appointment.[End])
If app.Subject = "Availability" Then
If app.Start > e.Appointment.Start OrElse app.[End] <= e.Appointment.[End] Then
e.Cancel =
True
End If
End If
Next
End If
End Sub
Protected Sub MyAvailability1_AppointmentUpdate(sender As Object, e As AppointmentUpdateEventArgs) Handles RadScheduler1.AppointmentUpdate
Dim scheduler As RadScheduler = DirectCast(sender, RadScheduler)
If e.ModifiedAppointment.Subject = "Preference" Then
For Each app As Appointment In scheduler.Appointments.GetAppointmentsInRange(e.ModifiedAppointment.Start, e.ModifiedAppointment.[End])
If app.Subject = "Availability" Then
If app.Start > e.ModifiedAppointment.Start OrElse app.[End] < e.ModifiedAppointment.[End] Then
e.Cancel =
True
End If
End If
Next
End If
If e.ModifiedAppointment.Subject = "Availability" Then
For Each app As Appointment In scheduler.Appointments.GetAppointmentsInRange(e.ModifiedAppointment.Start, e.ModifiedAppointment.[End])
If app.Subject = "Preference" Then
If app.Start < e.ModifiedAppointment.Start OrElse app.[End] > e.ModifiedAppointment.[End] Then
e.Cancel =
True
End If
End If
Next
End If
End Sub
Private Function IsAppointmentRegisteredForTooltip(ByVal apt As Appointment) As Boolean
For Each targetControl As ToolTipTargetControl In RadToolTipManager1.TargetControls
If (apt.DomElements.Contains(targetControl.TargetControlID)) Then
Return True
End If
Next
Return False
End Function
Protected Sub RadToolTipManager1_AjaxUpdate(ByVal sender As Object, ByVal e As ToolTipUpdateEventArgs)
Dim aptId As Integer
Dim apt As Appointment
If Not Integer.TryParse(e.Value, aptId) Then
'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)
End If
''Dim toolTip As AppointmentToolTip = CType(LoadControl("AppointmentToolTip.ascx"), AppointmentToolTip)
''toolTip.TargetAppointment = apt
''e.UpdatePanel.ContentTemplateContainer.Controls.Add(toolTip)
End Sub
 
Public newStartLabel As String = ""
Public newEndLabel As String = ""
Public dayOfWeek As String = ""
Protected Sub RadScheduler1_AppointmentUpdate(sender As Object, e As AppointmentUpdateEventArgs)
If e.ModifiedAppointment.Subject = "Availability" Then
newStartLabel = e.ModifiedAppointment.Start.ToString()
newEndLabel = e.ModifiedAppointment.[End].ToString()
dayOfWeek = e.ModifiedAppointment.Start.DayOfWeek.ToString()
End If
End Sub
Protected Sub RadScheduler1_TimeSlotCreated(sender As Object, e As TimeSlotCreatedEventArgs) Handles RadScheduler1.TimeSlotCreated
Dim scheduler As RadScheduler = DirectCast(sender, RadScheduler)
''If scheduler.SelectedView = SchedulerViewType.WeekView AndAlso e.TimeSlot.Duration = TimeSpan.FromDays(1) Then
If e.TimeSlot.Duration = TimeSpan.FromDays(1) Then
Dim startLabel As New Label()
Dim startLabelPref As New Label()
startLabel.ID =
"startLabel" + e.TimeSlot.Start.DayOfWeek.ToString + CType(e.TimeSlot.Start.Day, String)
startLabelPref.ID =
"startLabelPref" + e.TimeSlot.Start.DayOfWeek.ToString + CType(e.TimeSlot.Start.Day, String)
startLabel.Font.Size = 7
startLabel.Font.Bold =
True
startLabelPref.Font.Size = 7
startLabelPref.Font.Bold =
True
If newStartLabel <> "" AndAlso dayOfWeek = e.TimeSlot.Start.DayOfWeek.ToString() Then
startLabel.Text = newStartLabel
Else
For Each app As Appointment In RadScheduler1.Appointments.GetAppointmentsInRange(e.TimeSlot.Start, e.TimeSlot.[End])
If app.Subject = "Availability" Then
Dim TimeFormat As String
TimeFormat = Trim(app.Start.ToShortTimeString)
''TimeFormat.Replace(" AM", "a")
If TimeFormat.Contains("AM") Then
startLabel.Text =
" " + TimeFormat.Replace(" AM", "a")
Else
startLabel.Text =
" " + app.Start.ToShortTimeString.Replace(" PM", "p")
End If
startLabel.BackColor = System.Drawing.Color.FromName(
"#FEEDA9")
End If
If app.Subject = "Preference" Then
Dim TimeFormat As String
TimeFormat = Trim(app.Start.ToShortTimeString)
''TimeFormat.Replace(" AM", "a")
If TimeFormat.Contains("AM") Then
startLabelPref.Text = TimeFormat.Replace(
" AM", "a")
Else
startLabelPref.Text = app.Start.ToShortTimeString.Replace(
" PM", "p")
End If
startLabelPref.BackColor = System.Drawing.Color.FromName(
"#D0ECBB")
End If
Next
End If
Dim endLabel As New Label()
Dim endLabelPref As New Label()
''startLabel.ID = "endLabel" + e.TimeSlot.Start.DayOfWeek.ToString
endLabel.ID =
"endLabel" + e.TimeSlot.End.DayOfWeek.ToString + CType(e.TimeSlot.End.Day, String)
''startLabelPref.ID = "endLabelPref" + e.TimeSlot.Start.DayOfWeek.ToString
endLabelPref.ID =
"endLabelPref" + e.TimeSlot.End.DayOfWeek.ToString + CType(e.TimeSlot.End.Day, String)
endLabel.Font.Size = 7
endLabel.Font.Bold =
True
endLabelPref.Font.Size = 7
endLabelPref.Font.Bold =
True
''If newStartLabel <> "" AndAlso dayOfWeek = e.TimeSlot.Start.DayOfWeek.ToString() Then
If newEndLabel <> "" AndAlso dayOfWeek = e.TimeSlot.End.DayOfWeek.ToString() Then
endLabel.Text =
"-" + newEndLabel
Else
For Each app As Appointment In RadScheduler1.Appointments.GetAppointmentsInRange(e.TimeSlot.Start, e.TimeSlot.[End])
If app.Subject = "Availability" Then
Dim TimeFormat2 As String
TimeFormat2 = Trim(
"-" + app.[End].ToShortTimeString)
endLabel.Text = TimeFormat2.Replace(
" AM", "a")
endLabel.Text =
"-" + app.[End].ToShortTimeString.Replace(" PM", "p")
endLabel.BackColor = System.Drawing.Color.FromName(
"#FEEDA9")
End If
If app.Subject = "Preference" Then
Dim TimeFormat2 As String
TimeFormat2 = Trim(
"-" + app.[End].ToShortTimeString)
endLabelPref.Text = TimeFormat2.Replace(
" AM", "a")
endLabelPref.Text =
"-" + app.[End].ToShortTimeString.Replace(" PM", "p")
endLabelPref.BackColor = System.Drawing.Color.FromName(
"#D0ECBB")
End If
Next
End If
Dim divisionLabel As New Label()
divisionLabel.Text =
" | "
divisionLabel.BackColor = Color.Transparent
e.TimeSlot.Control.Controls.Add(startLabel)
e.TimeSlot.Control.Controls.Add(endLabel)
e.TimeSlot.Control.Controls.Add(divisionLabel)
e.TimeSlot.Control.Controls.Add(startLabelPref)
e.TimeSlot.Control.Controls.Add(endLabelPref)
''e.Appointment.Attributes.Add("onclick", "javascript:ViewLeave('" & DataRowView.Item("LeaveID").ToString() & "');")
startLabel.Attributes.Add(
"onclick", "TimeRangeOnclick")
End If
''End If
End Sub
The ordering of appointments in month view which you require is not supported by RadScheduler. Please, accept our apology for this limitation of the control.
Regards,
Peter
the Telerik team

There isn't a workaround, since the rendering of RadScheduler needs to be changed for this requirement to be fulfilled.
All the best,
Peter
the Telerik team

I added the code specified above to this, but nothing happens. Maybe it post left something out assuming the end user knows what should be done...
Basically, my datasubjectfield is an employee's name. I want this to sort alphabetically, but is not sorted in any way at all.
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebPlayGround.WebForm1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
Runat
=
"server"
></
telerik:RadScriptManager
>
<
script
type
=
"text/javascript"
>
Telerik.Web.UI.SchedulerAppointment.prototype.compare =
function(otherAppointment)
{
var subject = this.get_subject();
var otherSubject = otherAppointment.get_subject();
if (otherAppointment == null)
returnValue = 1;
else if (subject == otherSubject)
returnValue = 0;
else if (subject <
otherSubject
)
returnValue = -1;
else
returnValue
=
1
;
return returnValue;
}
</script>
<
telerik:RadScheduler
runat
=
"server"
ID
=
"RadScheduler1"
SelectedView
=
"WeekView"
OverflowBehavior
=
"Expand"
DataSourceID
=
"AccessDataSource1"
DataKeyField
=
"AutoNumber"
DataStartField
=
"StartDate"
DataEndField
=
"EndDate"
DataSubjectField
=
"EmployeeName"
AllowDelete
=
"False"
AllowEdit
=
"False"
AllowInsert
=
"False"
Skin
=
"Web20"
RowHeight
=
"34px"
ReadOnly
=
"True"
>
<
AdvancedForm
Modal
=
"true"
/>
<
Reminders
Enabled
=
"true"
/>
<
TimeSlotContextMenuSettings
EnableDefault
=
"True"
/>
<
AppointmentContextMenuSettings
EnableDefault
=
"True"
/>
<
AdvancedForm
Modal
=
"True"
></
AdvancedForm
>
<
WeekView
WorkDayEndTime
=
"18:00:00"
/>
<
DayView
WorkDayEndTime
=
"18:00:00"
/>
<
MultiDayView
WorkDayEndTime
=
"18:00:00"
/>
<
MonthView
VisibleAppointmentsPerDay
=
"4"
/>
<
AppointmentContextMenuSettings
EnableDefault
=
"True"
></
AppointmentContextMenuSettings
>
<
TimeSlotContextMenuSettings
EnableDefault
=
"True"
></
TimeSlotContextMenuSettings
>
</
telerik:RadScheduler
>
<
asp:AccessDataSource
ID
=
"AccessDataSource1"
runat
=
"server"
DataFile
=
"\\w-fs\vol2\DLBApps\VacSched\VacSched.mdb"
SelectCommand="SELECT VacationBTBL.AutoNumber, IIf([Hours]=8,[Date],DateAdd("h",-[Hours],CDate([Date] & " 17:00"))) AS StartDate, IIf([Hours]=8,[EmailDisplayName],[EmailDisplayName] & " (" & [Hours] & ")") AS EmployeeName, IIf([Hours]=8,[Date]+1,CDate([Date] & " 17:00")) AS EndDate
FROM VacationBTBL INNER JOIN EMPLOYEE ON
VacationBTBL.EMP
=
EMPLOYEE
.EMP
WHERE (((IIf([Hours]=8,[Date],DateAdd("h",-[Hours],CDate([Date] & " 17:00"))))>Date()-32) AND ((EMPLOYEE.EMP_STATUS)="Active"))
ORDER BY IIf([Hours]=8,[EmailDisplayName],[EmailDisplayName] & " (" & [Hours] & ")");" >
</
asp:AccessDataSource
>
</
form
>
</
body
>
</
html
>

I do find it odd that it would not automatically sort by the subject field where the times and duration are equal.

Public Function Compare(first As Appointment, second As Appointment) As Integer _
Implements IComparer(Of Telerik.Web.UI.Appointment).Compare
Imports Telerik.Web.UI
Public Class WebForm1
Inherits System.Web.UI.Page
Private Sub Page_Init1(sender As Object, e As System.EventArgs) Handles Me.Init
RadScheduler1.AppointmentComparer = New CustomAppointmentComparer()
End Sub
End Class
Class CustomAppointmentComparer
Implements IComparer(Of Appointment)
Public Function Compare(first As Appointment, second As Appointment) As Integer Implements IComparer(Of Telerik.Web.UI.Appointment).Compare
If first Is Nothing OrElse second Is Nothing Then
Throw New InvalidOperationException("Can't compare null object(s).")
End If
If [String].Compare(first.Subject, second.Subject) <
0
Then
Return -1
End If
If [String].Compare(first.Subject, second.Subject) > 0 Then
Return 1
End If
Return 0
End Function
End Class