2017-01-14 6 views
0

私はアイテムにバインドしたリストボックスを持っていますが、後でリストボックスからオブジェクトを取得しようとすると、コンパイラエラーが発生します。その取引は何ですか?今ASP.NETをカスタムクラスにキャストするリストボックスアイテム

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

} 

は後に、私はリストボックスからオブジェクトを取得しようとしているが、私は、コードの行全体の下に赤い波線を取得:

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

私はに私の選択したリスト項目をキャストすることができますどのようにコンパイラエラーのないプロジェクトオブジェクト?参照変換を使用して 'SystemW.Web.UI.WebControls.ListItem'タイプを 'Project'に変換できません...

答えて

0

ListBoxアイテムをカスタムクラスに戻すことはできません。ListItemは基本的にキー値2つの弦とペア。

Projectクラスのプロパティ(この例ではプロパティーID)と一致するリストボックスに識別子を格納する必要があります。

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

ボタンをクリックすると、ループリストボックス内のすべてのリストアイテム、選択とLinqでプロジェクトのリスト内の正しい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(); 
     } 
    } 
} 
関連する問題