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

バインドする前に listbbox をクリアする必要があります。

 Me.ddl2.Items.Clear()
  ' now set datasource and bind
于 2013-05-09T11:48:01.030 に答える
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 に答える