2013-05-09 4 views
6

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 

QUESTION ASPに存在するアイテムを取得する方法

:dropdownlistsコンテンツが値を選択し、別のdropdownlistsに依存しているときに新しい値が読み込まれる前にクリアするためのドロップダウンリスト?

あなたは結合前に、あなたのlistbboxをクリアする必要がありますVB

答えて

17

を使用してくださいクリアされますドロップダウンリストのドロップダウンリストがでないことを確認する必要があります。

AppendDataBoundItems="True" 

このオプションでは、リバウンドのデータが結合前にクリアしないます既存のリストに追加されます。

SOLUTION

あなたのドロップダウンリストに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 ...", "")) 
+0

これは選択した値をクリアしましたが、すべてのドロップダウン値をクリアして再び使用できないようにしました。 AppendDataBoundItemsで "True"と "False"の両方を試しました。私はそれがおそらく私が逃したものだと確信していますが、場合によってはこれをそこに投げたいと思っています。 –

+0

@JohnWaclawski 'AppendDataBoundItems =" False "ならば、データがリストにバインドされると、自動的にリストが自動的にクリアされます。 – Obsidian

9

を任意のコードを投稿してください。

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

上記の編集を参照してください。私はすでにこれをやっていますが、うまくいきません。 – Obsidian

1

はちょうどあなたのコードをコンパイルし、それから欠落している唯一のことは、あなたが持っているということですあなたのddl2を次のように再度バインドする前に空のデータソースにバインドする:

プロテクトSub ddl1_SelectedIndexChanged(ByVal送信者オブジェクト、ByVaリットル のEventArgsとしてE) //ddl2.Items.Clear()

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

、それがうまく

+0

あなたの回答は本当にありがたいですが、新しいリスト()がVBに何であるか分かりません。それは私にとって新しいものです。あなたはVBの例を知っていますか? – Obsidian

+0

Vb.net – Adam

5

を働いたddl.Items.Clear()を使用して、次の

ddlCity.Items.Clear(); 
+0

のNew List(Of String)()と同等の編集を参照してください。ありがとう。 Upvoted – SearchForKnowledge

1

わずか2簡単な手順

すべて)AppendDataBoundItemsプロパティをチェックし、それは(プロパティ.clearを使用して、すべてのアイテム第二に明らか

偽割り当てる作る

{ 
ddl1.Items.Clear(); 
ddl1.datasource = sql1; 
ddl1.DataBind(); 
} 
の初
関連する問題