zoukankan      html  css  js  c++  java
  • 一个数据交叉表控件的实现(开篇)

             因为做的项目很多都和数据统计相关,一直要做很多的报表,而其中很大的一部分的报表都是数据交叉表的类型,也因为最近在改版.Net的自定义高级分析的功能,所以忽然萌生了要写一个控件来一劳永逸。把我在设计编码过程中得到的启示和收获和大家一起分享 。

    1:目的
          实现数据的任意交叉统计功能,和前台显示功能;
    2:功能
          可以绑定datasource,datatable,dataview中的任意一个数据源(其实这块没有什么大的东西,最终转化成DataTable)
          指定在哪些纬度1 放在横轴上,哪些纬度放在纵轴上(即指定DataTable的设定纬度数据所在的列名),设定数值列(只支持一个数值列,多个数值列的显示比较复杂,以后再研究)
         自定义显示的格式,样式
         自定义单员格单击函数
         分类合计功能;
    3:思考
          设计这样一个控件的难度其实并不在于统计功能,还是在如何显示,如何能根据提供属性来画出一个交叉数据表,table的构建。所以虽然控件支持统计功能,但是还是建议使用SQL本身的统计功能,先Group好了再由控件显示(效率可要提高N倍)。
          绑定了DataTable如何让他成为交叉的数据列那呢?假设图1中的表是DataTable的数据列,那么如何来将下表展现为如图2-图5所示的格式呢?
      


    图 1

    图2

    图3

    图4

    图5

    上面是最简单的要求,当然横竖轴的系列,应该理论上是无限级的,至此我陷入了如何来计算rowspan和colspan的苦恼之中 。
    通过现有的DataTable的列属性来计算实在是太复杂,所以我想到构建用于模拟横竖轴的类,同时也方便以后做扩展
    简单的类图如下:

    图6

    下回内容:通过组建Axes轴和Cell数组来建立数据交叉表模型
  • 相关阅读:
    LeetCode Count of Range Sum
    LeetCode 158. Read N Characters Given Read4 II
    LeetCode 157. Read N Characters Given Read4
    LeetCode 317. Shortest Distance from All Buildings
    LeetCode Smallest Rectangle Enclosing Black Pixels
    LeetCode 315. Count of Smaller Numbers After Self
    LeetCode 332. Reconstruct Itinerary
    LeetCode 310. Minimum Height Trees
    LeetCode 163. Missing Ranges
    LeetCode Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/xuanye/p/724354.html
Copyright © 2011-2022 走看看