Динамическое определение свойств источника данных

когда вы создаете специальные элементы

Следующем требованием к фильтрующей сетке, которым мы займемся, будет возможность динамического заполнения комбинированного поля M ComboBox В элементе управления FilteredGrid Именами столбцов или свойств элементов данных в привязанном источнике данных. Когда вы создаете специальные элементы управления, которые, как этот, поддерживают привязку данных, вы должны по возможности не делать никаких предположений о действительных типах данных, привязываемых к вашему элементу управления. Например, один из путей решения обсуждаемой задачи — это сказать, что ваш элемент управления можно будет привязывать только к объектам DataTable , И поэтому вам достаточно просто привести DataSource К типу DataTable, Обратиться к его коллекции Columns И получить имена столбцов из объектов DataColumn Этой коллекции. Проблема такого подхода в том, что никто просто не сможет использовать ваш элемент управления с коллекцией специальных рабочих объектов, что является случаем применения, который вы должны поддерживать точно так же, как его поддерживают привязанные к данным элементы управления из Framework. Поскольку привязанная к данным часть вашего элемента управления состоит из сетки и источника привязки, заботу о деталях привязки к разнообразным коллекциям данных можно предоставить источнику привязки, с чем он прекрасно и справляется. Однако у вас должна быть возможность заглянуть внутрь любой коллекции, привязанной к источнику привязки, и определить имена столбцов или свойств каждого из элементов данных в коллекции, причем это нужно сделать таким образом, чтобы о типе объекта ничего заранее не предполагалось. Является ли источник данных набором данных, таблицей данных или коллекцией рабочих объектов, ваш код должен обращаться с ним соответственно, желательно без написания множества условных проверок, выясняющих принадлежность к определенным типам. К счастью, Framework предусматривает поддержку именно для этого в форме дескрипторов свойств. Воспользовавшись статическим методом GetProperties Класса TypeDescriptor, Можно получить экземпляр Proper TyDescriptorCol Lection, Содержащий дескрипторы для всех свойств объекта вне зависимости от того, является ли он строкой в таблице или же экземпляром рабочего объекта.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *