成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET DataGrid控件數據分組操作

開發 后端
本文介紹如何使用ASP.NET DataGrid控件進行數據分組操作。

ASP.NET DataGrid控件數據分組操作

下面的 SQL 命令選擇所有客戶在給定年份發出的所有定單。只顯示每個定單所有項目價格的總和。

  1. SELECT o.customerid, od.orderid, SUM(od.quantity*od.unitprice) AS price   
  2. FROM Orders o, [Order Details] od  
  3. WHERE Year(o.orderdate) = @TheYear AND od.orderid=o.orderid  
  4. GROUP BY o.customerid, od.orderid  
  5. ORDER BY o.customerid 

在 T-SQL 語言中,SELECT 語句的 GROUP BY 子句提供將預定義的匯總行添加到結果集的 WITH ROLLUP 子句。當然,這樣的匯總行具有所有其他列的布局,但每一列的內容都可以進行某種程度的自定義。下面的語句闡釋如何修改上面的命令,以使其允許使用匯總行。

  1. DECLARE @TheYear int 
  2. SET @TheYear = 1998  
  3.  
  4. SELECT   
  5.     CASE GROUPING(o.customerid) WHEN 0   
  6. THEN o.customerid ELSE '(Total)' END AS MyCustomerID,   
  7.     CASE GROUPING(od.orderid) WHEN 0   
  8. THEN od.orderid ELSE -1 END AS MyOrderID,   
  9.     SUM(od.quantity*od.unitprice) AS price  
  10. FROM Orders o, [Order Details] od  
  11. WHERE Year(orderdate) = @TheYear AND od.orderid=o.orderid  
  12. GROUP BY o.customerid, od.orderid WITH ROLLUP 
  13. ORDER BY o.customerid, price  

如果您將該代碼片段復制并粘貼到 SQL 查詢分析器中,將看到如下圖所示的內容。

WITH ROLLUP 子句將匯總行添加到結果集

ASP.NET DataGrid控件: WITH ROLLUP 子句將匯總行添加到結果集

GROUPING 是一種 T-SQL 聚合函數,它與 ROLLUP 一起工作于 GROUP BY 子句的主體中。使用 GROUPING 運算符將使新列添加到結果集。如果該行已經由 ROLLUP 運算符添加并因此而成為匯總行,則新列中將包含值 1。否則,該列將包含值 0。使用 CASE..WHEN..END 語句可以將這個新列與分組列合并在一起。

在上面的示例中,MyCustomerID 列在所有因其進行分組而創建的行中包含 CustomerID 列的值以及字符串 “(Total)”。同樣,當該行代表小計時,MyOrderID 列包含定單 ID 和 –1。

為了對數據進行匯總,SQL Server 還提供了幾個選項,例如,WITH CUBE 運算符和 COMPUTE BY 子句。正如您所想象的那樣,盡管一個選項的功能以某種方式與另一個選項的功能相交叉,但是所有這些選項并不完全等價。特別是,WITH CUBE 針對結果集內組與子組的每個可能的組合都生成一個匯總行。而 WITH ROLLUP 按照分組列的指定順序來進行分組。最后,COMPUTE BY(SQL Server 2000 支持它的目的僅在于獲得向后兼容性)的工作方式與 WITH ROLLUP 大體相同,不同的是它返回多個結果集,而且在由查詢優化器處理時不如 ROLLUP 效率高。

ASP.NET DataGrid控件:顯示已分組數據

當綁定到 DataGrid 控件時,由 SQL 命令返回的結果集看上去如下圖所示。

通過 DataGrid 控件顯示的結果集

ASP.NET DataGrid控件: 通過 DataGrid 控件顯示的結果集

示例應用程序中使用的 DataGrid 控件按如下方式進行聲明:

  1. < asp:DataGrid id="grid" runat="server"   
  2. AutoGenerateColumns="false" 
  3. AllowPaging="true" PageSize="15" 
  4. Font-Size="xx-small" 
  5. CellSpacing="0" CellPadding="4" GridLines="both" 
  6. BorderStyle="solid" BorderColor="skyblue" BorderWidth="1"   
  7. OnItemCreated="ItemCreated" 
  8. OnPageIndexChanged="PageIndexChanged"> 
  9.  
  10. < headerstyle backcolor="skyblue" font-size="9pt" font-bold="true" /> 
  11. < itemstyle backcolor="#eeeeee" /> 
  12. < pagerstyle backcolor="skyblue" font-name="webdings"   
  13. font-size="10pt" PrevPageText="3" NextPageText="4" /> 
  14.  
  15. < Columns> 
  16. < asp:BoundColumn DataField="MyCustId" HeaderText="Customer" /> 
  17. < asp:BoundColumn DataField="MyOrderId" HeaderText="Order #" /> 
  18. < asp:BoundColumn DataField="price" HeaderText="Amount"   
  19. DataFormatString="{0:c}"> 
  20. < itemstyle horizontalalign="right" /> 
  21. < /asp:BoundColumn> 
  22. < /Columns> 
  23. < /asp:DataGrid> 

使用 WITH ROLLUP 運算符獲取的數據源已經包含生成有效的報告所必需的全部信息。您可能已經注意到了,該語句添加一個頂行,其中包含由所有客戶發出的全部定單的合計。在使用 WITH ROLLUP 運算符時,如果您修改了分組行的順序,則所生成行的數量和結構可能會發生顯著變化。這額外的一行是我選擇使用特定語法的結果。如果您不需要這段信息,只需在綁定之前將它從結果集刪除。或者,可以將該行移到數據集的底部。

