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

实体框架-将组合框绑定到规范化表字段

  •  1
  • Damien  · 技术社区  · 15 年前

    我目前正在尝试将实体绑定到表单,但我希望将DataConfidenceLevel(请参阅下文)绑定到一个ComboBox,其中confidenceDescription作为显示成员。填充组合框的正确方法是什么?

    (我目前正在使用WPF,但可以接受WinForms答案)

    谢谢

    Entity Designer http://img19.imageshack.us/img19/374/entity.png

    3 回复  |  直到 15 年前
        1
  •  2
  •   Daniel Brückner Pradip    15 年前

    您希望将集合绑定到控件,并将相关实体(即类型为dataconfidencelevel的导航属性dataconfidencelevel)作为显示成员?

    这通常通过重写toString()非常简单,

    public partial class DataConfidenceLevel
    {
       public override String ToString()
       {
          return this.ConfidenceDescription;
       }
    }
    

    而不是将DisplayMember设置为要绑定的实体的DataConfidenceLevel属性。

        2
  •  2
  •   Damien    15 年前

    答案比我想象的要简单。

        comboBox.DataBindings.Add(new Binding("SelectedItem", this.dataBindingSource, "DataConfidenceLevel", true));
        comboBox.DataSource = db.DataConfidenceLevel;
        comboBox.DisplayMember = "ConfidenceDescription";
        comboBox.ValueMember = "ConfidenceLevelID";
    
        3
  •  1
  •   RobS    15 年前

    我写了两篇关于处理这种情况的一种方法的博客文章——它适用于ASP.NET,但它可能会帮助您。

    这是柱子, first one 更多的是对这个问题的介绍, second entry 演示如何将其固定在一起。

    我不确定这是否符合“正确的方法”,但这肯定是一种方法:)如果这对你有帮助,我很乐意回电!

    编辑:在阅读了Danbruc的答案之后,您当然可以像他建议的那样覆盖导航属性上的ToString(只读),但这只是一个部分答案。

    除非您的LINQ查询包含“include”语句,否则这将不起作用,例如

    var listOfThings = (from t in db.Thingy
                        .Include("DataConfidenceLevel")
                        select t).ToList();
    

    省略.include()意味着不会将任何内容绑定到列。