C # - Dumping uma lista para um dropdownlist
-
05-07-2019 - |
Pergunta
List<String> nameList = new List<String>();
DropDownList ddl = new DropDownList();
lista é preenchida aqui, então classificadas:
nameList.Sort();
Agora eu preciso deixá-lo cair no dropdownlist, que é onde eu estou tendo problemas (usando foreach):
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
No workie - alguma sugestão? É me dando erros de compilação:
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'
Solução
Substitua o seguinte:
ddl.Items.Add(new ListItem(nameList[name].ToString()));
com este:
ddl.Items.Add(new ListItem(name));
Feito como o jantar.
Outras dicas
Por que simplesmente não ligam o DDL diretamente para a lista como
DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
ddl.DataSource = nameList;
ddl.DataBind();
não funciona se for uma lista do SharePoint - Erro: fonte de dados é um tipo inválido. Ele deve ser um IListSource, IEnumerable, ou IDataSource. Decidiu carrilhão em, em caso algum desenvolvedores SharePoint achava que isso era para um SPList em vez de List
Existe uma maneira de vincular a um SPList, mas você pode usar um SPListItemCollection, ou sair um pouco melhor e usar um SPDataSource. Para os desenvolvedores do SharePoint, consulte neste blog por Chris O' Brien .
Isso seria porque lista não é indexado por string (nome), mas por ints.
foreach (string name in nameList)
{
ddl.Items.Add(new ListItem(name));
}
vai corrigir isso.
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
é seu problema.
que deve olhar mais como
foreach (string name in nameList){
ddl.Items.Add(new ListItem(name.ToString()));
}
Mas eu realmente gosto sugestão Marcus' um pouco melhor.
Você recebe esse erro porque o nameList
coleção é um List
por isso você deve acessá-lo usando um índice não é uma string (você usar o nome).
Assim, você pode escrever:
foreach (string name in nameList){
ddl.Items.Add(name);
}
BTW a melhor maneira de fazer isso é:
ddl.DataSource = nameList;
ddl.DataBind();