2008-10-29 103 views
13
List<String> nameList = new List<String>(); 
DropDownList ddl = new DropDownList(); 

列表在这里居住,然后进行排序:C# - 倾销名单的下拉列表

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' 

回答

20

列表替换此:

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

与此:

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

像晚餐一样完成。

40

为什么不直接绑定的DDL像

DropDownList ddl = new DropDownList(); 
ddl.DataSource = nameList; 
ddl.DataBind(); 
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())); 
} 

不过我却喜欢马库斯的建议,更好一点。

1

这将是因为列表不是由字符串(名称)索引,而是通过整数。

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

会解决这个问题。

0

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

所以你可以这样写:

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

BTW做到这一点的最好办法是:

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

不一样,如果它是一个SharePoint列表工作 - 错误:数据源一个无效的类型。它必须是IListSource,IEnumerable或IDataSource。如果任何SharePoint开发人员认为这是针对SPList而不是列表<字符串>,就像上面所写的一样。

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