Подтвердить что ты не робот

С# - сброс списка в выпадающий список

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'
4b9b3361

Ответ 1

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

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

с этим:

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

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

Ответ 2

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

DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();

Ответ 3

ddl.DataSource = nameList; 
ddl.DataBind(); 

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

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

Ответ 4

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

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

Будет исправлено это.

Ответ 5

    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()));
}

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

Ответ 6

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

Итак, вы можете написать:

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

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

ddl.DataSource = nameList;
ddl.DataBind();