我有一种情况,我需要使用数据网格并在PageInit中动态添加列,因为网格有一些它必须处理的条件请求.我正在使用BoundColumns和ButtonColumns轻松移动,这些很容易.问题在于通过代码创建TemplateColumn.我找到了一些关于创建自定义类的示例,该类通过创建使用ITemplate实现的类来动态添加控件.然而,这是有效的,我正在努力如何数据绑定元素.
在我的网格中,我会使用<%= DataBinder.Eval(Container.DataItem,"MyValue")%>或类似的,但这不是一个选项.在ITemplate内部的Container也没有数据项属性,所以我不能绑定那里.任何人都有可能有帮助的建议或链接,我只是没有在谷歌找到正确的东西.
如何将嵌入资源作为ITemplate加载?LoadTemplate()方法只接受字符串虚拟路径,显然这对嵌入式资源不起作用.
将控件添加到UpdatePanel时,仍然可以从包含页面后面的代码访问它.这是如何实现的?自定义控件开发人员可以这样做吗?
换句话说,如果我使用ITemplate接口开发模板控件,是否有一种方法可以将其连接起来(如UpdatePanel似乎),以便可以从包含页面访问(声明性地)包含的任何控件?
我正在尝试为标准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
Run Code Online (Sandbox Code Playgroud)
它似乎完全忽略了TemplateControl属性.有任何想法吗?