具有间接级别的DataTextField?

时间:2013-01-22 16:26:33

标签: 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;
   ListBox1.DataTextField = "Employee.EmployeName";
   ListBox1.DataBind();
}

EmployeGroup内,有一个Employee和一个组。 我想展示员工的EmployeName成员。

有没有办法在不做的情况下这样做: 为每个员工。添加到列表框。

1 个答案:

答案 0 :(得分:1)

你有几个选择。您可以扩展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();