C# ASP.NET将列表框项强制转换为自定义类

C# ASP.NET将列表框项强制转换为自定义类,c#,asp.net,listbox,C#,Asp.net,Listbox,我有一个已将项目绑定到的列表框,但当我稍后尝试从列表框检索对象时,我得到一个编译器错误。。。有人知道交易是什么吗 protected void Page_Load(object sender, EventArgs e) { List<Project> projects; DeleteListBox.ItemType = "Project"; DeleteListBox.DataValueField = "projName"; using(DBMet

我有一个已将项目绑定到的列表框,但当我稍后尝试从列表框检索对象时,我得到一个编译器错误。。。有人知道交易是什么吗

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();
    }

}

如何在没有编译器错误的情况下将所选列表项强制转换为项目对象?无法通过引用转换将类型“SystemW.Web.UI.WebControl.ListItem”转换为“Project”…

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

您必须在列表框中存储与
项目
类中的属性匹配的标识符(在本例中为属性
ID

然后,单击按钮时,循环列表框中的所有列表项,检查选择了哪些项,并在具有
Linq
的项目列表中找到正确的
项目

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();
        }
    }
}
DeleteListBox.DataSource = projects;
DeleteListBox.DataTextField = "Name";
DeleteListBox.DataValueField = "ID";
DeleteListBox.DataBind();
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();
        }
    }
}