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开发人员,请参阅Chris O'Brien的此博客

那是因为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()));
}

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

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

所以你可以写:

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

BTW最好的方法是:

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