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

6 回答 6

42

为什么不直接将 DDL 绑定到列表,例如

DropDownList ddl = new DropDownList();
ddl.DataSource = nameList;
ddl.DataBind();
于 2008-10-29T18:26:01.260 回答
21

替换这个:

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

有了这个:

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

像晚餐一样完成。

于 2008-10-29T18:27:22.663 回答
2
ddl.DataSource = nameList; 
ddl.DataBind(); 

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

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

于 2011-12-17T02:09:46.913 回答
1

那是因为 List 不是按字符串(名称)而是按整数索引的。

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

会解决的。

于 2008-10-29T18:28:08.963 回答
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()));
}

但实际上我更喜欢 Marcus 的建议。

于 2008-10-29T18:28:05.500 回答
0

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

所以你可以写:

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

顺便说一句,最好的方法是:

ddl.DataSource = nameList;
ddl.DataBind();
于 2008-10-29T18:29:09.743 回答