在 DataGridView 中显示数据

Posted

技术标签:

【中文标题】在 DataGridView 中显示数据【英文标题】:Displaying Data in a DataGridView 【发布时间】:2014-01-07 21:32:53 【问题描述】:

我将学生的成绩存储在一个表格中,如下所示:

StudentID | CourseID | TermID | Grade
   1      |    1     |   1    |   10
   1      |    2     |   1    |   12
   1      |    3     |   1    |   9
   1      |    4     |   1    |   5
   1      |    5     |   1    |   19
   1      |    1     |   2    |   11

前 3 列是外键。 我需要在 DataGridView 中为某个学生显示这些数据,例如:

_____|Course1|Course2|Course3|
Term1|  10   |   15  |   24  |
Term2|  12   |   30  |   50  |

我怎样才能做到这一点?我应该更改数据模型吗?

编辑添加了一些示例数据。 下面的查询可以工作,但我该怎么做:

在结果中将 TermID 替换为其对应的名称。

课程 ID 相同,选择所有可用课程而不是编写其 ID([1]、[2]...)

选择 * 从 ( 选择 [等级]、[学期 ID]、[课程 ID] 来自学生 ID = 1 的年级 ) 作为源 枢 ( MAX([等级]) FOR [CourseID] IN ([1] , [2], [3], [20]) ) 作为支点

【问题讨论】:

创建数据集以获取您需要的所有数据,然后将其绑定到 DATAGRID 控件 你喜欢交叉表吗 到目前为止你尝试了什么。请显示您当前的 DataGridView 代码,以便人们知道您遇到的问题。 使用dataadapter填充一个数据集,然后放入DataGridView.Datasource=dataset.tables(0) 【参考方案1】:

您需要将 DataTable 绑定到 DataGridView。也许你需要用 SQL 构建一个数据透视表。

SELECT [Term], [Course1], [Course2], [Course3]
FROM (SELECT * FROM [Grades]) AS [SourceTable]
PIVOT (MAX([Grade])
FOR [Term]
IN ([Course1], [Course2], [Course3]))
AS [PivotTable])
ORDER BY [Term] ASC

EDIT如果说字段是外键,当然需要JOIN对应的表。

【讨论】:

以上是关于在 DataGridView 中显示数据的主要内容,如果未能解决你的问题,请参考以下文章

C#的dataGridView控件里面已经有数据了,怎么让它自动统计总行数?[自动统计:没有点击等任何事件时]

BackgroundWorker 填充 DataGridView

C# datagridviewdatagridGridControl增加行号

C# 怎么把从数据库查询出来的东西累加到dataGridView里面去

如何在 c# 中禁用可点击的 datagridview 中的空单元格

datagridview DragDrop 实现拖放后 获取所在单元格的位置