【问题标题】:Entity framework Binding to DataGrid wpf trouble实体框架绑定到 DataGrid wpf 麻烦
【发布时间】:2012-12-03 20:25:50
【问题描述】:

我使用实体连接到数据库: Entity db = new Entity(); ... 然后我将 DataGrid 添加到 Form 并尝试从我的数据库中接收表

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

MyDataGrid.ItemsSource = pp.ToList();

结果在这里: Screenshot

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

【问题讨论】:

  • 确保您打印筛选的数据不是机密的。如果是这样,请使用一些虚假数据。
  • Francis P 这是假数据

标签: c# wpf entity-framework wpfdatagrid


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    我的意思是.. 如果您打算将表直接公开到 UI 中,为什么要使用 ORM?为此,请使用普通的旧 ADO.Net,或者以不直接向用户公开整个表的方式定义您的 UI。用户对表格一无所知。用户了解他们的业务。因此,您的应用程序应该对表一无所知。

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

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

    【讨论】:

    • 我尝试将客户端添加到我的数据库,这是培训版本)
    • IMO 的另一个误解......在这种情况下,“客户端”是客户端应用程序,客户端应用程序应该有相应的“服务器应用程序”,而不是数据库。同样,如果您打算做一个业务应用程序,请不要向用户公开表。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多