C# 具有间接级别的DataTextField?

C# 具有间接级别的DataTextField?,c#,asp.net,C#,Asp.net,我正在尝试这样做: protected void Page_Load(object sender, EventArgs e) { Group g = SecurityManager.GetGroup("Programmers"); IEnumerable<EmployeGroup> emps = SecurityManager.GetEmployeesByGroup(g.GroupID); ListBox1.DataSource = emps;

我正在尝试这样做:

protected void Page_Load(object sender, EventArgs e)
{
   Group g = SecurityManager.GetGroup("Programmers");

   IEnumerable<EmployeGroup> emps = 
       SecurityManager.GetEmployeesByGroup(g.GroupID);
   ListBox1.DataSource = emps;
   ListBox1.DataTextField = "Employee.EmployeName";
   ListBox1.DataBind();
}
受保护的无效页面加载(对象发送方,事件参数e)
{
g组=SecurityManager.GetGroup(“程序员”);
IEnumerable EMP=
SecurityManager.GetEmployeesByGroup(g.GroupID);
ListBox1.DataSource=emps;
ListBox1.DataTextField=“Employee.employeeName”;
ListBox1.DataBind();
}
员工组
中有一名
员工
和一个组。 我想显示员工的
employeeName
成员

有没有什么方法可以做到这一点而不必:
为每位员工。添加到列表框。

您有几个选择。您可以扩展Employee类并引入名为EmployeeNameAndId的新属性

public string EmployeeNameAndId 
{ 
       get 
       { 
          return String.Format("{0} ({1})", EmployeeName, EmployeeId); 
       }
}
另一个选项是重写OnDataBinding事件并将两个属性连接在一起。我不建议这样做;这是糟糕的封装和其他原因,但我想让你知道的选择

最后一个选项是从查询中创建一个中间数据源并绑定到该数据源:

var employees = SecurityManager.GetEmployeesByGroup(g.GroupID).Select(e => new { EmployeeNameAndId = e.EmployeeName + " (" + e.EmployeeId + ")"});

ListBox1.DataSource = employees ;
ListBox1.DataTextField = "EmployeeNameAndId";
ListBox1.DataBind();