开发者社区> 技术mix呢> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

透视Datatable

简介:
+关注继续查看

源代码:/Files/zhuqil/PivotDataTable.zip 

   现在,以表格的形式显示的数据是任何应用程序的重要组成部分。但有时你需要以数据行格式显示大量的数据。如果行数巨大,它变得非常难以分析。在这种情况下,您可能希望使用其他格式统计你的数据,如: charts, graphs, groups, pivots等 。本文将介绍一种使用适当的聚合函数的方式来透视你的数据,它可以很容易提高您的报表功能。

    下面的截图是在GridView中显示的数据透视功能。(关于数据透视还可以参考:ASP.NET实现类似Excel的数据透视表 )

    为了简化方案,我把表的结果分三个区域显示:RowFieldDataField, 和ColumnFields,除了这些,Pivot类提供一些供您来选择的聚合函数来绑定的数据。可提供的选项有:

  • Count: 返回匹配的数据数量
  • Sum: 返回匹配的数据总和(为了得到总和,将DataField的类型必须转换为decimal类型)
  • First: 返回匹配的数据第一项
  • Last: 返回匹配的数据最后一项
  • Average: 返回匹配的数据平均(为了得到平均值,将DataField的类型必须转换为decimal类型)
  • Max: 返回匹配的数据最大值
  • Min: 返回匹配的数据最小值
  • Exists: 如果有匹配的数据,返回“true”,否则“false”

        代码主要包含了一个名字为"Pivot"的类,在它的构造函数中创建DataTable。 ColumnFields 是一个字符串数组参数,它允许你透视多列数据。这个类还包含了一个实际透视你数据的PivotData() 方法。

    代码

         首先,该函数通过获取RowList的Distinct的值,确定行的成员;通过获取ColList的Distinct值,确定列的成员。然后,创建datatable的列。然后根据所提供的聚合函数,遍历每一行和获取匹配值到相应的单元格上。调用GetData()函数,检索匹配值。

    代码

         这个函数首先过滤到DataRow []数组中匹配RowField和ColumnFields数据 ,然后调用相应的聚合函数。

     如何使用代码:

        代码使用起来很简单。创建一个Pivot类的实例,然后使用要求的参数调用PivotData方法。PivotData()方法返回DataTable,他可直接作为GridView的数据源。

    代码

        示例中使用的数据库是一个Excel Sheet ,放在示例应用程序的根文件夹下的“_Data”文件夹中。

        该MergeHeader函数创建合并头部的单元格,并提供了一个简化的外观。

    代码

        该函数为每个PivotLevel创建新行,和相应的合并。 PivotLevel这里是列上的轴完成的数量。

        Header从一个数组中得到所有的列值,对GetHeaderText()返回的重复的值进行分组,根据HeaderText的重复数量,设置新创建的单元格的ColumnSpan属性。将单元格添加到GridViewRow中。最后添加GridViewRowGridView。GetHeaderText() 函数根据PivotLevel返回header text.

        例如,假设一个透视表,完成三个ColumnField: Company, Department, 和Year。GridView的初始化时候,头部将拥有Company.Department。PivotLevel 1是Year。 GetHeaderText()将返回Company。对于PivotLevel 2,GetHeaderText()将返回Company.Department。对于PivotLevel 3,GetHeaderText()将返回Company.Department.Year,等等...

  • 以下是GridView的截图,包含三个层次透视数据:

  •     代码帮助您合并你想要的格式GridView的头单元格。对于初学者,在ExcelLayer.GetDataTable()方法将是一个从Excel表中的中获得数据例子。

        目前,代码只在DataTable中透视数据。该代码将得到加强,将来透视IListSource或ICollection派生的任何对象。

  • 参考原文:http://www.codeproject.com/KB/aspnet/PivotDataTable.aspx

 





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/01/12/PivotDataTable.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
获取对固定列不重复的新DataTable
#region 获取对固定列不重复的新DataTable /// <summary> /// 获取对固定列不重复的新DataTable /// </summary> /// <param name="dt">含有重复数据的DataTable</param> /// <param name="colName">需要验
667 0
DataTable 最大容量
DataTable 的最大列数可以到 Int32.MaxValue,或者2,147,483,647 DataTable 可存储的最大行数是 16777216 但由于可用内存的限制,在未达到最大列数的时候,可能会抛出 OutOfMemoryException 的异常   4G内存的电脑,DataTable貌似只能存储到100W数据,就会内存溢出。
830 0
DataTable排序结果的纠正
默认情况下,即便db中某一列的值是数字,查询出来的DataSet/DataTable里,Column的类型都是String型,所以当用dataTable.DefaultView.Sort ="XXX ASC"排序时,都是按字符串排序处理的,并不是我们想要的结果,下面给出了二种解决办法: using System; using System.
760 0
去除DataTable中重复字段
      #region  去除datatable中重复字段        ///         ///         ///         ///         ///         protected DataTable SelectDistinct(DataTable Sour...
572 0
DataTable分组求和
方法一:             DataTable dt =newDataTable();            dt.Columns.Add(newDataColumn("C1",typeof(int)));            dt.
729 0
【转】DataTable分组求和
方法一:             DataTable dt =newDataTable();            dt.Columns.Add(newDataColumn("C1",typeof(int)));            dt.
615 0
datatable select 性能
本来是想写在这里的,但是发现这里不能登陆了,所以就放到了其它的地方。 http://www.cnblogs.com/AloneSword/articles/801989.html    希望以后CSDN能稳定点,要不然真的得考虑 搬迁 事宜了。
509 0
+关注
2968
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载