2009-06-10 5 views
1

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

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

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

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

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

ответ

0

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

Ну, и собирается расширить 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. Я думаю, вы могли бы переопределить, какие шаблоны полей, изменив класс генератора полей ... но все же.