【问题标题】:Casting to get ID from selected doesn't work投射以从选定对象中获取 ID 不起作用
【发布时间】:2013-07-11 22:45:58
【问题描述】:

我尝试从下拉列表中的选定项目中获取类别 ID。我用 foreach 循环(使用列表)填充下拉列表。

这是我用来获取 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;
    }

为什么这段代码适用于列表框而不适用于下拉列表?

谢谢!

【问题讨论】:

  • 你填写的方式一样吗?
  • 是的,带有列表框的那个在 c# 表单应用程序中,而该下拉列表在 asp 中...这有关系吗?

标签: c# asp.net listbox dropdownbox


【解决方案1】:

System.Web.UI.WebControls.DropDownList 有一个ListItemCollection 作为它的 Items 属性,它是一个 ListItem 的列表,一个具有 text 和 value 属性的对象。

同时

System.Windows.Forms.ListBox 有一个 ObjectCollection 作为它的 Items 属性,它基本上是一个对象列表

因此,当您将项目添加到下拉列表时,您正在添加一个无法转换为您的类型的列表项目,我需要查看您的下拉列表填充代码以了解您在每个列表中存储的内容项目。

但是,当您将项目添加到列表框时,您正在添加一个对象,因此如果在每个项目中添加您的类的实例,则可以通过强制转换将其转换回来。

【讨论】:

  • 假设您有一个类别的集合(例如 List),您可能可以轻松地调整上面的代码 - 例如“var category = categories.Where(c => c.CategoryID == lb.Items[lb.SelectedIndex].Value).SingleOrDefault();"这显然取决于您如何绑定下拉列表。
猜你喜欢
  • 2020-03-13
  • 2021-02-18
  • 1970-01-01
  • 2012-06-04
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2017-07-03
相关资源
最近更新 更多