dropdownlist DataTextField由属性组成?

有没有办法通过由对象的多个属性组成的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 myList = getObjects(); ddList.DataSource = myList; ddList.DataValueField = "Id"; ddList.DataTextField = "Name"; ddList.DataBind(); } 

我想要不要使用“名称”,而是“名称(Zip)”,例如。

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

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

 public string DisplayValue { get { return string.Format("{0} ({1})", Name, Zip); } } 

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

 List 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(); 

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

我建议阅读这篇: http : //martinfowler.com/eaaDev/PresentationModel.html

基本上,您希望创建一个表示绑定到特定UI的类。 因此,您可以将Model(示例中的My Object)映射到ViewModel对象,然后以这种方式绑定下拉列表。 这是考虑关注点分离的一种很酷的方式。

编辑:这是ViewModel的另一个博客系列: http : //blogs.msdn.com/dancre/archive/2006/10/11/datamodel-view-viewmodel-pattern-series.aspx

顺便说一句,尝试在分配DataSource之前分配“DataTextField”和“DataValueField”。 这样做会阻止在数据绑定时触发“SelectedIndexChanged”事件…