C# - 将列表转储到下拉列表

时间:2008-10-29 18:23:19

标签: c# list drop-down-menu

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 个答案:

答案 0 :(得分:41)

为什么不直接将DDL绑定到像

这样的列表
DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();

答案 1 :(得分:21)

替换它:

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

用这个:

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

像晚餐一样。

答案 2 :(得分:2)

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

如果它是SharePoint列表,则不起作用 - 错误:数据源是无效类型。它必须是IListSource,IEnumerable或IDataSource。决定加入,以防任何SharePoint开发人员认为这是针对SPList而不是List&lt; string&gt;,如上所述。

有一种方法可以绑定到SPList,但是您可以使用SPListItemCollection,或者更好地使用SPDataSource。对于SharePoint开发人员,请参阅this blog by Chris O' Brien

答案 3 :(得分:1)

那是因为List没有按字符串(名称)索引,而是由整数编制索引。

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

将解决这个问题。

答案 4 :(得分:0)

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

但我实际上更喜欢马库斯的建议。

答案 5 :(得分:0)

您收到该错误,因为集合nameListList,因此您必须使用索引而不是字符串(使用名称)来访问它。

所以你可以写:

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

BTW最好的方法是:

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