用自定义UserControl替换CheckBoxList TemplateControl?

时间:2010-02-01 20:12:50

标签: asp.net checkboxlist itemplate

我正在尝试为标准CheckBoxList控件创建更详细的项模板。它公开了一个名为TemplateControl的ITemplate属性,但我无法找到关于如何实际使用它的简单资源。这是我到目前为止的代码:

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 个答案:

答案 0 :(得分:5)

CheckBoxList的TemplateControl属性实际上不允许您修改CheckBoxList的模板。这是一个从System.Web.UI.Control一直继承的属性,它表示CheckBoxList所在的模板化控件,或者换句话说,.aspx页面,.ascx用户控件或控件的母版页继续生活。 (如果控件是作为复合控件的一部分包含的,老实说,如果不试验TemplateControl属性是否会返回null,或者在找到Page或UserControl之前一直向上控制链,我真的不知道。)

CheckBoxList控件不提供您要查看的模板修改类型。您可能需要自定义绑定Repeater或DataList(使用ItemTemplate中的CheckBox控件),以实现您正在寻找的功能。

答案 1 :(得分:1)

你缺少一些东西......这个MSDN页面有一个非常简单的例子: http://msdn.microsoft.com/en-us/library/36574bf6.aspx

首先,你缺少INamingContainer。