12

ddl2 根据 ddl1 选择的值成功填充。

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

<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中发布任何代码

4

5 回答 5

26

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

AppendDataBoundItems="True"

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

解决方案

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

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

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

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


重要提示

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

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

ddl.Items.Insert(0, New ListItem("Select ...", ""))
于 2014-05-22T07:52:15.650 回答
11

您应该在绑定之前清除您的列表框:

 Me.ddl2.Items.Clear()
  ' now set datasource and bind
于 2013-05-09T11:48:01.030 回答
6

请使用以下

ddlCity.Items.Clear();
于 2014-04-08T10:31:19.317 回答
2

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

首先检查 AppendDataBoundItems 属性并使其赋值为 false

其次使用属性 .clear() 清除所有项目

{
ddl1.Items.Clear();
ddl1.datasource = sql1;
ddl1.DataBind();
}
于 2015-10-06T06:35:01.100 回答
1

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

Protected Sub ddl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) //ddl2.Items.Clear()

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

它工作得很好

于 2013-05-09T14:47:00.083 回答