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'
答案 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)
您收到该错误,因为集合nameList
是List
,因此您必须使用索引而不是字符串(使用名称)来访问它。
所以你可以写:
foreach (string name in nameList){
ddl.Items.Add(name);
}
BTW最好的方法是:
ddl.DataSource = nameList;
ddl.DataBind();