ddl2 se remplit correctement en fonction de la valeur sélectionnée ddl1.
Mon problème est que les données qui sont déjà présentes dans ddl2 ne sont pas effacées avant d'ajouter les nouvelles données, le contenu ddl2 continue donc de croître à chaque fois que ddl1 est modifié.
<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>
J'ai essayé de re-databinding dans le code derrière sur le changement d'index sélectionné et aussi items.clear avec peu de succès.
Protected Sub ddl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
ddl2.Items.Clear()
ddl2.DataSource = sql2
ddl2.DataBind()
End Sub
QUESTION
Comment obtenir des éléments présents dans une liste déroulante asp: à effacer avant que de nouvelles valeurs ne soient remplies lorsque le contenu des listes déroulantes dépend d'une autre valeur sélectionnée des listes déroulantes?
Veuillez poster n'importe quel code en VB
L'utilisation de ddl.Items.Clear()
effacera la liste déroulante mais vous devez être sûr que votre liste déroulante est pas définie sur:
AppendDataBoundItems="True"
Cette option entraînera l'ajout des données de rebond à la liste existante qui ET NON sera effacée avant la liaison.
SOLUTION
Ajouter AppendDataBoundItems="False"
à votre liste déroulante.
Désormais, lorsque les données sont rebondies, elles effacent automatiquement toutes les données existantes au préalable.
Protected Sub ddl1_SelectedIndexChanged(sender As Object, e As EventArgs)
ddl2.DataSource = sql2
ddl2.DataBind()
End Sub
REMARQUE: Cela peut ne pas convenir dans toutes les situations car les éléments appenddatbound peuvent amener votre liste déroulante à ajouter ses propres données à chaque changement de la liste.
CONSEIL SUPÉRIEUR
Vous souhaitez toujours ajouter un élément de liste par défaut à votre liste déroulante, mais vous devez relier les données?
Utilisation AppendDataBoundItems="False"
pour éviter la duplication des données lors de la publication, puis directement après avoir lié votre liste déroulante, insérez un nouvel élément de liste par défaut.
ddl.Items.Insert(0, New ListItem("Select ...", ""))
Vous devez vider votre listbbox avant la liaison:
Me.ddl2.Items.Clear()
' now set datasource and bind
Veuillez utiliser ce qui suit
ddlCity.Items.Clear();
2 étapes simples pour résoudre votre problème
Tout d'abord, vérifiez la propriété AppendDataBoundItems et faites-lui affecter false
Ensuite, effacez tous les éléments en utilisant la propriété .clear ()
{
ddl1.Items.Clear();
ddl1.datasource = sql1;
ddl1.DataBind();
}
vient de compiler votre code et la seule chose qui manque, c'est que vous devez lier votre ddl2 à une source de données vide avant de le lier à nouveau comme ceci:
Sub protégé ddl1_SelectedIndexChanged (expéditeur ByVal As Object, ByVal e As EventArgs) //ddl2.Items.Clear ()
ddl2.DataSource=New List(Of String)() ddl2.DataSource = sql2 ddl2.DataBind() End Sub
et cela a très bien fonctionné