如何在内容发生变化时清除现有的下拉列表项?

Dre*_*TeK 10 vb.net asp.net data-binding html-select sqldatasource

ddl2成功填充基于ddl1选定值.

我的问题是在添加新数据之前,ddl2中已经存在的数据不会被清除,因此ddl2内容在每次更改ddl1时都会继续增长.

<asp:DropDownList ID="ddl1" RunAt="Server" DataSourceID="sql1" DataValueField="ID1" DataTextField="Name2" AppendDataBoundItems="True" AutoPostBack="True">
  <asp:ListItem Text="ALL" Selected="True" Value="0"/>
</asp:DropDownList>

<asp:DropDownList ID="ddl2" RunAt="Server" DataSourceID="sql2" DataValueField="ID2" DataTextField="Name2" AppendDataBoundItems="True" AutoPostBack="True">
  <asp:ListItem Text="ALL" Selected="True" Value="0"/>
</asp:DropDownList>

<asp:SqlDataSource ID="sql1" RunAt="Server" SelectCommand="sp1" SelectCommandType="StoredProcedure"/>

<asp:SqlDataSource ID="sql2" RunAt="Server" SelectCommand="sp2" SelectCommandType="StoredProcedure">
  <SelectParameters>
    <asp:ControlParameter Type="Int32" Name="ID1" ControlID="ddl1" PropertyName="SelectedValue"/>
  </SelectParameters>
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)

我已尝试在选定的索引更改后面的代码中重新数据绑定以及items.clear但收效甚微.

Protected Sub ddl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    ddl2.Items.Clear()
    ddl2.DataSource = sql2
    ddl2.DataBind()
End Sub
Run Code Online (Sandbox Code Playgroud)

如果下拉列表内容依赖于另一个下拉列表选定值,如何在填充新值之前清除asp:dropdownlist中的项目以进行清除?

请在VB中发布任何代码

Dre*_*TeK 21

使用ddl.Items.Clear()将清除下拉列表,但您必须确保您的下拉列表设置为:

AppendDataBoundItems="True"
Run Code Online (Sandbox Code Playgroud)

此选项将导致回弹数据附加到现有列表,该列表在绑定之前不会被清除.

添加AppendDataBoundItems="False"到您的下拉列表.

现在,当数据反弹时,它将自动清除所有现有数据.

Protected Sub ddl1_SelectedIndexChanged(sender As Object, e As EventArgs)
    ddl2.DataSource = sql2
    ddl2.DataBind()
End Sub
Run Code Online (Sandbox Code Playgroud)

注意: 这可能并不适用于所有情况,因为appenddatbound项可能导致您的下拉列表在列表的每次更改时附加自己的数据.


顶尖提示

仍然想要一个默认列表项添加到您的下拉列表但需要重新绑定数据?

使用AppendDataBoundItems="False"以防止回发重复数据,然后结合你的下拉列表中插入一个新的默认列表项后直接.

ddl.Items.Insert(0, New ListItem("Select ...", ""))
Run Code Online (Sandbox Code Playgroud)


jas*_*son 9

您应该在绑定之前清除listbbox:

 Me.ddl2.Items.Clear()
  ' now set datasource and bind
Run Code Online (Sandbox Code Playgroud)


小智 5

请使用以下内容

ddlCity.Items.Clear();
Run Code Online (Sandbox Code Playgroud)