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'
Foi útil?

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 , como foi escrito acima.

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top