zoukankan      html  css  js  c++  java
  • GroupingView控件 使用经验

         你是否经常使用GridView进行数据输出?你是否曾经试图使用VS.Net自带的GridView控件来实现分组统计等功能?是不是觉得实现起来很麻烦或者压根实现不了?
         如果你不曾遇到过类似问题,那么这篇文章对你将毫无帮助。
         这个控件就可以为帮我们很好的解决分组统计等问题,功能很强大。(PS:我不是做广告哦,只是有感而发~)当然,除了这个控件外,还有一个GridViewHelper控件,同样可以实现强大的分组功能,但是从我使用的体验来说,个人更倾向GroupingView。可能是我对GridViewHelper使用不多的原因,我认为使用GridViewHelper对页面的布局基本上不需要做任何设置。而分组、统计等等功能,都是利用后台代码进行设置,对于简单的分组几乎只要写一个语句就可以实现。可以说是相当方便。但是,我在使用过程中遇到几个问题:1、如果不是利用ASP.NET 提供的数据源控件对GridView进行数据源的绑定,而是通过在page_load事件中执行数据源绑定,则按照示例代码进行编辑就无法显示预期效果。2、由于它的方便,导致使用不灵活,因为有些时候我们可能希望布局上更加随意,但由于该控件不需要对布局进行设置,也使得我们如果想调整布局将会很麻烦。(以上2点,是我初浅的使用后的感觉,可能深入使用下去,还会有更多问题。当然也可能是因为我不会用造成的。)
         说完了GridViewHelper,接下来就到了这篇文章的主角上场了,我在使用GroupingView中并没有遇到上面的问题。
           GroupingView 控件的详细使用介绍及下载,请点击。该控件是由Mike Ellison开发的,我试用了一下,感觉不错。

           使用经验:
           1.下载该控件,可以找到GroupingView.dll文件,将该dll文件添加到你的项目Bin文件夹中。
           2.在要使用的页面注册GroupingView控件:

    <%@ Register Assembly="GroupingView" Namespace="UNLV.IAP.WebControls" TagPrefix="cc1" %>
           3.进行布局。你可以进行任意的布局,比如你可以让汇总的结果显示在左边、右边,可以在行与行之间加入分隔符,可以添加其它标记等等。
           但是,首先要遵守一定的布局结构。基本结构如下:
    <cc1:GroupingView ID="gvTest" runat="server" AutobindDataSourceChildren="true"   GroupingDataField = "分组排序的字段">
        
    <GroupTemplate>
           
    <!--这里你可以显示分组的数据,这里的代码每个分组只执行一次-->
           
    <asp:PlaceHolder ID="itemPlaceholder" runat="server" /> <!--这个控件用来显示分组内详细的item,显示样式由ItemTemplate决定-->
           
    <!--这里你可以显示分组的数据,这里的代码每个分组只执行一次-->
        
    </GroupTemplate>
        
    <ItemTemplate>
        
    <!--这里显示每个分组内的详细数据记录,执行次数等于该分组内的记录数-->
        
    </ItemTemplate>
    </cc1:GroupingView>
      4.与数据源进行绑定,我这里是通过在Page_Load中进行绑定。
    Code

         
      接下来,我来举几个实例。
      e.g. 1 效果图如下:
      sno     |   sname   |   cname  |  score  
           1              s1             c1           80
           1              s1             c2           90
           1              s1             c3           70
          总分:240
      sno     |   sname   |   cname  |  score  
           2              s2             c1           80
           2              s2             c2           80
           2              s2             c3           80
          总分:240

    Code


          其中的 <cc1:Aggregation ID="Aggregation1" runat="server" Function="Sum" DataField="score" />是该控件提供的一种集合运算控件,你可以通过设置Function来得到对某一字段进行统计运算如Sum、AVG等。在ItemTemplate中,我们可以看到很熟悉的Eval,这个就是用来与数据进行绑定,而ItemTemplate中的代码和数据则会最终被填充到ID为itemPlaceholder的placeholder容器中。这样最终就可以显示成如效果图所示的样子了。

      e.g. 2 效果图如下:
      sno     |   sname   |   cname  |  score  
           1              s1             c1           80
           1              s1             c2           90
           1              s1             c3           70
          总分:240 
           2              s2             c1           80
           2              s2             c2           80
           2              s2             c3           80
          总分:240

          细心的朋友,应该已经看出1和2这两个例子的区别了吧?是的,在示例2中,第二个分组的列头不再重复显示了。这个是怎么实现的呢?要实现这个效果就需要添加一个"OnGroupCreated"事件,这个事件在每一个分组被创建的时候触发,我们就在这个事件中判断是否需要列头,如果不需要就不显示。
      根据Mike Ellison提供的做法是添加一个placeholder容器。然后将列头的布局代码移动到该容器中,然后在OnGroupCreated事件中判断此组是否为第一组,如果不是就设置该容器的Visible属性为false。
      前台的布局只是增加了一个placeholder,因此就不再演示了,我把后台的那个事件写一下,让大家参考一下。

    Code


      e.g. 3 效果图如下:
      sno     |   sname   |   cname  |  score  
                                           c1           80
           1              s1             c2           90
                                           c3           70
          总分:240 
                                           c1           80
           2              s2             c2           80
                                           c3           80
          总分:240

          这个例子就是使分组字段在每组中只出现一次,而不再重复出现。
      要实现这个效果,就需要我们修改布局代码,这个例子可以很好的说明该控件的灵活性,因为布局要怎么样完全由我们自己说了算。如果想让分组字段在一个组内只出现一次,我们就应该把数据直接写到GroupTemplate中,因为这其中的代码每一组只执行一次。如果想让他居中显示,那就是合并单元格的事了。而合并单元格对于table标记是不是很容易办到呢?只要设置rowspan或colspan就可以搞定了。下面来看下布局代码。

    Code

      e.g. 4 效果图如下:
          sno=1
      sno     |   sname   |   cname  |  score  
                                           c1           80
           1              s1             c2           90
                                           c3           70
          总分:240 
          sno=2
                                           c1           80
           2              s2             c2           80
                                           c3           80
          总分:240
          大家是不是看见在每一组的列头前又多了一条数据(用来显示每个组的字段)。如果你看了前面几个例子,相信这个应该马上能想出来怎么实现吧?方式很多,比如用表格、DIV等+Eval。具体实现方式就不写了,就当是测验下自己吧。如果实在不会,就给我发EMail吧~

      看了上面的这些例子,你是不是觉得使用这个控件似乎与自带的GridView控件一点没联系了,其实不然。我们上面呈现数据的方式,都是使用table,你还可以直接把一个GridView放在GroupTemplate中,这样会更加方便,不过肯定不如table灵活多变(个人认为)。关于如何使用GridView来呈现数据,我就不举例了。大家只要去我提供的网址下载该控件,里面包含很多Sample,Sample1中就是用的GridView。 
    作者:stg609

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    本人博客已经转移到Charley Blog

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/stg609/p/1402160.html
Copyright © 2011-2022 走看看