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'
È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top