2013-05-09 9 views
6

ddl2 popola correttamente in base al valore selezionato ddl1.Come cancellare gli elementi di elenco a discesa esistenti quando il suo contenuto cambia?

Il mio problema è che i dati già presenti in ddl2 non vengono cancellati prima di aggiungere nuovi dati, quindi il contenuto di ddl2 continua a crescere ogni volta che viene modificato 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> 

ho cercato ri-associazione dati in codice dietro il cambiamento selezionare l'indice e anche items.clear con scarso successo.

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

DOMANDA

Come ottenere gli elementi presenti in un asp: DropDownList per cancellare prima di nuovi valori vengono popolati quando il contenuto DropDownList dipende da un altro valore selezionato DropDownList?

si prega di inviare alcun codice in VB

risposta

17

Utilizzando ddl.Items.Clear() sarà chiaro il dropdownlist tuttavia devi essere sicuro che il tuo dropdownlist sia non impostato a:

AppendDataBoundItems="True" 

Questa opzione farà sì che i dati di rimbalzo vengano aggiunti all'elenco esistente che sarà NON essere cancellato prima dell'associazione.

SOLUZIONE

Aggiungere AppendDataBoundItems="False" al vostro dropdownlist.

Ora, quando i dati sono in estensione, cancellerà automaticamente tutti i dati esistenti.

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

NOTA:questo potrebbe non essere adatto in tutte le situazioni come elementi appenddatbound può causare il vostro menu a discesa per aggiungere i propri dati su ogni cambiamento della lista.


TOP TIP

vuole ancora un elemento della lista predefinita di aggiungere alla vostra discesa ma è necessario associare nuovamente i dati?

Utilizzare AppendDataBoundItems="False" per impedire i dati di duplicazione sul postback e quindi direttamente dopo l'associazione del menu a discesa inserire un nuovo elemento di elenco predefinito.

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

Anche se questo ha eliminato il mio valore selezionato, ha anche eliminato tutti i miei valori di drop down per renderli nuovamente non disponibili. Ho provato sia "True" che "False" su AppendDataBoundItems. Sono sicuro che probabilmente è qualcosa che mi mancava, ma volevo buttarlo là fuori nel caso. –

+0

@JohnWaclawski se 'AppendDataBoundItems =" False "' allora ogni volta che i dati sono associati alla lista, cancellerà automaticamente l'elenco in anticipo. – Obsidian

9

Si dovrebbe svuotare la tua listbbox prima di rilegatura:

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

Vedere le mie modifiche sopra. Lo sto già facendo ma non funziona. – Obsidian

1

appena compilato il codice e l'unica cosa che manca è che si ha per vincolare il proprio ddl2 a un'origine dati vuota prima di legame di nuovo in questo modo:

protetto mittente Sub ddl1_SelectedIndexChanged (ByVal come oggetto, ByVa l e As EventArgs) //ddl2.Items.Clear()

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

e ha funzionato bene

+0

Apprezzo molto la tua risposta, tuttavia non ho idea di cosa = nuova la lista () sia in VB. È nuovo su di me. Conoscete un esempio di VB? – Obsidian

+0

vedere la modifica uguale alla nuova lista (di stringa)() in Vb.net – Adam

5

Utilizzare il seguente

ddlCity.Items.Clear(); 
+0

Questo ha funzionato alla grande! Grazie. Votato – SearchForKnowledge

1

soli 2 semplici passaggi per risolvere il problema

Prima di tutto controllare proprietà AppendDataBoundItems e rendono assegnare falsi

In secondo luogo cancellano tutte le voci utilizzando .clear proprietà()

{ 
ddl1.Items.Clear(); 
ddl1.datasource = sql1; 
ddl1.DataBind(); 
} 
Problemi correlati