【问题标题】:Bind Entity object to ListBox with multiple fields for DisplayMember使用 DisplayMember 的多个字段将 Entity 对象绑定到 ListBox
【发布时间】:2014-05-27 19:12:32
【问题描述】:

我正在使用 Entity Framework 6 对来自数据库的客户端列表进行建模。我将集合成功绑定到列表框。我不知道该怎么做是使用对象中的多个字段来绑定到 Windows 窗体列表框的DisplayMember 属性。

这行得通...

myLsiTBox.DataSource = context.Clients.ToList();
myLsiTBox.DisplayMember = "CompanyName";
myLsiTBox.ValueMember = "id";

这失败了……

myLsiTBox.DataSource = context.Clients.ToList();
myLsiTBox.DisplayMember = "CompanyName" + "-" + "LastName" + " - " + "FirstName";
myLsiTBox.ValueMember = "id";

如何在 ListBox 中显示多个字段的内容?

【问题讨论】:

  • 您可以在您的客户对象上放置一个只读属性,例如 FullDetails,然后将 DisplayMember 设置为该属性吗?
  • 这听起来是个好主意。如何创建由对象字段组成的仅限对象属性?

标签: entity-framework-6 listbox-control


【解决方案1】:

如果这是您的客户:

public class Client
{
    public string CompanyName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

您可以创建一个 ClientViewModel,然后将列表框数据源绑定到 ClientViewModels 列表并将 DisplayMember 设置为“FullDetails”。

public class ClientViewModel
{
    public string CompanyName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullDetails { get { return string.Format("{0}-{1} - {2}", this.CompanyName, this.LastName, this.FirstName)} }

    public ClientViewModel(Client c)
    {
        this.CompanyName = c.CompanyName;
        this.FirstName = c.FirstName;
        this.LastName = c.LastName;
    }
}

..或者如果可以的话,只需将 FullDetails 属性添加到原始客户端类。

【讨论】:

    【解决方案2】:
    myLsiTBox.DataSource = context.Clients.select(a=>new {
    
      ID=a.id;
      Title=a.CompanyName + "-" + a.LastName + " - " + a.FirstName;
    
    }).ToList();
    
    myLsiTBox.DisplayMember = "Title";
    myLsiTBox.ValueMember = "ID";
    

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2010-12-21
      相关资源
      最近更新 更多