博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GroupingView控件 使用经验
阅读量:6715 次
发布时间:2019-06-25

本文共 3231 字,大约阅读时间需要 10 分钟。

     你是否经常使用GridView进行数据输出?你是否曾经试图使用VS.Net自带的GridView控件来实现分组统计等功能?是不是觉得实现起来很麻烦或者压根实现不了?

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

       使用经验:

       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中进行绑定。
ContractedBlock.gif
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

ContractedBlock.gif
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,因此就不再演示了,我把后台的那个事件写一下,让大家参考一下。

ContractedBlock.gif
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就可以搞定了。下面来看下布局代码。

ContractedBlock.gif
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博客园博客,原文链接:http://www.cnblogs.com/stg609/archive/2009/03/03/1402160.html,如需转载请自行联系原作者
你可能感兴趣的文章
Solr字段配置错误
查看>>
Android ActionBar详解(二):ActionBar实现Tabs标签以及下拉导航
查看>>
使用windbg查看DependencyObject的属性
查看>>
Rotate List
查看>>
IE首页被篡改(手动修复)
查看>>
html5开发之viewport使用
查看>>
Oralce 处理字符串函数
查看>>
C程序中引用自定义的C函数模块
查看>>
关于C# XML序列化的一个BUG的修改
查看>>
[Bower] Bower
查看>>
Android 网络通信框架Volley简介(Google IO 2013)
查看>>
杂记- 3W互联网的圈子,大数据敏捷BI与微软BI的前端痛点
查看>>
Android -- setWillNotDraw()
查看>>
魔幻的曲率--已知曲率画图形
查看>>
.Net额外小工具
查看>>
【转】Eclipse的启动问题【an error has occurred see the log file】
查看>>
一款纯css3实现的条纹加载条
查看>>
ADF_Advanced ADF系列1_Fusion应用的客制和个性化(Part1)
查看>>
multipart/form-data和application/x-www-form-urlencoded的区别
查看>>
[LeetCode] Reorder List 链表重排序
查看>>