it-swarm.com.de

Wie lösche ich vorhandene Dropdown-Listenelemente, wenn sich der Inhalt ändert?

ddl2 wird basierend auf dem von ddl1 ausgewählten Wert erfolgreich ausgefüllt.

Mein Problem ist, dass die Daten, die bereits in ddl2 vorhanden sind, nicht gelöscht werden, bevor die neuen Daten angehängt werden, sodass der Inhalt von ddl2 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, im Code hinter der ausgewählten Indexänderung und auch in items.clear eine erneute Datenbindung durchzuführen.

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

FRAGE

Wie werden Elemente in einer asp: Dropdown-Liste angezeigt, die gelöscht werden, bevor neue Werte eingefügt werden, wenn der Inhalt der Dropdown-Listen von einem anderen ausgewählten Dropdown-Listen-Wert abhängt?

Bitte posten Sie einen beliebigen Code in VB

10
DreamTeK

Mit ddl.Items.Clear() wird die Dropdown-Liste gelöscht. Sie müssen jedoch sicherstellen, dass Ihre Dropdown-Liste not eingestellt ist auf:

AppendDataBoundItems="True"

Diese Option bewirkt, dass die Rebound-Daten an die vorhandene Liste angehängt werden, die [~ # ~] nicht [~ # ~] vor dem Binden gelöscht wird.

[~ # ~] Lösung [~ # ~]

Hinzufügen AppendDataBoundItems="False" zu Ihrer Dropdown-Liste.

Wenn nun Daten zurückgespeichert werden, werden zuvor 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 ist möglicherweise nicht in allen Situationen geeignet, da durch anhängende Elemente Ihre Dropdown-Liste bei jeder Änderung der Liste ihre eigenen Daten anhängen kann.


TOP TIPP

Möchten Sie immer noch ein Standardlistenelement zu Ihrer Dropdown-Liste hinzufügen, müssen aber die Daten erneut binden?

Verwenden AppendDataBoundItems="False" Um zu verhindern, dass Daten beim Postback dupliziert werden, fügen Sie direkt nach dem Binden Ihrer Dropdown-Liste ein neues Standard-Listenelement ein.

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

Sie sollten Ihre Listbox vor dem Binden leeren:

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

Bitte benutzen Sie die folgenden

ddlCity.Items.Clear();
5
Sheryar Nizar

Nur 2 einfache Schritte, um Ihr Problem zu lösen

Überprüfen Sie zunächst die AppendDataBoundItems-Eigenschaft und weisen Sie sie false zu

Zweitens löschen Sie alle Elemente mit der Eigenschaft .clear ().

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

sie haben einfach Ihren Code kompiliert und das einzige, was fehlt, ist, dass Sie Ihr ddl2 an eine leere Datenquelle binden müssen, bevor Sie es erneut binden können:

Protected Sub ddl1_SelectedIndexChanged (ByVal Absender als Objekt, ByVal e als EventArgs) //ddl2.Items.Clear ()

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

und es hat gut funktioniert

1
Adam