2010-02-01 88 views
3

我正在嘗試爲標準CheckBoxList控件創建更詳細的項目模板。它暴露了名爲TemplateControl的ITemplate屬性,但我無法找到如何實際使用它的簡單資源。這是我到目前爲止的代碼:用自定義UserControl替換CheckBoxList 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屬性。有任何想法嗎?

回答

5

CheckBoxList的TemplateControl屬性實際上並不允許您修改CheckBoxList的模板。這是一個從System.Web.UI.Control繼承的屬性,它意味着CheckBoxList存在的模板化控件,或者換句話說,控件的.aspx頁面,.ascx用戶控件或母版頁繼續生活。 (如果控件是作爲複合控件的一部分包含的,我真的不知道如果TemplateControl屬性會返回null,或者繼續向上控制鏈直到找到Page或UserControl爲止。)

CheckBoxList控件不提供您正在尋找的那種模板修改。您可能需要自定義綁定Repeater或DataList(使用ItemTemplate中的CheckBox控件)以實現您要查找的功能。

+0

感謝您的直接答覆。這是在MSDN文檔中提到的任何地方,還是僅僅是常識? – Kevin 2010-02-01 20:42:18

+0

不知道,我想我有一天在試圖遍歷父控樹並意識到必須有更好的方法時偶然偶然發現它。如果關於這個問題的文件不是很出色,這並不會讓我感到驚訝。 – 2010-02-01 20:47:41

1

你缺少一對夫婦的事情......這個MSDN頁面有一個非常簡單的例子: http://msdn.microsoft.com/en-us/library/36574bf6.aspx

對於初學者來說,你缺少作INamingContainer。

+0

不確定你的意思?我想用自定義UserControl替換CheckBoxList上的TemplateControl。 http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.loadtemplate.aspx – Kevin 2010-02-01 20:28:53

+0

啊......我誤解了你的問題。我以爲你正在創建一個像CheckBoxList一樣的新控件,但是使用了一個模板。 – Bryan 2010-02-01 20:48:01