单击按钮时如何转到下拉列表中的下一项

How do I go to the next item in Drop Downlist on Button Click

下面是我的代码。这选择了第一个但 1 并且它不会再次出现

Dim idx As Integer = Me.Dpdtokens.SelectedIndex
        If idx <> Me.Dpdtokens.SelectedIndex - 1 Then
           
            Me.Dpdtokens.SelectedIndex = idx + 1

        Else
            Me.Dpdtokens.SelectedIndex = 0
        End If

这对我有用:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    If cboHotel.SelectedIndex >= 0 Then
        ' user has selected item, increase by 1
        If cboHotel.SelectedIndex < cboHotel.Items.Count - 1 Then
            cboHotel.SelectedIndex += 1
        End If
    Else
        ' no selection at all - lets start at 0
        cboHotel.SelectedIndex = 0
    End If
End Sub

因此,如果用户未选择任何内容(并且您允许这样做,则所选索引为 -1。但是,默认情况下它将从第一个被选中的项目开始。

它也不清楚what/why你的逻辑抓取选定的索引,然后在下一个link检查它们是否不同? (他们不可能)。

编辑:==============================

此外,还没有显示 dropdown/combo 框是如何加载值的。

例如,我在页面加载时有这个:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadCombo()
    End If

End Sub

Sub LoadCombo()

    Dim rstHotels As DataTable = New DataTable

    Using conn As New SqlConnection(My.Settings.TEST4)
        Dim strSQL As String =
            "SELECT ID, HotelName, City, Province FROM tblHotels ORDER BY HotelName"
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            rstHotels.Load(cmdSQL.ExecuteReader)
        End Using
    End Using

    cboHotel.DataSource = rstHotels
    cboHotel.DataBind()

End Sub

请注意,我检查 post 的方式非常小心。因此不要一遍又一遍地重新加载组合框。如果每次在页面加载时重新加载并重新绑定组合框,那么选择的索引等将会丢失。

以上建议适用于 gridview、listbox 等。换句话说,当我们有一个页面加载事件时,我们只想在第一个页面加载时加载控件。由于所有其他按钮和事件也会为每个 post-back 反复触发页面加载,因此如果我们更改组合框的索引,但每次都重新加载,那么索引位置将会丢失。

因此,一般来说,组合框、网格视图等控件的加载应该只发生一次,并且是第一次加载页面时。 这个目标是通过在页面加载事件中检查和使用 If Not IsPostBack 代码存根来实现的。