Using an ObjectDataSource I have all of my methods working (Select, Insert, Update, Delete). The only thing that doesn't work is if a user creates an appointment and then attempts to change it without reloading the page my Update method is never gets called. If I switch to the default AppointmentStorage (using the C1WebScheduleData.xml file) it works just fine. I have a gut feeling this is related to using an integer key instead of a GUID.
Is this a bug in C1WebSchedule? I am currently using version 2.0.20073.232.
Here are some relevant snippets:
<C1WebSchedule:C1WebSchedule>
<DataStorage>
<AppointmentStorage DataSourceID="AppointmentDataStorage">
<Mappings>
<SubjectMapping MappingName="Subject" />
<LocationMapping MappingName="Location" />
<StartMapping MappingName="Start" />
<EndMapping MappingName="End" />
<BodyMapping MappingName="Body" />
<IndexMapping MappingName="Index" />
</Mappings>
</AppointmentStorage>
</DataStorage>
</C1WebSchedule:C1WebSchedule>
<asp:ObjectDataSource ID="AppointmentDataStorage" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetAppointments"
TypeName="AppointmentStorage" DataObjectTypeName="AppointmentStorage+C1ScheduleAppointment"
DeleteMethod="DeleteAppointment" InsertMethod="InsertAppointment" UpdateMethod="UpdateAppointment">
<SelectParameters>
<asp:Parameter DefaultValue="<%$ Code:HttpContext.Current.User.Identity.Name %>"
Name="userId" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
[System.ComponentModel.DataObject]
public class AppointmentStorage
{
public class C1ScheduleAppointment
{
// stuff deleted
}
public List<C1ScheduleAppointment> GetAppointments(string userId)
{
using (iRsDatabaseHandler dbh = new iRsDatabaseHandler())
{
List<Appointment> iRsAppts = dbh.GetAppointments(userId);
List<C1ScheduleAppointment> c1Appts = new List<C1ScheduleAppointment>();
foreach (Appointment iRsA in iRsAppts)
{
C1ScheduleAppointment c1A = new C1ScheduleAppointment();
c1A.Index = int.Parse(iRsA.Id);
c1A.Start = iRsA.Start;
c1A.End = iRsA.Start.AddHours(1);
c1A.Subject = "";
c1A.Location = "";
c1A.Body = "";
c1Appts.Add(c1A);
}
return c1Appts;
}
}
public void UpdateAppointment(C1ScheduleAppointment appt)
{
using (iRsDatabaseHandler dbh = new iRsDatabaseHandler())
{
dbh.UpdateAppointment(appt.Index.ToString(), appt.Start);
}
}
public int InsertAppointment(C1ScheduleAppointment appt)
{
using (iRsDatabaseHandler dbh = new iRsDatabaseHandler())
{
// returning and id as an integer doesn't seem to help anything
// neither does placing into the object
appt.Index = int.Parse(dbh.AddAppointment(appt.Start));
return appt.Index;
}
}
public void DeleteAppointment(C1ScheduleAppointment appt)
{
using (iRsDatabaseHandler dbh = new iRsDatabaseHandler())
{
dbh.RemoveAppointment(appt.Index.ToString());
}
}
}