【问题标题】:Populating a DropDownlist From a Strongly Typed List从强类型列表中填充 DropDownlist
【发布时间】:2009-07-04 14:07:28
【问题描述】:

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

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

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

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

这可行,但我需要先和后一并无法操作 Customer 对象中的数据。

【问题讨论】:

标签: c# drop-down-menu


【解决方案1】:

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

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

您可能需要在 Select 之后添加 ToList(),但我认为您可以绑定到 IEnumerable&lt;T&gt;

附注此示例需要 .Net 3.5 框架

【讨论】:

  • 不需要添加 ToList(),因为一旦绑定就会被枚举
  • 这就是我的想法,但我在 MSDN 上找到的唯一示例绑定到 IList、List、Collection 等。
  • 谢谢 tvanfosson...请原谅我的无知(我来自 asp 脚本背景) var 似乎不是 c# 中的关键字我会在这里使用对象吗?和客户。选择,你是说直接访问我的客户对象还是返回的列表?padawan
  • 我假设 .NET 3.5 和 C# 3.0。您会发现 var 是 C# 3.0 中的关键字。您需要 .NET 3.5 才能在 IEnumerable 上使用 Select 扩展方法。效果将是创建一个匿名对象的枚举,其中包含来自您的客户对象的数据的 Name 和 Key 属性。
  • 更新了答案指定本例需要3.5框架
【解决方案2】:

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

【讨论】:

  • 他在帖子中说他无法操作 Customer 对象中的数据(我假设他没有能力添加新属性)
【解决方案3】:

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

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

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

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

【讨论】:

    【解决方案4】:

    要将 UI 表示与基础数据对象分开,您可以创建一个围绕客户的包装对象,例如 CustomerForUI,并使用一个名为 FullName 的属性 - 然后将 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();
    

    【讨论】:

      【解决方案5】:

      您无法手动构建下拉列表中的列表项是否有原因?既然你已经在代码中这样做了,我不明白为什么不这样做。

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

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 2016-08-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多