单击按钮时如何转到下拉列表中的下一项
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 代码存根来实现的。
下面是我的代码。这选择了第一个但 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 代码存根来实现的。