【问题标题】:ASP.NET Cast ListBox item to Custom ClassASP.NET 将 ListBox 项转换为自定义类
【发布时间】:2017-01-14 23:00:21
【问题描述】:

我有一个已绑定项目的 ListBox,但是当我稍后尝试从 ListBox 中检索对象时,出现编译器错误...有人知道这是什么吗?

protected void Page_Load(object sender, EventArgs e)
{
    List<Project> projects;

    DeleteListBox.ItemType = "Project";
    DeleteListBox.DataValueField = "projName";

    using(DBMethods db = new DBMethods())
    {
        //Projects is not null during testing
        projects = db.getProjects() as List<Project>;
        DeleteListBox.DataSource = projects;
        DeleteListBox.DataBind();
    }

}

现在稍后我尝试从 ListBox 中检索对象,但我在整行代码下看到一条红色波浪线:

protected void PermDelete_Click(object sender, EventArgs e)
{
    using(DBMethods db = new DBMethods())
    {
        //Compiler error here
        var toDelete = DeleteListBox.SelectedItem as Project;
    }
}

如何将我选择的列表项转换为 Project 对象而不会出现编译器错误?无法通过引用转换将类型“SystemW.Web.UI.WebControls.ListItem”转换为“Project”...

【问题讨论】:

    标签: c# asp.net listbox


    【解决方案1】:

    您不能将 ListBox 项转换回自定义类,ListItem 基本上是带有两个字符串的键值对。

    您必须在 ListBox 中存储一个与 Project 类中的属性匹配的标识符(在此示例中为属性 ID)。

    DeleteListBox.DataSource = projects;
    DeleteListBox.DataTextField = "Name";
    DeleteListBox.DataValueField = "ID";
    DeleteListBox.DataBind();
    

    然后当点击按钮时,循环ListBox中的所有ListItems,检查哪些被选中,并在带有Linq的Projects列表中找到正确的Project

    protected void PermDelete_Click(object sender, EventArgs e)
    {
        foreach (ListItem item in DeleteListBox.Items)
        {
            if (item.Selected)
            {
                var toDelete = projects.Where(x => x.ID == Convert.ToInt32(item.Value)).FirstOrDefault();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 2014-09-23
      • 1970-01-01
      相关资源
      最近更新 更多