Completed
Last Updated: 14 Sep 2015 14:16 by ADMIN
ADMIN
Hristo
Created on: 27 Aug 2015 10:54
Category: Scheduler/Reminder
Type: Bug Report
0
FIX. RadScheduler - in EntityFramework when the appointment has no resources NullReferenceException is thrown
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);
            }
        }
    }
0 comments