PropertyInfo для DataRow из его PropertyDescriptor
Как получить PropertyInfo для DataRow из его PropertyDescriptor.
//pd is a PropertyDescriptor
var propertyinfo = pd.ComponentType.GetProperty(pd.Name);
Приведенный выше код отлично работает для коллекции списков, но не работает, пока я работаю с DataTable.
Есть идеи по этому поводу?
2 ответа
PropertyInfo
это мир отражений, где типы имеют явные свойства CLI. DataTable
не принадлежит этому миру; он использует System.ComponentModel
гибкая модель собственности, через TypeDescriptor
, PropertyDescriptor
и т. д. В основном: в смысле CLI отсутствует свойство. PropertyDescriptor
может использоваться (и используется) для описания "свойств" в более гибком, динамическом смысле, когда макет не указывается как тип, но определяется пользователем, часто на лету во время выполнения.
Так что нет: вы не можете сделать это. Вопрос не имеет смысла; или, по крайней мере, в общем случае это не так. Есть также "типизированные наборы данных", но, честно говоря, я настоятельно рекомендую держаться подальше от них.
Кстати, вы можете придумать свои собственные псевдо-свойства для любого типа - для этого есть точки расширения (TypeDescriptor
, ITypedList
, ICustomTypeDescriptor
, TypeConverter
, так далее); но только код, который явно использует System.ComponentModel
когда-нибудь их увижу.
DataView построен на основе DataTable:
DataView viewData = table.DefaultView;
Поскольку DataView реализует ITypedList, вы можете получить из него коллекцию PropertyDescriptors:
(просмотреть как ITypedList).GetItemProperties(null)