【问题标题】:How to add fields from one-to-one connected entity to a Datagridview如何将字段从一对一连接的实体添加到 Datagridview
【发布时间】:2016-03-14 19:30:32
【问题描述】:

我创建了一个 winform,其中包含一个 datagridview,其中包含我的一个数据库表的所有实体。我通过创建一个数据源并从所述数据源创建一个 datagridview 来做到这一点(据此:https://msdn.microsoft.com/en-us/data/jj682076.aspx)。

现在我有一个不错的 datagridview 并且我已经开始自定义它了。我的问题是:我想从连接的实体获取信息。例如。我的表包含书籍列表。每本书都与一位作者有关。现在我可以简单地覆盖作者实体 ToString-Function 并有一个列来指定每本书的作者。但是我将如何添加另一列显示书籍作者的出生日期?我觉得,可能有一种方法可以编辑数据源以满足我的需求,但我不知道如何......

谢谢:)

【问题讨论】:

标签: c# winforms entity-framework datagridview


【解决方案1】:

我认为将数据的显示与实际保存到数据库中的方式分开是很好的。这样,如果您的数据库发生更改,您的显示就不必更改。

假设您正在创建一个包含学生和教师的学校数据库,与普遍的看法相反,他们都是具有姓名/地址/电话号码等的人。因为关系数据库不知道您将拥有的继承概念想办法把继承的 Person 数据放在哪里: 在单独的表中?作为教师表的一部分和学生表的一部分?或者也许是另一种方法。您的选择取决于您对数据使用方式的期望。

如果在您的程序生命周期内您的方法发生了变化,您不希望必须更改您数据的所有用户。因此,您隐藏了数据库的内部组织方式。

您可能已经将您的数据网格视图组织成用户体验为属于一起的事物的行:与他们想要查看作者和他的出生数据的一本书,可能还有一些其他项目。人类对你在内部将作者与他的书分开并不感兴趣。

因此,对您来说最好的方法是创建一个类来代表用户对 datagridview 中一行的想法。因此,具有书籍、作者和出生日期属性的类。当创建类的对象时,所有项目都使用正确的连接和/或包含语句从数据库中填充。

考虑仅在请求时从数据库中检索数据。

【讨论】:

  • 这实际上是我最初的方法:我创建了一个包含所有相关数据的“行类”。但是我发现如果我想用 2.000 个项目填充 datagridview,这种方法非常慢。尤其是在旧电脑上。这很常见还是更有可能是由我的(初学者)实施引起的?
  • 如果总集合非常大,通常会为每个“页面”填充 datagridview。仅下载一次查看的“25”行。如果您看到无法滚动的数据网格,您只能执行向上/向下翻页,则使用此方法。可选改进:在用户查看页面 X 时,下载并添加页面 X-1 和页面 X+1。这可能会导致不必要的下载页面。但优点是对于相对较小的重新定位,用户不必等待。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多