ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在C#中显示分层数据

2019-11-05 21:05:10  阅读:346  来源: 互联网

标签:hierarchy linq c net


我正在尝试开发一个页面,以按科目/老师显示学生/班级的成绩.

有些班级有包含学生的小组,有些班级只有学生.一个或多个老师考虑了一个主题.将来这可能会改变,我想保持设计尽可能灵活(即,主题可能分为模块或单个测试结果,类别可能按年份进一步分组等)

我想在网格中显示最终结果,我可以扩展并汇总以将结果平均(Y上的类,X上的主题).

我虽然有3个数据库表,如下所示:

**class_structure**
id (int) PK
description (varchar)
parent_id (int) FK to id

最高级别为班级(无家长ID),最低级别为学生.

**subject_structure**
id (int) PK
description (varchar)
parent_id (int) FK to id

最高的是学科,最低的是老师

**results**
id (int) PK 
class_structure_id (int) FK
subject_structure_id (int) FK
date (datetime)
reult (int)

您如何看待上述结构?我相信这会给我前进的灵活性吗?

然后,在我的asp.net应用程序中查询最高的类结构级别,并求平均所有低于该级别的结果(我最好在数据库中的sproc中进行平均,还是在应用程序中使用LINQ?)

这会给我带来最高水平的一组结果.

然后,我需要针对主题类显示这是一个表(我正在考虑仅使用C#创建表html?)(即,首先创建所有标头,然后尝试将结果放置在正确的列中(我不是确定如何执行此操作)).

<table border="1" padding="2">
 <tr>
  <td></td>
  <td></td>
  <td colspan="2" align="center">Subj 1</td>
  <td colspan="2" align="center">Subj 2</td>
 </tr>

 <tr>
  <td></td>
  <td></td>
  <td>Teacher 1</td>
  <td>Teacher 2</td>
  <td>Teacher 1</td>
  <td>Teacher 2</td>
 </tr>
 <tr>
  <td rowspan="2">Class 1</td>
  <td>Student 1</td>
  <td>90</td>
  <td>55</td>
  <td>75</td>
  <td>100</td>
 </tr>
 <tr>
  <td>Student 2</td>
  <td>40</td>
  <td>95</td>
  <td>65</td>
  <td>39</td>
 </tr>
</table>

然后,当用户单击第一堂课时,它将展开并显示所有组(如果有的话,如果没有的话,则为学生)(将所单击的单元格的class_structure_id传递到相同的方法/步骤并获得这些结果),然后重画表格有一个额外的列.

这是实现我想要做的事情的好方法吗?

解决方法:

1 :)分层数据不应显示在< table>中,而应使用嵌套的< ul>或< ol>代替.表用于表格数据.

2 :)由于c#是一种面向对象的语言,所以我不会通过ID引用树中的对象.为什么不将子对象的集合添加为成员,示例代码模式将是:

class TreeElement 
{
 public TreeElement Parent {get;}
 public IEnumerable<TreeElement> Children{get;};
 public AddChild(TreeElement element }
 public bool IsRoot { return Parent == null; }
 public bool IsLeaf { return Children.Length == 0; }
 public bool IsBranch {return !IsRoot && !IsLeaf; }
}

通常在树中,您不需要执行父查找.因此,如果不需要,请保留所有父引用,以避免不必要的复杂性;)
尝试以类似上述的对象结构在数据库中插入内容.

3 :)根据您的模型进行的键查找最终在SQL中会非常缓慢.您将不得不循环访问低谷数据并在查询中使用if / else语句
关于SQLTeam,请参见a great sample,它说明如何通过使用额外的沿袭列来使其变得非常快.

4 :)使用linq查询并为您的数据生成结果.

标签:hierarchy,linq,c,net
来源: https://codeday.me/bug/20191105/1997897.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有