I’ve encountered this problem on occasion, where I want to display more than one field in a dropdownlist’s DataTextField property. In the past, I’ve overcome this problem by rewriting a SQL statement, or adding another column in the database itself to accomodate my needs.
In one of my classes (INFO 465: Projects in Information Systems @ VCU), we’re working from a database which we’re not allowed to change. The reason we can’t change it is because the instructor uses the same database for his examples. I could just write another method into my business logic layer, but it would get cluttered pretty quickly.
So, I decided to make use of LINQ and found the following solution:
ddlUsers.DataSource = BLL.Employee.GetEmployees()
.Select(be =>
new {
ID = be.Id,
FullName = String.Format("{0}{1}{2}",
be.LastName,
(!string.IsNullOrEmpty(be.FirstName) ? ", " : string.Empty),
be.FirstName)
}).AsEnumerable();
This takes the List of Business Entity objects and uses the LINQ select statement to generate an implicit/anonymous object from that. The only downfall to this method is that the new object only has local scope. But, since I’m only using this in a dropdown, it’s a pretty nifty trick.