dropdownlist DataTextField由属性组成?

kar*_*lis 10 c# asp.net data-binding drop-down-menu

有没有办法通过由对象的多个属性组成的c#在asp.net中创建下拉列表的datatextfield属性?

public class MyObject
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string FunkyValue { get; set; }
  public int Zip { get; set; }
}

protected void Page_Load(object sender, EventArgs e)
{
  List<MyObject> myList = getObjects();
  ddList.DataSource = myList;
  ddList.DataValueField = "Id";
  ddList.DataTextField = "Name";
  ddList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

我想要不要使用"名称",而是"名称(Zip)",例如.

当然,我可以更改MyObject类,但我不想这样做(因为MyObject类在模型类中,不应该在UI中做我需要的东西).

M4N*_*M4N 22

将另一个属性添加到MyObject类并绑定到该属性:

public string DisplayValue
{
 get { return string.Format("{0} ({1})", Name, Zip); }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您无法修改MyObject,请在表示层中创建一个包装器对象(仅用于显示).这也可以使用一些LINQ来完成:

List<MyObject> myList = getObjects();
ddList.DataSource = (from obj in myList
                    select new
                    {
                      Id = obj.Id,
                      Name = string.Format("{0} ({1})", obj.Name, obj.Zip)
                    }).ToList();
ddList.DataValueField = "Id";
ddList.DataTextField = "Name";
ddList.DataBind();
Run Code Online (Sandbox Code Playgroud)

(抱歉,我没有Visual Studio,因此代码中可能存在错误)