C # Come accedere a un menu a discesa in una visualizzazione elenco?
-
05-07-2019 - |
Domanda
Ho una visualizzazione elenco. Nella mia lista ho una casella a discesa che desidero compilare il mio codice dietro la pagina. L'unica cosa è che non so come accedere a questo controllo web. Quanto segue non funziona:
DropDownList ddl = (DropDownList)lvUserOverview.Controls[0];
So che l'indice è 0 perché l'elenco a discesa è l'unico controllo nella visualizzazione elenco (anche quando provo l'indice 1 ottengo un indice fuori dall'eccezione dell'intervallo).
Qualcuno può dirmi come posso accedere all'elenco a discesa? Nella mia pagina dietro voglio aggiungere listitems.
Codice ASPX:
<asp:DropDownList ID="ddlRole" onload="ddlRole_Load" runat="server">
</asp:DropDownList>
Codebehind:
protected void ddlRole_Load(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)lvUserOverview.FindControl("ddlRole");
if (ddl != null)
{
foreach (Role role in roles)
ddl.Items.Add(new ListItem(role.Description, role.Id.ToString()));
}
}
Soluzione
Per ottenere un handle per l'elenco a discesa all'interno del proprio gestore eventi Load, tutto ciò che devi fare è lanciare il mittente come DropDownList.
DropDownList ddlRole = sender as DropDownList;
Altri suggerimenti
Se questo viene riprodotto in un ListView, allora c'è la possibilità che vengano istanziate più DropDownList, ognuna otterrà un ID univoco e non sarai in grado di usare l'approccio di Matthew.
Potresti voler utilizzare l'evento ItemDataBound per accedere a e.Item.FindControl (" NameOfDropDownList ") che ti permetterà di iterare su ogni menu a discesa creato.
Se ne stai creando solo uno ... perché si trova in un ListView?
Prova questo:
DropDownList ddl = (DropDownList)lvUserOverview.FindControl("NameOfDropDownList");
Se i controlli sono associati ai dati, assicurarsi di provare ad accedere ai loro discendenti dopo l'associazione dei dati. Potrei anche aiutare a ispezionare gli oggetti nel debugger prima di quella riga.