C# 在单个DataGridView中显示相关表中的数据

C# 在单个DataGridView中显示相关表中的数据,c#,winforms,datagridview,entity-framework-6,datasource,C#,Winforms,Datagridview,Entity Framework 6,Datasource,我在winform上拖放一个数据源,它创建DataGridView和相应的BindingNavigator。最后,我的.cs代码文件在Load()事件中只有一行: 非常整洁!问题是我的UserLogs表的一个字段是外键,我想显示它的描述而不是ID。我读了很多文章,包括但没有一篇是使用DataSource拖放方法来解决这个特定需求的。我必须在我的应用程序中创建多种类型的日志。无法为将近25种类型的日志从头开始在代码中创建数据源和绑定导航器。请给我指一下正确的方向 另外,如何过滤上面提到的问题中讨论

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

非常整洁!问题是我的UserLogs表的一个字段是外键,我想显示它的描述而不是ID。我读了很多文章,包括但没有一篇是使用DataSource拖放方法来解决这个特定需求的。我必须在我的应用程序中创建多种类型的日志。无法为将近25种类型的日志从头开始在代码中创建数据源和绑定导航器。请给我指一下正确的方向


另外,如何过滤上面提到的问题中讨论的显示数据。

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

我很乐意将此作为答案


因为这个问题不是上述问题的重复。虽然要求相同,但所遵循的基本过程却大不相同,这使他们面临两个不同的问题。

事实上,在两篇链接文章中,使用
DataGridViewComboBoxColumn
可以完全使用designer。另外,请看一看关于组合列的方法。我还浏览了您将我的问题标记为重复的帖子,但是这里讨论的选项都没有针对我使用DataSource拖放方法创建DGV的场景。我重写了ToString()方法,对第二层属性显示没有影响。修改日志没有意义。因此,不需要组合框方法或将数据保存回数据库。我只想简单地用另一个表中的描述替换列的内容。就是这样。
datagridviewcomboxcolumn
不仅仅用于编辑。您可以简单地将其显示模式设置为“无”,也可以将其设置为只读。例如,与您的场景类似,假设您有一个
列表,其中每个
Log
都有一个
LogTypeId
,您将显示
LogType.Description
,而不是
LogTypeId
DataGridViewComboxColumn
正是您想要的。也可以简单地使用
ToString
CellFormatting
方法完成。链接的帖子似乎包含了你所需要的一切。。。在这种情况下,我必须通过designer将现有FK列转换为“DataGridViewComboxColumn”,还是创建一个全新的列?其次,我没有任何“列表”,只有设计器生成的对象(DataSet、BindingSource、TableAdapter、AdapterManager和BindingNavigator)。要为“DataGridViewComboBoxColumn”内容分配哪一个?您是使用
数据集
数据表
还是使用实体框架和
列表
作为数据源?两者都不是。实际上,我在本质上遵循了这篇文章()进行数据绑定。但这篇文章已经很老了(10年以上),所以在设计器自动创建的对象和代码的数量和类型上存在差异。在我的例子中,创建了5个组件对象(dataSet、bindingSource、tableAdapter、tableAdapterManager和bindingNavigator),并且只创建了一行代码(在OP中提到)。阅读这篇文章,这是Winforms中对EF的一个真实介绍。此外,为了实现过滤,看看这篇文章,你就会更好地理解我在OP下分享的解决方案。
userLogsTableAdapter.Fill(dataSetUserLogs.UserLogs);