2008-10-29 160 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