下拉列表框的DataTextField由哪些属性组成?

10

在ASP.NET中,通过C#是否有一种方法可以使下拉列表的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();
}

我想在使用"Name"时添加"(Zip)",例如"Name (Zip)"。

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

3个回答

22

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

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

如果你不能修改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();

(对不起,我没有可用的 Visual Studio,因此代码可能存在错误)


4

谢谢,这是一个有用的提示,可以帮助我们获得更好的架构,但你完全理解了我的问题。 :) - karlis

2

顺便提一下,在分配数据源之前,尝试先分配“DataTextField”和“DataValueField”。这样做可以防止在数据绑定时触发“SelectedIndexChanged”事件...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接