C # - Dumping eine Liste zu einem Dropdownlist
-
05-07-2019 - |
Frage
List<String> nameList = new List<String>();
DropDownList ddl = new DropDownList();
Liste wird hier bevölkert, dann sortiert:
nameList.Sort();
Jetzt muss ich es in die Dropdownlist fallen, das ist, wo ich Probleme habe (mit foreach):
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
Keine Workie - irgendwelche Vorschläge? Es gibt mir Fehler kompilieren:
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'
Lösung
Ersetzen Sie diese:
ddl.Items.Add(new ListItem(nameList[name].ToString()));
mit dieser:
ddl.Items.Add(new ListItem(name));
Fertig wie Abendessen.
Andere Tipps
Warum bindet nicht nur die DDL direkt auf die Liste wie
DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
ddl.DataSource = nameList;
ddl.DataBind();
funktioniert nicht, wenn es eine Sharepoint-Liste ist - Fehler: Datenquelle ist ein ungültiger Typ. Es muss entweder ein IListSource, IEnumerable oder IDataSource sein. Beschlossen zu läuten, falls all Sharepoint-Entwickler gedacht, dies für eine SPList war anstelle von List
Es gibt einen Weg zu einem SPList zu binden, aber Sie würden eine SPListItemCollection verwenden, oder gehen Sie eine bessere und eine SPDataSource verwenden. Für die Sharepoint-Entwickler finden Sie unter diesen Blog von Chris O‘Brien .
Das wäre da Liste nicht von String (Name), sondern durch Ints indiziert ist.
foreach (string name in nameList)
{
ddl.Items.Add(new ListItem(name));
}
Wird das in Ordnung bringen.
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
Ist Ihr Problem.
es sollte aussehen
foreach (string name in nameList){
ddl.Items.Add(new ListItem(name.ToString()));
}
Aber ich tatsächlich wie Marcus' Vorschlag ein wenig besser.
Sie diesen Fehler erhalten, weil die Sammlung nameList
ein List
ist, so dass Sie es mit einem Index keinen String zugreifen müssen (Sie verwenden Name).
Sie können also schreiben:
foreach (string name in nameList){
ddl.Items.Add(name);
}
BTW der beste Weg, dies zu tun ist:
ddl.DataSource = nameList;
ddl.DataBind();