遍历不同的下拉列表

Looping through different dropdown lists

我在一个页面上有多个控件,它们都很相似并且都已编号。例如,我有多个月份控件,如下所示:

但是当我有适用于所有控件的通用代码时,我需要一个像这样的大 Select Case 语句:

Select Case Count
    Case 1
        Call Me.FillReplacements(rf.Replacements(0), Me.Replacement1MonthDropDownList, Me.Replacement1AmountTextBox, Me.ReplacementSaveButton)
    Case 2
        Call Me.FillReplacements(rf.Replacements(0), Me.Replacement1MonthDropDownList, Me.Replacement1AmountTextBox, Me.ReplacementSaveButton)
        Call Me.FillReplacements(rf.Replacements(1), Me.Replacement2MonthDropDownList, Me.Replacement2AmountTextBox, Me.SplitButton1)

是否可以遍历控件并通过名称获取它们——只需将名称中的数字替换为我循环中的当前 Count

抱歉,我是 Visual Basic 的新手! :S

是的,你可以。 Page class(Me,在本例中)有一个 FindControl 方法,允许您按名称查找控件。因此,例如,您可以这样做:

Dim monthControl As Control = Me.FindControl("Replacement" & Count.ToString() & "MonthDropDownList")
Dim splitControl As Control = Me.FindControl("SplitButton" & Count.ToString())

如果您需要将它们转换为更具体的类型,您可以使用 DirectCast。例如:

Dim monthControl As DropDownList = DirectCast(Me.FindControl("Replacement" & Count.ToString() & "MonthDropDownList"), DropDownList)

或者,也许更好的是,您可以制作一个控件数组,以便您可以通过索引访问它们。例如,如果您定义了这样一个数组:

Private monthControls() As DropDownList = {Replacement1MonthDropDownList, Replacement2MonthDropDownList, Replacement3MonthDropDownList}

然后你可以像这样通过索引访问它:

Dim currentMonthControl As DropDownList = monthControls(Count)