C #: scarica un elenco in un elenco a discesa
-
05-07-2019 - |
Domanda
List<String> nameList = new List<String>();
DropDownList ddl = new DropDownList();
L'elenco viene popolato qui, quindi ordinato:
nameList.Sort();
Ora devo rilasciarlo nell'elenco a discesa, che è dove sto riscontrando problemi (usando foreach):
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
Nessun workie - qualche suggerimento? Mi sta dando errori di compilazione:
Error - The best overloaded method match for 'System.Collections.Generic.List<string>.this[int]' has some invalid arguments
Error - Argument '1': cannot convert from 'string' to 'int'
Soluzione
Sostituisci questo:
ddl.Items.Add(new ListItem(nameList[name].ToString()));
con questo:
ddl.Items.Add(new ListItem(name));
Fatto come la cena.
Altri suggerimenti
Perché non associare il DDL direttamente all'Elenco come
DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
ddl.DataSource = nameList;
ddl.DataBind();
Non funziona se si tratta di un elenco di SharePoint - Errore: l'origine dati è un tipo non valido. Deve essere un IListSource, IEnumerable o IDataSource. Ha deciso di intervenire, nel caso in cui gli sviluppatori di SharePoint pensassero che questo fosse per una SPList invece di List & Lt; string & Gt ;, come è stato scritto sopra.
Esiste un modo per collegarsi a una SPList, ma si userebbe un SPListItemCollection o si andrebbe meglio e si utilizza un SPDataSource. Per gli sviluppatori di SharePoint, vedere questo blog di Chris O 'Brien .
Questo perché List non è indicizzato per stringa (nome) ma per ints.
foreach (string name in nameList)
{
ddl.Items.Add(new ListItem(name));
}
Risolverà questo.
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
È il tuo problema.
dovrebbe assomigliare di più a
foreach (string name in nameList){
ddl.Items.Add(new ListItem(name.ToString()));
}
Ma in realtà mi piace un po 'meglio il suggerimento di Marcus.
Questo errore viene visualizzato perché la raccolta nameList
è un List
quindi è necessario accedervi utilizzando un indice e non una stringa (si utilizza il nome).
Quindi puoi scrivere:
foreach (string name in nameList){
ddl.Items.Add(name);
}
A proposito, il modo migliore per farlo è:
ddl.DataSource = nameList;
ddl.DataBind();