2013-05-09 10 views
6

ddl2 zapełnia na podstawie wybranej wartości ddl1.Jak usunąć istniejące elementy listy rozwijanej, gdy zmienia się zawartość?

Mój problem to dane, które są już obecne w ddl2, nie są usuwane przed dodaniem nowych danych, więc zawartość ddl2 nadal rośnie za każdym razem, gdy zmieni się ddl1.

<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> 

Próbowałem ponownego wiązania z danymi w kodzie tyłu na wybranym zmian indeksu, a także items.clear z niewielkim powodzeniem.

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

PYTANIE

Jak zdobyć przedmioty obecne w asp: DropDownList aby usunąć zanim nowe wartości są wypełniane, gdy zawartość dropdownlists jest zależny od innego dropdownlists wybranej wartości?

proszę pisać żadnego kodu w VB

Odpowiedz

17

Korzystanie ddl.Items.Clear() będzie wyczyścić lista rozwijana musi być jednak pewna, że ​​lista rozwijana to , a nie ustawiona na:

AppendDataBoundItems="True" 

Ta opcja spowoduje, że dane o odbiciach zostaną dołączone do istniejącej listy, która zostanie wyczyszczona przed powiązaniem z wartością NOT.

ROZWIĄZANIE

Dodaj AppendDataBoundItems="False" do dropdownlist.

Teraz, gdy dochodzi do odbicia danych, nastąpi automatyczne wyczyszczenie wszystkich istniejących danych.

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

UWAGA:To może nie być odpowiednie w każdej sytuacji jako przedmioty appenddatbound może spowodować rozwijana dołączyć własne dane o każdej zmianie listy.


TOP TIP

Nadal chcesz pozycja domyślna lista dodając do swojej listy rozwijanej ale trzeba ponownie powiązać dane?

Użyj , aby zapobiec powielaniu danych przy odświeżeniu, a następnie bezpośrednio po powiązaniu listy rozwijanej, wstaw nowy, domyślny element listy.

ddl.Items.Insert(0, New ListItem("Select ...", "")) 
+0

Mimo że usunięto wybraną przeze mnie wartość, usunięto również wszystkie moje rozwijane wartości, aby ponownie nie były dostępne. Próbowałem zarówno "True" i "False" na AppendDataBoundItems. Jestem pewien, że prawdopodobnie coś mi umknęło, ale chciałem rzucić to na wszelki wypadek. –

+0

@JohnWaclawski, jeśli 'AppendDataBoundItems =" False "' wtedy, gdy dane zostaną powiązane z listą, automatycznie wyczyści ona listę wcześniej. – Obsidian

9

powinien usunąć swoje listbbox przed związaniem:

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

Zobacz moje zmiany powyżej. Już to robię, ale to nie działa. – Obsidian

1

prostu skompilowany kod, a jedyną rzeczą, której brakuje z nim jest to, że masz powiązać ddl2 z pustym źródłem danych przed ponownym powiązaniem w następujący sposób:

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

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

i to działało dobrze

+0

Naprawdę doceniam twoją odpowiedź, ale nie mam pojęcia co = nowa lista () jest w VB. To jest dla mnie nowe. Czy znasz przykład VB? – Obsidian

+0

zobacz Edycja jest równa nowej liście (ciągu)() w Vb.net – Adam

5

Proszę kliknąć na poniższy

ddlCity.Items.Clear(); 
+0

To działało świetnie! Dzięki. Uaktualnione – SearchForKnowledge

1

zaledwie 2 proste kroki, aby rozwiązać problem

Przede wszystkim sprawdzić właściwość AppendDataBoundItems i sprawiają, że przypisywanie fałszywych

drugie jasne wszystkie elementy za pomocą .clear nieruchomości()

{ 
ddl1.Items.Clear(); 
ddl1.datasource = sql1; 
ddl1.DataBind(); 
} 
Powiązane problemy