Заменить CheckBoxList TemplateControl на пользовательский UserControl? - PullRequest
3 голосов
/ 01 февраля 2010

Я пытаюсь создать более подробный шаблон элемента для стандартного элемента управления CheckBoxList. Он предоставляет свойство ITemplate с именем TemplateControl, но я не смог найти простой ресурс о том, как на самом деле его использовать. Вот код, который у меня есть:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
    MyBase.OnLoad(e)

    Dim items As New List(Of ListItem)
    items.Add(New ListItem() With {.Text = "A", .Value = "1"})
    items.Add(New ListItem() With {.Text = "B", .Value = "2"})
    items.Add(New ListItem() With {.Text = "C", .Value = "3"})

    Dim lst As New CheckBoxList()
    Dim tpl As ITemplate = LoadTemplate("~/CustomListItem.ascx")
    Dim g As New TemplateControlWrapper()
    tpl.InstantiateIn(g)
    lst.TemplateControl = g
    lst.DataSource = items
    lst.DataBind()

    Form.Controls.Add(lst)

End Sub

Class TemplateControlWrapper
    Inherits UserControl

End Class

Кажется, что оно полностью игнорирует свойство TemplateControl. Есть идеи?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2010

Свойство TemplateControl CheckBoxList на самом деле не позволяет изменять шаблон CheckBoxList. Это свойство полностью унаследовано от System.Web.UI.Control, и оно означает шаблонный элемент управления, в котором живет CheckBoxList, или, иначе говоря, страницу .aspx, пользовательский элемент управления .ascx или главную страницу, которой управляет элемент управления. Живет на. (Если элемент управления включен как часть составного элемента управления, я, честно говоря, не знаю, не поэкспериментировав, будет ли свойство TemplateControl возвращать ноль, или продолжая подниматься по цепочке элементов управления, пока не найдет Page или UserControl.)

Элемент управления CheckBoxList не предлагает вид модификации шаблона, который вы хотите сделать. Вам может потребоваться привязать пользовательский Repeater или DataList (с помощью элемента управления CheckBox в ItemTemplate), чтобы достичь требуемой функциональности.

1 голос
/ 01 февраля 2010

Вам не хватает пары вещей ... на этой странице MSDN есть довольно простой пример: http://msdn.microsoft.com/en-us/library/36574bf6.aspx

Для начала вам не хватает INamingContainer.

...