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)

Другие вопросы по тегам