???? 你是否經常使用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控件:
?????? 但是,首先要遵守一定的布局結構。基本結構如下:
???? < GroupTemplate >
??????? <!-- 這里你可以顯示分組的數據,這里的代碼每個分組只執行一次 -->
??????? < asp:PlaceHolder?ID = " itemPlaceholder " ?runat = " server " ? /> ? <!-- 這個控件用來顯示分組內詳細的item,顯示樣式由ItemTemplate決定 -->
??????? <!-- 這里你可以顯示分組的數據,這里的代碼每個分組只執行一次 -->
???? </ GroupTemplate >
???? < ItemTemplate >
?? <!-- 這里顯示每個分組內的詳細數據記錄,執行次數等于該分組內的記錄數 -->
???? </ ItemTemplate >
</ cc1:GroupingView >

?????
接下來,我來舉幾個實例。
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

????? 其中的?<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,因此就不再演示了,我把后臺的那個事件寫一下,讓大家參考一下。

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就可以搞定了。下面來看下布局代碼。

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。?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
