When attempting to save an appointment I get the following a NullReferenceException.
Call Stack
[NullReferenceException: Object reference not set to an instance of an object.]Telerik.Web.UI.AdvancedTemplate.get_Range() +1509Telerik.Web.UI.AdvancedTemplate.<CreateBasicControlsValidators>b__1(Object source, ServerValidateEventArgs args) +40System.Web.UI.WebControls.CustomValidator.OnServerValidate(String value) +140System.Web.UI.WebControls.CustomValidator.EvaluateIsValid() +113System.Web.UI.WebControls.BaseValidator.Validate() +72System.Web.UI.Page.Validate(String validationGroup) +8742012System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +8737174System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
Example Code.
public class QuoteRateProvider : Telerik.Web.UI.SchedulerProviderBase
{
/// <summary>
/// Converts the quote day to appt data.
/// </summary>
/// <param name="rate">The rate.</param>
/// <returns></returns>
Appointment ConvertQuoteDayToApptData(QuoteRateDay rate)
{
Appointment data = new Appointment();
data.Subject = rate.Description;
data.Visible = true;
data.Start = rate.StartDate;
data.End = rate.EndDate;
data.Attributes.Add("ManualRatePercentage", rate.ManualQuotePercentage.ToString());
foreach (string cls in rate.AircraftClasses)
{
Resource r = new Resource("AircraftClass", cls, cls);
data.Resources.Add(r);
}
data.ID = rate.ID;
data.DataItem = rate;
return data;
}
/// <summary>
/// Converts the quote day to appt data.
/// </summary>
/// <param name="rates">The rates.</param>
/// <returns></returns>
List<Appointment> ConvertQuoteDayToApptData(IEnumerable<QuoteRateDay> rates)
{
List<Appointment> returnList = new List<Appointment>();
foreach (QuoteRateDay rate in rates)
{
returnList.Add(ConvertQuoteDayToApptData(rate));
}
return returnList;
}
/// <summary>
/// Converts the appt data to quote day rate.
/// </summary>
/// <param name="data">The data.</param>
/// <returns></returns>
QuoteRateDay ConvertApptDataToQuoteDay(Appointment data)
{
QuoteRateDay rate = new QuoteRateDay();
rate.Description = data.Subject;
rate.StartDate = data.Start;
rate.EndDate = data.End;
rate.ManualQuotePercentage = Convert.ToDecimal(data.Attributes["ManualRatePercentage"]);
rate.ID = Convert.ToInt32(data.ID);
foreach (Resource r in data.Resources)
{
rate.AircraftClasses.Add(r.Text);
}
return rate;
}
/// <summary>
/// Converts the quote days to appt data.
/// </summary>
/// <param name="rates">The rates.</param>
/// <returns></returns>
IEnumerable<Appointment> ConvertApptDataToQuoteDay(IEnumerable<QuoteRateDay> rates)
{
List<Appointment> data = new List<Appointment>();
foreach (QuoteRateDay rate in rates)
{
data.Add(ConvertQuoteDayToApptData(rate));
}
return data;
}
public override void Delete(Telerik.Web.UI.RadScheduler owner, Telerik.Web.UI.Appointment appointmentToDelete)
{
QuoteRateDayDataAccess.DeleteDailyQuoteRate(Convert.ToInt32(appointmentToDelete.ID));
}
public override IEnumerable<Telerik.Web.UI.Appointment> GetAppointments(Telerik.Web.UI.RadScheduler owner)
{
return ConvertQuoteDayToApptData(QuoteRateDayDataAccess.GetQuoteRateDays(owner.VisibleRangeStart, owner.VisibleRangeEnd));
}
public override IEnumerable<Telerik.Web.UI.ResourceType> GetResourceTypes(Telerik.Web.UI.RadScheduler owner)
{
ResourceType t = new ResourceType("AircraftClass", true);
List<ResourceType> rt = new List<ResourceType>();
rt.Add(t);
return rt;
}
public override IEnumerable<Telerik.Web.UI.Resource> GetResourcesByType(Telerik.Web.UI.RadScheduler owner, string resourceType)
{
List<Resource> rt = new List<Resource>();
rt.Add(new Resource("AircraftClass", "HVY", "HVY"));
rt.Add(new Resource("AircraftClass", "MID", "MID"));
rt.Add(new Resource("AircraftClass", "LGT", "LGT"));
return rt;
}
public override void Insert(Telerik.Web.UI.RadScheduler owner, Telerik.Web.UI.Appointment appointmentToInsert)
{
QuoteRateDayDataAccess.InsertDailyQuoteRate(ConvertApptDataToQuoteDay(appointmentToInsert));
}
public override void Update(Telerik.Web.UI.RadScheduler owner, Telerik.Web.UI.Appointment appointmentToUpdate)
{
QuoteRateDayDataAccess.UpdateDailyQuoteRate(ConvertApptDataToQuoteDay(appointmentToUpdate));
}
}