下面顯示的代碼闡釋如何執行 rollup 語句。從文本框中讀出的參數是要考慮的年份。結果集臨時存儲在 DataSet 對象中。在這個示例應用程序中,我將在 Session 槽中緩存 DataSet 對象。在實際環境中,這應該是受重視的選擇。通常,存儲在 Session 中的任何字節都有一個位于那里的充分理由。

  1. private DataSet PhysicalDataRead()  
  2. {  
  3. String strCnn = "SERVER=localhost;DATABASE=northwind;UID=sa;";  
  4. SqlConnection conn = new SqlConnection(strCnn);  
  5.  
  6. // Command text using WITH ROLLUP  
  7. StringBuilder sb = new StringBuilder("");  
  8. sb.Append("SELECT ");  
  9. sb.Append("  CASE GROUPING(o.customerid) WHEN 0 ");  
  10. sb.Append("    THEN o.customerid ELSE '(Total)' END AS MyCustID, ");  
  11. sb.Append("  CASE GROUPING(od.orderid) WHEN 0 ");  
  12. sb.Append("    THEN od.orderid ELSE -1 END AS MyOrderID, ");  
  13. sb.Append("  SUM(od.quantity*od.unitprice) AS price ");  
  14. sb.Append("FROM Orders o, [Order Details] od ");  
  15. sb.Append("WHERE Year(orderdate)=@nYear AND od.orderid=o.orderid ");  
  16. sb.Append("GROUP BY o.customerid, od.orderid WITH ROLLUP ");  
  17. sb.Append("ORDER BY o.customerid, price");  
  18. String strCmd = sb.ToString();  
  19. sb = null;  
  20.  
  21. SqlCommand cmd = new SqlCommand();  
  22. cmd.CommandText = strCmd;  
  23. cmd.Connection = conn;     
  24. SqlDataAdapter da = new SqlDataAdapter(strCmd, strConn);  
  25. da.SelectCommand = cmd;  
  26.  
  27. // Set the "year" parameter  
  28. SqlParameter p1 = new SqlParameter("@nYear", SqlDbType.Int);  
  29. p1.Direction = ParameterDirection.Input;  
  30. p1.Value = Convert.ToInt32(txtYear.Text);  
  31. cmd.Parameters.Add(p1);  
  32.  
  33. DataSet ds = new DataSet();  
  34. da.Fill(ds, "Orders");  
  35. return ds;  
  36. }  

為了使匯總行在該網格的頁面中清楚地顯示,需要更改匯總行的樣式和布局。這可在 ItemCreated 事件處理程序中完成。設計思路是,通過檢查定單 ID 來檢測匯總行,然后修改單元格的布局和樣式。在結果集內,匯總行的特征是定單 ID 為 –1。值 –1 是來自所使用語句的任意值。

  1. CASE GROUPING(od.orderid) WHEN 0 THEN od.orderid ELSE -1 END AS MyOrderID  

如果不針對 orderid 列使用 GROUPING 運算符,則對于匯總行來說,該列的值將為 NULL。

以上就總結了如何使用ASP.NET DataGrid控件進行數據分組操作。

【編輯推薦】

  1. 什么是ASP.NET DataGrid控件:完全模板化的網格
  2. ASP.NET的GridView與DataGrid控件比較淺析
  3. .NET新手指南:輕松自定義DataGridView控件
  4. C#中對DatagridView的部分常用操作
  5. ASP.net中將DataGrid的內容導出為excel文件
責任編輯:yangsai 來源: MSDN
相關推薦

2009-07-15 18:25:52

ASP.NET控件數組

2009-08-03 18:29:31

GridView與Da

2009-08-07 17:56:07

DataGrid的樣式

2009-08-07 17:31:26

ASP.NET Dat

2009-08-04 15:20:59

ASP.NET數據驗證數據驗證控件

2009-07-24 17:15:52

SiteMapData

2009-08-07 15:34:15

ASP.NET數據綁定

2009-07-27 13:52:36

Panel控件ASP.NET

2009-07-27 16:19:59

ASP.NET報表控件

2009-08-17 09:24:25

ASP.NET控件

2009-07-27 17:25:53

ASP.NET驗證控件

2009-08-03 15:08:00

SqlDataSour

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-08-05 15:57:03

ASP.NET控件ID

2009-08-19 13:44:00

ASP.NET Lis

2009-08-04 10:43:59

ASP.NET控件開發

2009-08-07 15:45:26

ASP.NET復合控件數據綁定

2009-07-28 14:22:05

數據源控件ASP.NET

2009-08-05 17:43:48

ASP.NET 2.0

2009-11-26 09:02:59

ASP.NET數據控件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品久久久一区二区三区 | 涩涩视频在线观看 | 亚洲一区二区三区国产 | 亚洲综合区| 午夜一区二区三区在线观看 | 欧美色图另类 | 亚洲不卡在线观看 | 日韩精品一区二区三区视频播放 | 欧美日韩电影一区 | 国产98色在线 | 日韩 | 女人av | 欧美中文视频 | 久热国产精品 | 欧美日韩在线一区二区三区 | 婷婷免费视频 | 亚欧性视频 | 国产精品成人在线观看 | 在线免费观看视频你懂的 | 亚洲三级av | 成人一区二区三区在线观看 | 91亚洲免费 | 最新av在线网址 | 国产 欧美 日韩 一区 | 少妇一区在线观看 | 在线一区视频 | 久久免费精品视频 | av中文字幕在线 | 久久精品国产久精国产 | 亚洲免费视频在线观看 | 男女啪啪高潮无遮挡免费动态 | 91视频免费在观看 | 精品亚洲一区二区三区四区五区 | 91精产国品一二三区 | 欧美日韩一区二区电影 | 国产激情精品一区二区三区 | 久久99精品久久久久久国产越南 | 日韩一二三区视频 | 久久精品视频9 | 亚洲一区国产精品 | 91精品国产乱码久久久久久久久 | 精品熟人一区二区三区四区 |