I recently had a problem with the DevExpress scheduler where I needed to get the appointment Id to manipulate my application's own business objects. For some reason the guys at DevExpress have the Id as a private member variable which should make this impossible.
However with the reflection capabilities of .net nothing can be really hidden, so I ended up writing some pretty horrible code to get the Id but I think it was the only way to solve my problem:
Appointment apt = Control.SelectedAppointments[0];FieldInfo fld = typeof(Appointment).GetField("id", BindingFlags.Instance | BindingFlags.NonPublic);int appointmentId = int.Parse(fld.GetValue(apt).ToString());
I put this in my custom appointment handler class:
public class CustomMenuAppointmentCallbackCommand : SchedulerCallbackCommand { string menuItemId = String.Empty; public CustomMenuAppointmentCallbackCommand(ASPxScheduler control) : base(control) { } public override string Id { get { return "USRAPTMENU"; } } public string MenuItemId { get { return menuItemId; } } protected override void ParseParameters(string parameters) { this.menuItemId = parameters; } protected override void ExecuteCore() { Appointment apt = Control.SelectedAppointments[0]; FieldInfo fld = typeof(Appointment).GetField("id", BindingFlags.Instance | BindingFlags.NonPublic); int appointmentId = int.Parse(fld.GetValue(apt).ToString()); //more code using the appointment id }}
That's it!