Asp.net 循环通过动态创建的控件

Asp.net 循环通过动态创建的控件,asp.net,vb.net,drop-down-menu,foreach,controls,Asp.net,Vb.net,Drop Down Menu,Foreach,Controls,我试图做的是动态创建一组下拉列表,然后我想循环遍历它们并用这些值更新数据库,但我面临的问题是我创建了下拉列表,但当我返回循环遍历它们时,它们不再在面板中。我不知道为什么,但当我调试时,我在pnlTeacherSelect中有50个控件,直到我按下调用prcChoose的按钮 在页面加载时调用 Sub prcSetTeachers() For Each Subject In ds.Tables("Subject").Rows Dim Temp As New DropDown

我试图做的是动态创建一组下拉列表,然后我想循环遍历它们并用这些值更新数据库,但我面临的问题是我创建了下拉列表,但当我返回循环遍历它们时,它们不再在面板中。我不知道为什么,但当我调试时,我在pnlTeacherSelect中有50个控件,直到我按下调用prcChoose的按钮

在页面加载时调用

Sub prcSetTeachers()
    For Each Subject In ds.Tables("Subject").Rows
        Dim Temp As New DropDownList
        pnlTeacherSelect.Controls.Add(Temp)
        Temp.ID = "drp" & Subject.Item(0) & "s" & Child.Item(0)
    Next
End Sub
单击按钮时调用

Sub prcChoose()
    For Each DropDownList In pnlTeacherSelect.Controls.OfType(Of DropDownList)

    'This is never executed

    Next
End Sub

知道是什么原因吗?提前谢谢

您必须在每次回发时(最迟在加载事件中)重新创建所有动态创建的控件。 您还必须确保它们获得与以前相同的ID以触发事件并维护ViewState

如果您知道要创建的控件的数量(可以存储在
ViewState
),则可以通过将计数器变量附加到control-ID来从中派生ID。然后可以在页面的
init
事件中使用正确的ID重新创建它们

推荐读数:

或者你可以使用一个内置的,自动完成这个任务。您只需设置它们的
数据源
并调用
数据绑定
()

以下是我对实施中类似问题的回答:


谢谢!这很好地解释了这一点。我宁愿它没有;这将意味着相当多的摆弄,但哦,好吧。再次感谢!