2013-05-09 16 views
6

ddl2 füllt basierend auf ddl1 ausgewählten Wert erfolgreich auf.Wie löscht man vorhandene Dropdown-Listenelemente, wenn sich deren Inhalt ändert?

Mein Problem ist, dass die Daten, die bereits in ddl2 vorhanden sind, nicht gelöscht werden, bevor die neuen Daten angehängt werden, so dass der ddl2-Inhalt einfach jedes Mal weiter wächst, wenn ddl1 geändert wird.

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

Ich habe versucht, wieder in der Datenbindung Code hinter auf ausgewählte Indexänderung und auch items.clear mit wenig Erfolg.

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

FRAGE

Wie in einem asp vorliegenden Elemente erhalten: Dropdownlist zu löschen, bevor neue Werte aufgefüllt werden, wenn der Dropdownlists Inhalt auf einem anderen Dropdownlists gewählten Wert abhängig ist?

Bitte senden Sie beliebigen Code in VB

Antwort

17

ddl.Items.Clear() Verwendung wird das Löschen Dropdown-Liste, aber Sie müssen sicher sein, dass Ihre Dropdown-Liste nicht festgelegt ist:

AppendDataBoundItems="True" 

Diese Option bewirkt, dass die Rebound-Daten an die vorhandene Liste angehängt werden, wobei NICHT vor dem Binden gelöscht werden.

SOLUTION

hinzufügen AppendDataBoundItems="False" auf Ihre Dropdownlist.

Jetzt, wenn die Daten wiederhergestellt werden, werden automatisch alle vorhandenen Daten gelöscht.

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

HINWEIS:Dies kann nicht in allen Situationen geeignet sein als appenddatbound Items Dropdown verursachen kann seine eigenen Daten auf jeder Änderung der Liste anzuhängen.


TOP TIP

wollen noch eine Standardliste Artikel zum Drop-Down Hinzufügen sondern müssen Daten erneut zu binden?

Verwenden Sie AppendDataBoundItems="False", um Duplizierungsdaten beim Postback zu verhindern, und fügen Sie dann direkt nach dem Binden Ihrer Dropdownliste ein neues Standardlistenelement ein.

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

Obwohl dies mein ausgewählter Wert gelöscht hat, löschte es auch alle meine Dropdown-Werte, um sie wieder verfügbar zu machen. Ich habe sowohl "True" als auch "False" auf den AppendDataBoundItems versucht. Ich bin sicher, es ist wahrscheinlich etwas, das ich vermisst habe, aber ich wollte es für alle Fälle rauswerfen. –

+0

@JohnWaclawski if 'AppendDataBoundItems =" False "' Wenn die Daten an die Liste gebunden sind, wird die Liste automatisch gelöscht. – Obsidian

9

Sie sollten, bevor Sie listbbox ausräumen Bindung:

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

Siehe meine Änderungen oben. Ich mache das schon, aber es funktioniert nicht. – Obsidian

1

nur den Code und das einzige, was zusammengestellt, die von ihm fehlt, ist, dass Sie Ihre DDL2 auf eine leere Datenquelle zu binden, bevor es wieder wie diese Bindung:

Protected Sub ddl1_SelectedIndexChanged (ByVal Absender als Gegenstand, ByVa l e As EventArgs) //ddl2.Items.Clear()

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

und es funktionierte gut

+0

Ich schätze Ihre Antwort sehr, aber ich habe keine Ahnung was = neue Liste () ist in VB. Es ist ein neues für mich. Kennst du ein VB-Beispiel? – Obsidian

+0

sehen Sie die Edit es gleich New List (Of String)() in Vb.net – Adam

5

Bitte verwenden Sie die folgende

ddlCity.Items.Clear(); 
+0

Das hat super funktioniert! Vielen Dank. Upvoted – SearchForKnowledge

1

nur 2 einfachen Schritten Ihr Problem

allererst überprüfen AppendDataBoundItems Eigenschaft zu lösen, und es falsch

Zweitens alle Positionen mit property .clear()

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