web-dev-qa-db-ja.com

コンテンツが変更されたときに既存のドロップダウンリストアイテムをクリアする方法

ddl1は、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

[〜#〜] question [〜#〜]

ドロップダウンリストのコンテンツが別のドロップダウンリストの選択された値に依存している場合、新しい値が入力される前にasp:dropdownlistに存在するアイテムをクリアするにはどうすればよいですか?

VBにコードを投稿してください

10
DreamTeK

ddl.Items.Clear()を使用すると、ドロップダウンリストがクリアされますが、ドロップダウンリストがnotに設定されていることを確認する必要があります。

AppendDataBoundItems="True"

このオプションを使用すると、リバウンドデータが既存のリストに追加され、バインド前に[〜#〜] not [〜#〜]がクリアされます。

[〜#〜] solution [〜#〜]

追加 - 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 ...", ""))
21
DreamTeK

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

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

以下を使用してください

ddlCity.Items.Clear();
5
Sheryar Nizar

問題を解決するための2つの簡単な手順

最初にAppendDataBoundItemsプロパティをチェックし、falseを割り当てます

次に、プロパティ.clear()を使用してすべてのアイテムをクリアします

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

コードをコンパイルしただけで、欠けているのは、次のように再度バインドする前に、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

そしてそれはうまくいきました

1
Adam