如何使用实体框架C#将两个表绑定到Datagridview

时间:2015-04-25 18:31:53

标签: c# winforms linq entity-framework datagridview

我有两个Tables Estate和EstateType。如何将这两个表绑定到一个数据网格? 我试过这样的事情,但这不起作用。

 var getAllEst = (from ee in AgencyContext.Estate join eeT in AgencyContext.EstateType
                         on ee.EstateID equals eeT.EstateID select ee).ToList();

dataGridView1.DataSource = getAllEst;

而不是字符串值EstateType,Landscape,Description它给了我数字 enter image description here

正如所建议的那样@ tpayne84我添加了新列,但现在我得到了这个而不是值: enter image description here

这是我使用的代码:

var getAllEst = (from ee in AgencyContext.Estate join eeT in AgencyContext.EstateType
                         on ee.EstateID equals eeT.EstateID select ee).ToList();
        DataGridViewTextBoxColumn EstateType1 = new DataGridViewTextBoxColumn();
        DataGridViewTextBoxColumn LandScape1 = new DataGridViewTextBoxColumn();
        DataGridViewTextBoxColumn Description1 = new DataGridViewTextBoxColumn();
        EstateType1.DataPropertyName = "EstateType";
        LandScape1.DataPropertyName = "LandScape";
        Description1.DataPropertyName = "Discription";
        dataGridView1.Columns.Add(EstateType1);
        dataGridView1.Columns.Add(LandScape1);
        dataGridView1.Columns.Add(Description1);
        dataGridView1.DataSource = getAllEst;

2 个答案:

答案 0 :(得分:0)

问题看起来就是显示引用对象的外键ID,而不是您希望显示的对象上的属性。

这是因为您允许DataGridView为您生成列。

要解决此问题,您需要自己创建列:

DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();
// Where "Name" is the String representation of the Property on the
// Object that you want to display.
nameColumn.DataPropertyName = "Name";

答案 1 :(得分:0)

首先,您的查询

var getAllEst = (from ee in AgencyContext.Estate 
                 join eeT in AgencyContext.EstateType
                     on ee.EstateID equals eeT.EstateID select ee).ToList();
除非AgencyContext.Estate具有EstateType的某些导航属性,否则

将仅使用内部联接选择具有关联Estate class的{​​{1}}个对象。如果你有类似的东西:

EstateType

然后您就可以通过该属性访问class Estate { // ...other properties // I'm guessing the relationship here... public virtual EstateType EstateType { get; set; } } 属性。

不幸的是,EstateType doesn't seem to support binding to child properties因此您无法设置DataGridView,但您可以通过覆盖column.DataPropertyName = EstateType.SomeProperty或处理{{}来解决这个问题。 1 {} EstateType.ToString()上的事件。