Динамическое заполнение комбинированного поля

b такая возможность стала поддерживаться

Чтобы динамически заполнить элемент управления ComboBox Именами полей или свойств в элементах коллекции источника данных, добавьте в класс FilteredGrid Вспомогательный метод, показанный в

Первое, что делает вспомогательный метод, это проверяет ваш флаг Reinitializing, Устанавливаемый реализацией интерфейса ISupportlnitialize, Выясняя, не был ли этот метод вызван, пока вы находитесь в стадии инициализации. В этом случае метод просто возвращает управление, ничего больше не делая, поскольку предполагается, что инициализация самого источника данных может быть еще не завершена.

Затем при помощи обобщенного типа List Создается список строк для сохранения имен полей по ходу их раскрытия. Источник привязки экспонирует свойство List, Которое обеспечивает непосредственный доступ к любому списку объектов, содержащемуся в нем в качестве источника данных. Можно было бы просто обратиться к свойству DataSource Источника привязки, то тогда вам пришлось бы вручную разрешить компонент данных внутри этого источника данных. Использование свойства List Сразу дает непосредственный доступ к развернутой коллекции данных, которая возвращает ссылку на IList. Затем, если список содержит какие-то элементы, метод обращается к первому элементу в коллекции. Источники привязки поддерживают только списки, содержащие гомогенную коллекцию, поэтому первый элемент должен дать вам всю необходимую информацию. После этого метод получает коллекцию дескрипторов для свойств первого элемента в списке и организует цикл, проходящий по этим дескрипторам. Код проверяет каждый дескриптор свойства на предмет того, не реализует ли само представляемое им свойство интерфейс IList, Используя его свойство PropertyType, Которое возвращает экземпляр объекта Туре, Описывающий действительный тип свойства. Для выяснения того, не представляет ли свойство дочернюю коллекцию, код вызывает метод Getlnterface Экземпляра Туре. В этом случае он не добавляет это свойство в список. Тем самым обеспечивается защита в двух возможных сценариях. Если вы имеете дело с источником данных, который является набором данных с таблицами, имеющими отношения между собой, в дескрипторах свойств эти отношения будут проявляться как свойства.