Hi There,
I am working on the timeline view of the Scheduler. I set the back color for appointments in RadScheduler1_AppointmentDataBound function. But the back color of the appointments loses after clicking the cancel button on the advanced pop-up form. Please see the following for my test code. Any help is much appreciated.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RadSchedulerTest.aspx.cs" Inherits="RadSchedulerTest" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!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
>
<
style
type
=
"text/css"
>
.rsAptDelete {
display: none;
}
</
style
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
runat
=
"server"
ID
=
"RadScriptManager1"
/>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadScheduler1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadScheduler1"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
>
</
telerik:AjaxUpdatedControl
>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
>
</
telerik:RadAjaxLoadingPanel
>
<
div
>
<
telerik:RadScheduler
runat
=
"server"
ID
=
"RadScheduler1"
Width
=
"920"
OnAppointmentInsert
=
"RadScheduler1_AppointmentInsert"
Reminders-Enabled
=
"false"
OnAppointmentUpdate
=
"RadScheduler1_AppointmentUpdate"
DataKeyField
=
"ID"
DataSubjectField
=
"Subject"
DataStartField
=
"Start"
DataEndField
=
"End"
DataRecurrenceField
=
"RecurrenceRule"
DataRecurrenceParentKeyField
=
"RecurrenceParentId"
DataReminderField
=
"Reminder"
SelectedView
=
"TimelineView"
ShowViewTabs
=
"false"
AppointmentStyleMode
=
"Default"
OnTimeSlotCreated
=
"RadScheduler1_TimeSlotCreated"
OnNavigationComplete
=
"RadScheduler1_NavigationComplete"
ColumnWidth
=
"28"
OnAppointmentDataBound
=
"RadScheduler1_AppointmentDataBound"
StartInsertingInAdvancedForm
=
"true"
>
<
TimelineView
ShowInsertArea
=
"false"
SlotDuration
=
"1"
GroupBy
=
"User, Month"
GroupingDirection
=
"Vertical"
ColumnHeaderDateFormat
=
"MMM dd ddd"
HeaderDateFormat
=
"MMMM, yyyy"
/>
</
telerik:RadScheduler
>
</
div
>
</
form
>
</
body
>
</
html
>
using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Telerik.Web.UI;
using Telerik.Web.UI.Calendar;
using Telerik.Web.UI.Calendar.View;
public partial class RadSchedulerTest : System.Web.UI.Page
{
private const string AppointmentsKey = "Telerik.Web.Examples.Scheduler.BindToList.CS.Apts";
private List<
AppointmentInfo
> Appointments
{
get
{
List<
AppointmentInfo
> sessApts = Session[AppointmentsKey] as List<
AppointmentInfo
>;
if (sessApts == null)
{
sessApts = new List<
AppointmentInfo
>();
Session[AppointmentsKey] = sessApts;
}
return sessApts;
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (!IsPostBack)
{
Session.Remove(AppointmentsKey);
InitializeResources();
InitializeAppointments();
}
RadScheduler1.DataSource = Appointments;
}
protected void Page_Load(object sender, EventArgs e)
{
RadScheduler1.EnableAjaxSkinRendering = true;
if (!IsPostBack & RadScheduler1.SelectedView == SchedulerViewType.TimelineView)
{
int year = RadScheduler1.SelectedDate.Year;
int month = RadScheduler1.SelectedDate.Month;
int numberOfDaysInCurrentMonth = DateTime.DaysInMonth(year, month);
RadScheduler1.SelectedDate = new DateTime(year, month, 1);
RadScheduler1.TimelineView.NumberOfSlots = numberOfDaysInCurrentMonth;
}
}
protected void RadScheduler1_NavigationComplete(object sender, SchedulerNavigationCompleteEventArgs e)
{
if (RadScheduler1.SelectedView == SchedulerViewType.TimelineView)
{
int year = RadScheduler1.SelectedDate.Year;
int month = RadScheduler1.SelectedDate.Month;
int numberOfDaysInCurrentMonth = DateTime.DaysInMonth(year, month);
RadScheduler1.SelectedDate = new DateTime(year, month, 1);
RadScheduler1.TimelineView.NumberOfSlots = numberOfDaysInCurrentMonth;
}
}
protected void RadScheduler1_TimeSlotCreated(object sender, Telerik.Web.UI.TimeSlotCreatedEventArgs e)
{
}
protected void RadScheduler1_AppointmentDataBound(object sender, SchedulerEventArgs e)
{
e.Appointment.BackColor = System.Drawing.Color.FromName("#3d2f2b");
e.Appointment.ForeColor = System.Drawing.Color.White;
}
protected void RadScheduler1_AppointmentInsert(object sender, SchedulerCancelEventArgs e)
{
Appointments.Add(new AppointmentInfo(e.Appointment));
}
protected void RadScheduler1_AppointmentUpdate(object sender, AppointmentUpdateEventArgs e)
{
AppointmentInfo ai = FindById(e.ModifiedAppointment.ID);
RecurrenceRule rrule;
if (RecurrenceRule.TryParse(e.ModifiedAppointment.RecurrenceRule, out rrule))
{
rrule.Range.Start = e.ModifiedAppointment.Start;
rrule.Range.EventDuration = e.ModifiedAppointment.End - e.ModifiedAppointment.Start;
TimeSpan startTimeChange = e.ModifiedAppointment.Start - e.Appointment.Start;
for (int i = 0; i < rrule.Exceptions.Count; i++)
{
rrule.Exceptions[i] = rrule.Exceptions[i].Add(startTimeChange);
}
e.ModifiedAppointment.RecurrenceRule = rrule.ToString();
}
ai.CopyInfo(e.ModifiedAppointment);
}
private void InitializeResources()
{
ResourceType resType = new ResourceType("User");
resType.ForeignKeyField = "UserID";
RadScheduler1.ResourceTypes.Add(resType);
RadScheduler1.Resources.Add(new Resource("User", 1, "Test1"));
RadScheduler1.Resources.Add(new Resource("User", 2, "Test2"));
RadScheduler1.Resources.Add(new Resource("User", 3, "Test3"));
RadScheduler1.Resources.Add(new Resource("User", 4, "Test4"));
RadScheduler1.Resources.Add(new Resource("User", 5, "Test5"));
RadScheduler1.Resources.Add(new Resource("User", 6, "Test6"));
RadScheduler1.Resources.Add(new Resource("User", 7, "Test7"));
RadScheduler1.Resources.Add(new Resource("User", 8, "Test8"));
RadScheduler1.Resources.Add(new Resource("User", 9, "Test9"));
RadScheduler1.Resources.Add(new Resource("User", 10, "Test10"));
}
private void InitializeAppointments()
{
DateTime start = DateTime.UtcNow.Date;
start = start.AddDays(6);
Appointments.Add(new AppointmentInfo("6", start, start.AddDays(1), string.Empty, null, string.Empty, 1));
Appointments.Add(new AppointmentInfo("5", start.AddDays(2), start.AddDays(3), string.Empty, null, string.Empty, 2));
start = start.AddDays(-1);
DateTime dayStart = RadScheduler1.UtcDayStart(start);
Appointments.Add(new AppointmentInfo("3", dayStart, dayStart.AddDays(1), string.Empty, null, string.Empty, 1));
Appointments.Add(new AppointmentInfo("2", start.AddDays(2), start.AddDays(3), string.Empty, null, string.Empty, 2));
start = start.AddDays(2);
Appointments.Add(new AppointmentInfo("8", start.AddDays(2), start.AddDays(4), string.Empty, null, string.Empty, 1));
}
private AppointmentInfo FindById(object ID)
{
foreach (AppointmentInfo ai in Appointments)
{
if (ai.ID.Equals(ID))
{
return ai;
}
}
return null;
}
}
class AppointmentInfo
{
private readonly string _id;
private string _subject;
private DateTime _start;
private DateTime _end;
private string _recurrenceRule;
private string _recurrenceParentId;
private string _reminder;
private int? _userID;
public string ID
{
get
{
return _id;
}
}
public string Subject
{
get
{
return _subject;
}
set
{
_subject = value;
}
}
public DateTime Start
{
get
{
return _start;
}
set
{
_start = value;
}
}
public DateTime End
{
get
{
return _end;
}
set
{
_end = value;
}
}
public string RecurrenceRule
{
get
{
return _recurrenceRule;
}
set
{
_recurrenceRule = value;
}
}
public string RecurrenceParentID
{
get
{
return _recurrenceParentId;
}
set
{
_recurrenceParentId = value;
}
}
public int? UserID
{
get
{
return _userID;
}
set
{
_userID = value;
}
}
public string Reminder
{
get
{
return _reminder;
}
set
{
_reminder = value;
}
}
private AppointmentInfo()
{
_id = Guid.NewGuid().ToString();
}
public AppointmentInfo(string subject, DateTime start, DateTime end,
string recurrenceRule, string recurrenceParentID, string reminder, int? userID)
: this()
{
_subject = subject;
_start = start;
_end = end;
_recurrenceRule = recurrenceRule;
_recurrenceParentId = recurrenceParentID;
_reminder = reminder;
_userID = userID;
}
public AppointmentInfo(Appointment source)
: this()
{
CopyInfo(source);
}
public void CopyInfo(Appointment source)
{
Subject = source.Subject;
Start = source.Start;
End = source.End;
RecurrenceRule = source.RecurrenceRule;
if (source.RecurrenceParentID != null)
{
RecurrenceParentID = source.RecurrenceParentID.ToString();
}
if (!String.IsNullOrEmpty(Reminder))
{
Reminder = source.Reminders[0].ToString();
}
Resource user = source.Resources.GetResourceByType("User");
if (user != null)
{
UserID = (int?)user.Key;
}
else
{
UserID = null;
}
}
}