从强类型列表填充DropDownlist

时间:2009-07-04 14:07:29

标签: c# drop-down-menu

我从一个强类型列表填充DropDownList,这样工作正常。问题是我想首先连接列表中的两个字段然后将它们放在下拉列表中。即, FirstName + LastName。我尝试了一些没有成功的东西,所以有人可以给这个新手一个小帮助。

这是我正在做的一个例子。

private List<Customer> _CustomerList = new List<Customer>();

ddlCustomer.DataSource = _CustomerList;
ddlCustomer.DataTextField = "FirstName";
ddlCustomer.DataValueField = "CustomerKey";
ddlCustomer.DataBind();

这有效,但我需要先和最后一起,我不能操纵Customer对象中的数据。

6 个答案:

答案 0 :(得分:10)

尝试使用动态创建的匿名对象的枚举。

var _CustomerList = customers.Select( c => new {
                                         Name = c.FirstName + " " + c.LastName,
                                         Key = c.CustomerKey
                                    });


ddlCustomer.DataSource = _CustomerList;
ddlCustomer.DataTextField = "Name";
ddlCustomer.DataValueField = "Key";
ddlCustomer.DataBind();

您可能必须在选择后添加ToList(),但我认为您可以绑定到IEnumerable<T>

P.S。此示例需要.Net 3.5 Framework

答案 1 :(得分:0)

您可以在Customer类中创建一个连接FirstName和LastName的属性,并且可以在ddlCustomer.DataTextField中使用该属性

答案 2 :(得分:0)

我还没有找到解决这个问题的好方法。我发现以下方法可以发挥最佳效果:

  • 围绕Customer创建一个包装类(如果可能,继承自Customer,或者创建一个包含Customer对象的全新类,并公开更多属性。

  • 在NEW类中创建一个属性,用于连接您希望数据绑定到的两个字段。

  • 将下拉列表绑定到自定义对象的列表。

答案 3 :(得分:0)

要将UI表示与基础数据对象分开,可以使用名为FullName的单个属性在Customer周围创建一个包装器对象(如CustomerForUI),然后将一个CustomerForUI对象列表放入UI中。

类似的东西:

public class CustomerForUI
{
    private string _FullName;

    public CustomerForUI(Customer c)
    {
       _FullName = c.FirstName + " " + c.LastName;
    }

    public string FullName
    {
       get {return _FullName;}
    }

    public string CustomerKey
    {  ... }
}

并构造一个名为_UIList的CustomerForUI对象列表,并且:

ddlCustomer.DataSource = __UIList;
ddlCustomer.DataTextField = "FullName";
ddlCustomer.DataValueField = "CustomerKey";
ddlCustomer.DataBind();

答案 4 :(得分:0)

有没有理由不能在下拉列表中手动建立列表项?既然你已经在代码中执行此操作,我不明白为什么不这样做。

只需枚举您的业务对象,然后使用:

ddlCustomer.Items.Add(new ListItem("text" , "value"));

其中text是连接在一起的名字和姓氏。

答案 5 :(得分:0)

我同意ScottE ......这似乎是最简单的方法,并且会少一个跟踪的对象。