【问题标题】:Replace CheckBoxList TemplateControl with custom UserControl?用自定义 UserControl 替换 CheckBoxList TemplateControl?
【发布时间】:2011-01-11 21:22:45
【问题描述】:

我正在尝试为标准 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 属性。有什么想法吗?

【问题讨论】:

    标签: asp.net checkboxlist itemplate


    【解决方案1】:

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

    CheckBoxList 控件不提供您希望进行的那种模板修改。您可能需要自定义绑定 Repeater 或 DataList(在 ItemTemplate 中使用 CheckBox 控件)以实现您正在寻找的功能。

    【讨论】:

    • 感谢您的直接答复。这是在 MSDN 文档中的任何地方提到的,还是只是常识?
    • 不确定,我想有一天我在尝试遍历父控件树并认为必须有更好的方法时偶然发现了它。如果有关该问题的文档不那么出色,我不会感到惊讶。
    【解决方案2】:

    您遗漏了一些东西......这个 MSDN 页面有一个非常简单的示例: http://msdn.microsoft.com/en-us/library/36574bf6.aspx

    对于初学者,您缺少 INamingContainer。

    【讨论】:

    • 不确定您的意思?我正在尝试用自定义 UserControl 替换 CheckBoxList 上的 TemplateControl。 msdn.microsoft.com/en-us/library/…
    • 啊...我误解了你的问题。我以为您正在创建一个新控件,其行为类似于 CheckBoxList,但使用模板。
    猜你喜欢
    • 2015-02-13
    • 2015-06-28
    • 2011-02-06
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    相关资源
    最近更新 更多