Ответ 1
Замените это:
ddl.Items.Add(new ListItem(nameList[name].ToString()));
с этим:
ddl.Items.Add(new ListItem(name));
Готово, как ужин.
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 <string> , как было написано выше.
Существует способ привязки к SPList, но вы должны использовать SPListItemCollection или лучше использовать его и использовать SPDataSource. Для разработчиков SharePoint см. этот блог Криса О'Брайена.
Это было бы потому, что List не индексируется строкой (name), а ints.
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();