【问题标题】:How to clear exisiting dropdownlist items when its content changes?内容更改时如何清除现有的下拉列表项?
【发布时间】:2013-05-03 21:02:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 查看我上面的编辑。我已经这样做了,但它不起作用。
    【解决方案2】:

    使用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 ...", ""))
    

    【讨论】:

    • 虽然这清除了我选择的值,但它也清除了我所有的下拉值,使它们不再可用。我在 AppendDataBoundItems 上尝试了“真”和“假”。我敢肯定这可能是我错过的东西,但想把它扔在那里以防万一。
    • @JohnWaclawski if AppendDataBoundItems="False" 那么每当数据绑定到列表时,它都会预先自动清除列表。
    【解决方案3】:

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

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

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

    {
    ddl1.Items.Clear();
    ddl1.datasource = sql1;
    ddl1.DataBind();
    }
    

    【讨论】:

      【解决方案4】:

      请使用以下

      ddlCity.Items.Clear();
      

      【讨论】:

        【解决方案5】:

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

        Protected 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
        

        效果很好

        【讨论】:

        • 非常感谢您的回复,但我不知道 VB 中的 =new List() 是什么。它对我来说是一个新的。你知道一个 VB 的例子吗?
        • 在 Vb.net 中查看 Edit its equal to New List(Of String)()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-17
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多