0

我正在使用自定义模板类来生成带有我的转发器控件的行,我希望能够从我的 aspx 页面后面的代码中动态地指定此转发器中的控件。在后面的代码中,我将控件添加到这样的列表中:

Dim lstControls As New List(Of Control)
lstControls.Add(New TextBox)
lstControls.Add(New Label)
lstControls.Add(New CheckBox)
lstControls.Add(New DropDownList)
lstControls.Add(New CheckBox)

然后我使用这一行将控件添加到我的模板

rptrSummary.ItemTemplate = New myTemplate(ListItemType.Item, , lstControls)

从 instantiateIn sub 我正在做这样的事情:

Dim ph As New PlaceHolder

For i = 0 To lstControls.Count - 1
    ph.Controls.Add(lstControls(i))
Next

这不能正常工作,并且在我的转发器控件的 .databind() 之后,我指定的控件仅出现在最后一行。我认为这是因为我只将控件声明为 NEW 一次,所以我只有一行值。

tldr?/ 结论:

如何生成与列表中的控件相同类型的新控件?就像是:

Dim newControl as new Control = type(lstControl(0))

(这显然行不通)

4

1 回答 1

0

我找到了答案,这里有一些例子,以防其他人被卡住(我也可以更改标题,使其更类似于可能的搜索条件):

dim egTextbox as new textbox
dim egLabel as new label

dim newObject1 as Object = Activator.CreateInstance(egTextbox.GetType)
dim newObject2 as Object = Activator.CreateInstance(egLabel.GetType)

newObject1 现在是一个文本框 newObject2 现在是一个标签

于 2012-12-18T12:20:20.080 回答