【发布时间】: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而不是LogTypeId。DataGridViewComboBoxColumn正是您要找的。也可以使用ToString或CellFormatting方法简单地完成。似乎链接的帖子包含您需要的所有内容。 -
Hmmm... 在这种情况下,我是否必须通过设计器将现有的 FK 列转换为 'DataGridViewComboBoxColumn' 或创建一个全新的列?其次,我没有任何“List
”,只有设计器生成的对象(DataSet、BindingSource、TableAdapter、AdapterManager 和 Binding Navigator)。将哪一个分配给“DataGridViewComboBoxColumn”内容?
标签: c# winforms datagridview entity-framework-6 datasource