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!