【问题标题】:Displaying Data in a DataGridView在 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)

标签: c# sql sql-server database-design datagridview


【解决方案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对应的表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2016-10-12
    相关资源
    最近更新 更多