Как получить доступ к элементам управления в шаблоне макета списка?
Вопрос
Как установить свойство пользовательского элемента управления в ListView
's LayoutTemplate
из кода программной части?
<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>
Я хочу сделать это:
myControl.SomeProperty = somevalue;
Обратите внимание, что мой контроль не в ItemTemplate
, он находится в LayoutTemplate
, поэтому он существует не для всех элементов, а существует только один раз.Поэтому я должен иметь возможность получить к нему доступ один раз, а не для каждого элемента, связанного с данными.
Решение
Чтобы установить свойство элемента управления, находящегося внутри LayoutTemplate, просто используйте метод FindControl в элементе управления ListView.
var control = (MyControl)myListView.FindControl("myControlId");
Другие советы
var control = (MyControl)myListView.FindControl("myControlId");
Это будет работать, но убедитесь, что вы делаете это после привязки данных, иначе LayoutTemplate не будет создан, что вызовет ошибку.
Использовать FindControl метод для каждого ListViewItem.
var control = (MyControl)Item.FindControl("yourControlId");
На этот вопрос был дан ответ в этом вопросе о переполнении стека:
Доступ к элементу управления внутри LayoutTemplate ListView.
См. комментарий к принятому ответу Танатоса.
Я знаю, что этот вопрос задавали больше года назад, но это один из первых результатов по поисковому запросу, который я использовал здесь, поэтому я хотел оставить ответ для всех, кто наткнулся на него.
Макет создается и вызывает событие LayoutCreated, сообщающее, что макет создан в системе.
Затем вы можете использовать listview.FindControl, чтобы получить ссылку на этот элемент управления.
Если вам нужна версия VB.net, вот она:
Dim control = CType(myListView.FindControl("myControlId"), MyControl)