Workaround:
SchedulerBindingDataSource schedulerBindingSource = new SchedulerBindingDataSource();
schedulerBindingSource.EventProvider.ResourceMapperFactory = new MyResourceMapperFactory(schedulerBindingSource);
class MyResourceMapperFactory : Telerik.WinControls.UI.Scheduler.ResourceMapperFactory
{
public MyResourceMapperFactory(SchedulerBindingDataSource owner)
: base(owner)
{ }
public override Telerik.WinControls.UI.Scheduler.ResourceIdMapper GetResourceMapper(object dataSourceItem, PropertyDescriptor resourceIdDescriptor)
{
if (resourceIdDescriptor == null)
{
resourceIdDescriptor = GetResourceIdDescriptor(dataSourceItem);
}
return base.GetResourceMapper(dataSourceItem, resourceIdDescriptor);
}
private PropertyDescriptor GetResourceIdDescriptor(object resourceIdList)
{
string resourceIdPropertyName = ((AppointmentMappingInfo)this.OwnerDataSource.EventProvider.Mapping).ResourceId;
if (string.IsNullOrEmpty(resourceIdPropertyName))
return null;
System.Collections.IList list = resourceIdList as System.Collections.IList;
Type listType = resourceIdList.GetType();
if (list == null && listType.IsGenericType && listType.GetGenericArguments().Length == 1)
{
Type[] genericArguments = listType.GetGenericArguments();
PropertyDescriptorCollection resourceProperties = TypeDescriptor.GetProperties(genericArguments[0]);
return resourceProperties.Find(resourceIdPropertyName, true);
}
else
{
PropertyDescriptorCollection resourceProperties = ListBindingHelper.GetListItemProperties(resourceIdList);
return resourceProperties.Find(resourceIdPropertyName, true);
}
}
}