【问题标题】:Show data from related tables in single DataGridView在单个 DataGridView 中显示来自相关表的数据
【发布时间】:2018-05-30 07:36:47
【问题描述】:

我将DataSource 拖放到我的winform 上,它创建了DataGridView 和相应的BindingNavigator。最后,我的 .cs 代码文件在 Load() 事件中只有一行:

userLogsTableAdapter.Fill(dataSetUserLogs.UserLogs);

非常整洁!问题是我的 UserLogs 表的一个字段是外键,我想显示它的描述而不是 ID。我阅读了许多文章,包括 this SO question,但没有一篇文章使用 DataSource 拖放方法解决了这一特定要求。我必须在我的应用程序中创建多种类型的日志。无法为近 25 种日志类型从头开始在代码中创建 DataSources 和 BindingNavigators。请指出正确的方向。

还有如何过滤显示的数据,如上述问题中所述。

【问题讨论】:

  • 其实在两个链接的帖子中,使用DataGridViewComboBoxColumn可以完全使用设计器完成。也可以看看this post关于组合列的方法。
  • 我还浏览了您将我的问题标记为重复的帖子,但那里讨论的选项都没有针对我使用 DataSource 拖放方法创建 DGV 的场景。我覆盖了 ToString() 方法,对第二层属性显示无效。
  • 其次,我的场景只是显示日志列表。修改日志没有意义。因此不需要组合框方法或将数据保存回数据库。我只想简单地用另一个表中的描述替换列的内容。就是这样。
  • DataGridViewComboBoxColumn 不仅仅用于编辑。您可以简单地将其显示模式设置为无,也可以将其设为只读。作为您的场景示例,假设您有一个List<Log>,其中每个Log 都有一个LogTypeId,您将显示LogType.Description 而不是LogTypeIdDataGridViewComboBoxColumn 正是您要找的。也可以使用ToStringCellFormatting 方法简单地完成。似乎链接的帖子包含您需要的所有内容。
  • Hmmm... 在这种情况下,我是否必须通过设计器将现有的 FK 列转换为 'DataGridViewComboBoxColumn' 或创建一个全新的列?其次,我没有任何“List”,只有设计器生成的对象(DataSet、BindingSource、TableAdapter、AdapterManager 和 Binding Navigator)。将哪一个分配给“DataGridViewComboBoxColumn”内容?

标签: c# winforms datagridview entity-framework-6 datasource


【解决方案1】:

现在,我通过在两个相关表上使用连接在数据库中创建一个视图并简单地为该视图而不是原始表创建一个数据源来解决我的问题。但这是可能的,因为幸运的是我被授予访问数据库以创建视图的权限。但我知道在某些情况下您无法访问数据库服务器(无论出于何种原因)。因此,如果有人在这里发布程序解决方案,即通过设计器/代码实现相同的目标,我将不胜感激。

我很乐意将其标记为答案。

因为这个问题不是上述问题的重复。尽管要求相同,但遵循的基本程序却大不相同,这使它们成为两个不同的问题。

【讨论】:

猜你喜欢
  • 2016-02-08
  • 2023-03-10
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多