public static Type GetListItemType(object dataSource, string dataMember) {
// No data source
if (dataSource == null) {
return typeof(Object);
}
// No data member - Determine item type directly from data source
if (String.IsNullOrEmpty(dataMember)) {
return GetListItemType(dataSource);
}
// Get list item properties for this data source
PropertyDescriptorCollection dsProps = GetListItemProperties(dataSource);
if (dsProps == null) {
return typeof(Object);
}
// Find the property specified by the data member
PropertyDescriptor dmProp = dsProps.Find(dataMember, true);
if (dmProp == null || dmProp.PropertyType is ICustomTypeDescriptor) {
return typeof(Object);
}
// Determine item type from data member property
return GetListItemType(dmProp.PropertyType);
}