ASP.NET等级分布图表

时间:2011-05-11 18:28:44

标签: asp.net charts

我想显示一个显示成绩分布的ASP.NET Chart控件。

它应该显示有多少学生获得了从A到F的等级。

在没有学生获得D字母等级的情况下,如何使图表包括A,B,C,D,F等级?例如,我希望D值显示在X轴上,但学生数为零。

正在从数据库中提取数据,我正在使用ObjectDataSource绑定到图表控件。

编辑:数据的结构是有一个学生表,每个stundent都有一个FirstName,LastName和Grade。

编辑:对于网站的其余部分,我正在使用带有LINQ的实体框架(而不是编写原始SQL),因此,在完美的世界中,解决方案不会涉及原始SQL。

2 个答案:

答案 0 :(得分:0)

是否可以更改您的查询包括所有成绩然后填写每个成绩的详细信息? 完全破解 - 但是为了向您展示我不知道您的架构的想法

select * from 
(
select 'a' Grade
union
select 'b' Grade
union
select 'c' Grade
union
select 'd' Grade
union
select 'f' Grade
) as grades g
outer join yourothertable t on g.Grade = t.Grade

编辑:在阅读完编辑后,意识到你不希望这是一个sql解决方案,那么选择是获取你的对象并对它们进行linq连接到包含等级的对象。

请参阅: http://www.hookedonlinq.com/OuterJoinSample.ashx 使用类似的东西 公共班级 {     公共字符串LetterGrade; } 填充它们的列表,并对查询中的结果执行外部联接。您的新linq结果集合就是您现在的数据绑定。

答案 1 :(得分:0)

如果不知道您的数据是如何构建的,那么给出详细的答案有点困难。这是使用SQL公用表表达式(CTE)执行此操作的方法。它将组织数据,以便您可以轻松地将其绑定到图表控件。

这将产生如下数据表:

| Grade | TotalGrades |
|-------|-------------| 
|   A   |      2      |
|   B   |      1      |
|   C   |      2      |
|   D   |      0      |
|   E   |      0      |
|   F   |      1      |

这是代码:

;With Grades (Grade) as
(
    SELECT 'A' Grade
    UNION
    SELECT 'B' Grade
    UNION
    SELECT 'C' Grade
    UNION
    SELECT 'D' Grade
    UNION
    SELECT 'E' Grade
    UNION
    SELECT 'F' Grade
),
GradeResults (Name,Grade) as
(
    SELECT 'John','A'
    UNION
    SELECT 'Sally','B'
    UNION
    SELECT 'Dave','C'
    UNION
    SELECT 'Charlie','C'
    UNION
    SELECT 'Lisa','F'
    UNION
    SELECT 'Russ','A'
)
SELECT a.Grade, COUNT(b.Grade) as TotalGrades FROM Grades a LEFT OUTER JOIN GradeResults b on a.Grade = b.Grade
GROUP BY a.Grade
ORDER BY a.Grade;