代码之家  ›  专栏  ›  技术社区  ›  Armstrongest

将字典<K,V>绑定到DropDownList

  •  0
  • Armstrongest  · 技术社区  · 15 年前

    <asp:DropDownList id="ddl" runat="server" 
            DataValueField="Key" 
            DataTextField="Value.DisplayName" />
    

    代码隐藏

    var d = new Dictionary<int, MailAddress>();
    d.Add(0,new MailAddress("foo@bar.com", "Mr. Foo");
    d.Add(1,new MailAddress("bar@foo.com", "Mr. Bar");
    
    ddl.DataSource = d;
    ddl.DataBind(); // Error. It doesn't like "DisplayName"
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Jonathan S.    15 年前

    ddl.DataSource = d.Select(r => new KeyValuePair<string, string>(r.Key, r.Value)).ToList();
    
        2
  •  3
  •   Chad Carter    15 年前

    看看这篇文章:

    http://blogs.msdn.com/b/piyush/archive/2006/10/17/how-to-bind-generic-dictionary-with-dropdown-list.aspx

    更改为:

    ddl.DataSource = d.Values; 
    

    以及:

    DataTextField="DisplayName"
    

    它应该做你所期待的。

        3
  •  0
  •   ben f.    15 年前

    public class MyMailAddress : MailAddress
    {
    
        public MyMailAddress(string emailAddress, string displayName) : base(emailAddress, displayName)
        {
    
        }
        public override string ToString()
        {
            return base.DisplayName;
        }
    }
    

    如果将代码控制到类MailAddress,则可以重写类中的默认ToString()实现,并让它返回DisplayName属性,您只需设置DisplayTextField=“Value”,如下所示:

    public class MailAddress
    {
        public MailAddress(string emailAddress, string displayName)
        {
            _DisplayName = displayName;
            _EmailAddress = emailAddress;
        }
        public MailAddress()
        {
            _DisplayName = "";
            _EmailAddress = "";
        }
    
        private string _DisplayName;
        public string DisplayName
        {
            get { return _DisplayName; }
            set { _DisplayName = value; }
        }
    
        private string _EmailAddress;
        public string EmailAddress
        {
            get { return _EmailAddress; }
            set { _EmailAddress = value; }
        }
    
        public override string ToString()
        {
            return DisplayName;
        }
    }
    
    推荐文章