C # - сбросить список в раскрывающийся список - PullRequest
15 голосов
/ 29 октября 2008
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'

Ответы [ 6 ]

41 голосов
/ 29 октября 2008

Почему бы просто не привязать DDL непосредственно к списку, как

DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
21 голосов
/ 29 октября 2008

Заменить это:

 ddl.Items.Add(new ListItem(nameList[name].ToString()));

с этим:

 ddl.Items.Add(new ListItem(name));

Готово как ужин.

2 голосов
/ 17 декабря 2011
ddl.DataSource = nameList; 
ddl.DataBind(); 

Не работает, если это список SharePoint - Ошибка: источник данных недопустимого типа. Это должен быть либо IListSource, IEnumerable, либо IDataSource. Решил присоединиться, если разработчики SharePoint подумали, что это SPList вместо List , как было написано выше.

Существует способ привязки к SPList, но вы бы использовали SPListItemCollection, или лучше, и SPDataSource. Для разработчиков SharePoint см. этот блог Криса О 'Брайена .

1 голос
/ 29 октября 2008

Это потому, что List не индексируется по строке (имени), а по целым числам.

foreach (string name in nameList)
{
    ddl.Items.Add(new ListItem(name));
}

Это исправит.

0 голосов
/ 29 октября 2008

Вы получаете эту ошибку, потому что коллекция nameList является List, поэтому вы должны получить к ней доступ, используя индекс, а не строку (вы используете имя).

Так что вы можете написать:

foreach (string name in nameList){
    ddl.Items.Add(name);
}

Кстати, лучший способ сделать это:

ddl.DataSource = nameList;
ddl.DataBind();
0 голосов
/ 29 октября 2008
    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()));
}

Но мне на самом деле нравится предложение Маркуса немного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...