代码之家  ›  专栏  ›  技术社区  ›  Chris Conway

如何将具有复合键的对象列表绑定到复选框列表?

  •  1
  • Chris Conway  · 技术社区  · 17 年前

    我有一个包含复合键的对象列表,因为传统数据库支持多租户。然后如何将该列表绑定到asp.net中的复选框列表?我们目前正在使用c#3.5。

    public class SiteKey
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
    }
    public class Order
    {
        public SiteKey Key { get; set; }
        public string Name { get; set; }
    }
    

    我的存储库返回一个 IList<Order> 然后我想绑定到一个复选框列表。 此代码:

    chkList.DataValueField = "Key";
    chkList.DataTextField = "Name";
    

    正确显示,但值( chkList.Items[0].Value )返回只包含“MyAssemblyName.SiteKey”,而不是密钥。

    我如何才能有效地实现这一点?

    谢谢

    3 回复  |  直到 17 年前
        1
  •  3
  •   Jamie Ide    17 年前

    重写SiteKey上的ToString(),以返回包含组成主键的属性的字符串表示形式的串联字符串。然后必须解析项的Value属性才能检索键。

    public class SiteKey
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
    
        public override string ToString()
        {
            return Id.ToString() + "|" + CustomerId.ToString();
        }
    }
    

    在检索密钥的方法中:

    string[] siteKey = chkList.Items[0].Value.Split('|');
    int id = int.Parse(siteKey[0]);
    int customerId = int.Parse(siteKey[1]);
    
        2
  •  2
  •   Sam    17 年前

    Jamie的建议很好,但我不想重写ToString(),而只是投影您的IList<订单>进入IEnumerable<列表项>在绑定之前:

    var items = 
        from o in dataList // dataList being IList returned from repository
        select new ListItem(o.Name, 
                            String.Format("{0}|{1}", 
                                          o.Key.Id, o.Key.CustomerId));
    
    // ... bind items to dropdown ...
    

    我更喜欢这样做,而不是重写ToString(),因为ToString()是通用的,在任何地方都可以使用,因此可能会让人感到痛苦,而这是一个局部修改,不会影响任何其他内容。

        3
  •  0
  •   o.k.w    17 年前

    您可以修改订单类吗?使用SiteKey作为valuefield返回类型(除非重写ToString()方法)。

    public class Order
    {
        public SiteKey Key { get; set; }
        public int KeyId { get{return Key.Id;} }
        public string Name { get; set; }
    }
    
    chkList.DataValueField = "KeyId";
    chkList.DataTextField = "Name";
    
    推荐文章