C # - сбросить список в раскрывающийся список
-
05-07-2019 - |
Вопрос
List<String> nameList = new List<String>();
DropDownList ddl = new DropDownList();
Список заполняется здесь, затем сортируется:
nameList.Sort();
Теперь мне нужно добавить его в выпадающий список, где у меня возникают проблемы (используя foreach):
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
Нет работника - есть предложения? Это дает мне ошибки компиляции:
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'
Решение
Замените это:
ddl.Items.Add(new ListItem(nameList[name].ToString()));
с этим:
ddl.Items.Add(new ListItem(name));
Сделано как ужин.
Другие советы
Почему бы просто не привязать DDL напрямую к списку, как
DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
ddl.DataSource = nameList;
ddl.DataBind();
Не работает, если это список SharePoint - ошибка: источник данных недопустимого типа. Это должен быть либо IListSource, IEnumerable, либо IDataSource. Решил присоединиться, если разработчики SharePoint подумали, что это для SPList вместо List & Lt; string & Gt;, как было написано выше.
Существует способ привязки к SPList, но вы должны использовать SPListItemCollection или лучше использовать SPDataSource. Для разработчиков SharePoint см. этот блог Криса О 'Брайена а>. р>
Это может произойти из-за того, что List индексируется не по строке (имени), а по целым числам.
foreach (string name in nameList)
{
ddl.Items.Add(new ListItem(name));
}
Это исправит.
foreach (string name in nameList){
ddl.Items.Add(new ListItem(nameList[name].ToString()));
}
Это твоя проблема?
это должно выглядеть больше как
foreach (string name in nameList){
ddl.Items.Add(new ListItem(name.ToString()));
}
Но на самом деле мне больше нравится предложение Маркуса.
Вы получаете эту ошибку, потому что коллекция nameList
является List
, поэтому вы должны обращаться к ней, используя индекс, а не строку (вы используете имя).
Так что вы можете написать:
foreach (string name in nameList){
ddl.Items.Add(name);
}
Кстати, лучший способ сделать это:
ddl.DataSource = nameList;
ddl.DataBind();