实体框架绑定到DataGrid wpf麻烦

时间:2012-12-03 20:25:50

标签: c# wpf entity-framework wpfdatagrid

我用实体连接到DataBase: Entity db = new Entity(); ... 然后我将DataGrid添加到Form并尝试从我的DataBase中重新获取表

var pp = from asd in db.ABONENT select asd;

MyDataGrid.ItemsSource = pp.ToList();

结果如下: Screenshot

它显示其他链接表中的其他字段,为什么? 如何仅显示ABONENT表中的数据?

3 个答案:

答案 0 :(得分:1)

我的猜测是你使用DataGrid显示所有表的内容。 您是列定义静态还是动态加载?

如果它是动态的,我建议删除每个数据绑定之间的所有列。

如果它是静态的,请隐藏您不想显示的列(Visible = false)。

答案 1 :(得分:1)

在实体框架中,您有Entities,而不是Tables。实体框架将表的关系概念抽象为您在应用程序中使用的对象。这就是ORM的作用。

因此,表之间的关系表示为实体中的Navigation Property,它基本上是实体类中表示关联实体的属性。

我的观点是..如果您打算将表直接暴露给UI,为什么要使用ORM?使用普通的旧ADO.Net,或以其他方式定义UI,使您不将整个表直接暴露给用户。用户对表格一无所知。用户了解他们的业务。因此,您的应用程序应该对表格一无所知

从UX的角度来看,我认为这是一种不好的做法,例如,为什么用户应该在他们的UI中看到诸如abonentID和RegionID之类的Id列?他们不关心这一点,他们也不理解。行ID是RDBMS概念,而不是业务概念。

我的建议:重新思考你的方法:要么回退到使用普通的旧ADO.Net,要么在DataGrid中将AutoGenerateColumns设置为false,并只公开用户关心的列。

答案 2 :(得分:0)

您可以使用以下语法选择实体的公开属性:

var pp = from asd in db.Products
            select new
            {
                asd.Id,
                asd.Name,
                ProductCategory = asd.ProductCategory.Name,
            };
MyDataGrid.ItemsSource = pp.ToList();