首页 > 解决方案 > 在运行时从后面的代码将项目添加到 DropDownList

问题描述

在前端我有这样的东西:

<asp:DropDownList ID="MyBadDropDown" AutoPostBack="true" AppendDataBoundItems="true" runat="server" OnChange="valueChanged()" DataTextField="Text" DataValueField="Value"></asp:DropDownList>

在后端作为测试代码我有这样的东西:

    Dim listCol As New ListItemCollection
    listCol.Add(New ListItem With {.Value = ""})

    listCol.Add(New ListItem With {.Value = ConvertValue(Of String)("640", "0"), .Text = "New Item"})
    Me.hidValeuForThis.Value = "640"


    Me.MyBadDropDown.DataSource = listCol
    Me.MyBadDropDown.DataBind()

但是当我点击那部分代码时,新项目不会被添加到下拉项目中,直到有回发......所以它不会自动显示在下拉项目中。我该如何解决?

标签: asp.netvb.net

解决方案


我简化了一点,它似乎工作。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"   
    DataTextField="Text" DataValueField="Value" Height="16px" 
    OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>

后面的代码...

Public Class _Default
Inherits Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim listCol As New ListItemCollection
        listCol.Add(New ListItem(String.Empty, String.Empty))
        listCol.Add(New ListItem("New Item", "640"))
        listCol.Add(New ListItem("Another Item", "950"))
        DropDownList1.DataSource = listCol
        DropDownList1.DataBind()
    End If
End Sub

Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
    Debug.Print(DropDownList1.SelectedValue)
    Debug.Print(DropDownList1.SelectedItem.ToString)
End Sub
End Class

推荐阅读