C # - сбросить список в раскрывающийся список

StackOverflow https://stackoverflow.com/questions/247856

  •  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();
scroll top