2013-07-13 16 views
2

我嘗試從下拉列表中的選定項目中獲取類別代碼。我用foreach循環填充下拉列表(使用列表)。從選定的代碼中投射ID不起作用

這是我使用來獲取ID代碼:

protected void dropDownCategories_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DropDownList ddl = (DropDownList)sender; 
     Category category = (Category)ddl.Items[ddl.SelectedIndex]; 
     int CatID = category.CategoryID; 
    } 

上面的代碼不工作,並給了我這個錯誤:

Error 2 Cannot convert type 'System.Web.UI.WebControls.ListItem' to 'XXXXXX.classes.Category' 

但是,當我使用類似的代碼爲列表框,下面的代碼工作!

protected void listBoxCategories_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ListBox lb = (ListBox)sender; 
     Category category = (Category)lb.Items[lb.SelectedIndex]; 
     int CatID = category.CategoryID; 
    } 

爲什麼這段代碼適用於列表框而不是下拉列表?

謝謝!

+0

你是否以同樣的方式填充? – MEYWD

+0

是的,與列表框的那個是在一個C#表單應用程序,並且該下拉列表是在asp ...這是否重要? – Swag

回答

1

System.Web.UI.WebControls.DropDownList具有ListItemCollection作爲其項目屬性,這是ListItem的列表,其具有文本和值屬性的對象。

System.Windows.Forms.ListBoxObjectCollection作爲其項目屬性,這基本上是對象

因此,當您將項目添加到一個下拉要添加列表項列表,可以」名單不會被轉換成你的類型,我需要看你的下拉列表填寫代碼,以知道你在每個項目中存儲什麼。

然而,當你添加一個項目到一個列表框,你正在添加一個對象,所以如果在每個項目中添加了你的類的一個實例,那麼它可以通過轉換轉換回來。

+0

假設你有一個類別的集合(例如List ),你可能可以修改上面的代碼而沒有很大的困難 - 例如「var category = categories.Where(c => c.CategoryID == lb.Items [ lb.SelectedIndex]。價值).SingleOrDefault();」這顯然取決於你如何綁定下拉列表。 – pwdst