如何将其他数据绑定到asp.net列表框控件?

时间:2016-05-27 10:35:29

标签: c# asp.net webforms

使用asp.net webforms我需要在每个列表项中存储其他数据(value字段和text字段除外)。

这是我的数据源:

class Person 
 {
      public string Name {get;set;}
      public string PersonId {get;set;}
      public string PersonType {get;set;}
 }

 List<Person> lista = GetPersons();

 ListBox1.DataTextField = "Name";
 ListBox1.DataValueField = "PersonId";
 ListBox1.DataSource = lista;
 ListBox1.DataBind();

DataTextField是名称。 DataValueField是PersonId,但是我还想绑定PersonType属性,以便当我从页面回发用户检索所选项目时:

       ListItemCollection items = ListBox1.Items;
        foreach (ListItem item in items)
        {
            if (item.Selected == true)
            {
                // Here I want to retrive also
                // the PersonType attribute
                string personType = item.????
            }
        }  

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,你所建议的并不容易。 ListItem只能轻松支持值和文本。

作为一种解决方法,我建议只需通过存储在ListItem中的ID来检索此人:

List<Person> lista = GetPersons();
ListItemCollection items = ListBox1.Items;
foreach (ListItem item in items)
{
  if (item.Selected == true)
  {
    // Here I retrieve the PersonType by matching the ID
    var person = lista.FirstOrDefault( person => person.PersonId == item.value);
    // You may want to check for null...
    string personType = person.PersonType;
  }
}

或者,您可能希望直接通过Person创建一个PersonId函数,因为这似乎是您可能需要定期进行的。