Как мне получить значение DynamicControl? - PullRequest
1 голос
/ 11 июня 2009

Я использую функциональность динамических данных ASP.NET, чтобы сделать что-то немного странное. А именно, создать динамический список полей в качестве дочерних элементов основного объекта.

Так что в основном у меня есть Ticket.Fields. На главной странице перечислены все поля для Ticket, а свойство Fields имеет DynamicControl, который генерирует список элементов управления для сбора дополнительных данных.

Сложность в том, что этот список ТАКЖЕ использует динамические данные для генерации элементов управления, поэтому каждое поле может быть любым из определенных шаблонов FieldTemplates ... то есть я не обязательно знаю, каким будет действительный элемент управления данными при попытке получить значение.

Итак, как мне получить значение DynamicControl?

Нужно ли создавать новый подкласс FieldTemplate, который предоставляет средства для получения значения?

1 Ответ

0 голосов
/ 11 июня 2009

Удивительно, что будет делать хороший ночной сон.

Что ж, мы собираемся расширить FieldTemplate только для того, чтобы понять, что он уже предоставляет управление данными ...

foreach (ListViewDataItem i in lvFields.Items)
    {         
        var val = i.FindDynamicControlRecursive("ValueText") as DynamicControl;
        var ft = val.FindFieldTemplate("ValueText") as FieldTemplateUserControl;

        ParseControl(ft.DataControl)
    } 

ParseControl создан здесь, но у меня фактически есть класс, который может обработать эту часть для меня ... так что, надеюсь, будущие читатели хотя бы поймут идею здесь.

Важным битом является приведение результата FindFieldTemplate к FieldTemplateUserControl. По какой-то причине он просто возвращает Control, хотя кажется, что он должен иметь возможность только возвращать FieldTemplateUserControls. Я думаю, вы могли бы переопределить, что шаблоны полей, изменив класс генератора полей ... но все же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...