2012-03-01 156 views
0

我想要做的是动态创建一堆下拉列表,然后我想遍历它们并使用这些值更新数据库,但是我面临的问题是我创建了下拉列表列表,但当我回到循环中时,他们不再在面板中。我不知道为什么,但是当我正在调试时,我在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 

任何想法是什么引起的呢?提前致谢!

回答

2

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

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

Recommandable读数:

或者你可以使用内建的像Repeater自动做到这一点的一个。您只需设置DataSource并致电DataBind()。

这里是我的答案上实现类似的问题:

+0

谢谢!这很好地解释了它。我宁愿它没有;这将意味着相当多的摆弄,但是哦。再次感谢! – 2012-03-01 11:23:48