【问题标题】:dropdownlist DataTextField composed from properties?由属性组成的下拉列表DataTextField?
【发布时间】:2010-09-29 09:46:53
【问题描述】:

有没有办法通过 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();
}

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

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

【问题讨论】:

    标签: c# asp.net data-binding drop-down-menu


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      向 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,所以代码中可能有错误)

      【讨论】:

        【解决方案3】:

        我会推荐阅读这个:http://martinfowler.com/eaaDev/PresentationModel.html

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

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

        【讨论】:

        • 谢谢,这是获得更好架构的有用提示,但您确实完全理解了我的问题。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多