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

时间:2013-05-09 11:38:15

标签: asp.net vb.net data-binding sqldatasource html-select

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>

我已尝试在选定的索引更改后面的代码中重新数据绑定,并且还尝试了items.clear但没有成功。

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

问题

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

请在VB中发布任何代码

5 个答案:

答案 0 :(得分:21)

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

AppendDataBoundItems="True"

此选项将导致反弹数据附加到现有列表中,在绑定之前 NOT 将被清除。

<强>解

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

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

Protected Sub ddl1_SelectedIndexChanged(sender As Object, e As EventArgs)
    ddl2.DataSource = sql2
    ddl2.DataBind()
End Sub

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


TOP TIP

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

使用AppendDataBoundItems="False"来防止回发时的重复数据,然后在绑定下拉列表后直接插入新的默认列表项。

ddl.Items.Insert(0, New ListItem("Select ...", ""))

答案 1 :(得分:9)

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

 Me.ddl2.Items.Clear()
  ' now set datasource and bind

答案 2 :(得分:5)

请使用以下

ddlCity.Items.Clear();

答案 3 :(得分:2)

只需2个简单的步骤即可解决您的问题

首先检查AppendDataBoundItems属性并使其指定为false

其次使用property .clear()

清除所有项目
{
ddl1.Items.Clear();
ddl1.datasource = sql1;
ddl1.DataBind();
}

答案 4 :(得分:1)

刚刚编译了你的代码,唯一缺少的就是你必须将你的ddl2绑定到一个空的数据源再绑定它之前再这样:

  

受保护的Sub ddl1_SelectedIndexChanged(ByVal sender As Object,ByVal   e作为EventArgs)       //ddl2.Items.Clear()

ddl2.DataSource=New List(Of String)()
ddl2.DataSource = sql2
ddl2.DataBind() End Sub

它工作得很好