2014年8月1日 星期五

GridView小計欄跟總計欄的解決方案-使用SQL語法

http://ithelp.ithome.com.tw/question/10136595
使用方式如下:
  1. select  
  2. case when grouping(Dept)=1 then N'合計' else isnull(StaffNumber,'') end '員工編號',  
  3. case when grouping(StaffNumber)=1 and grouping(Dept)=0 then N'小計' else isnull(Dept,'') end '部門',  
  4. sum(pay) as '年薪'  
  5. from GirdTest group by Dept,StaffNumber with rollup  
接著回到.aspx.cs開始撰寫程式,於Page_Load的時候Binding資料,GetData()是處理資料的自定義function

  1. private DataTable GetData()  
  2. {  
  3.     DataTable dt = new DataTable();  
  4.     string Sql = @"  
  5.                 select   
  6.                 case when grouping(Dept)=1 then N'合計' else isnull(StaffNumber,'') end '員工編號',  
  7.                 case when grouping(StaffNumber)=1 and grouping(Dept)=0 then N'小計' else isnull(Dept,'') end '部門',  
  8.                 sum(pay) as '年薪'  
  9.                 from GirdTest group by Dept,StaffNumber with rollup";  
  10.    
  11.     using (SqlConnection connection =  
  12.     new SqlConnection(connectionString))  
  13.     {  
  14.         SqlCommand command = new SqlCommand(Sql, connection);  
  15.         try  
  16.         {  
  17.             connection.Open();  
  18.             SqlDataReader reader = command.ExecuteReader();  
  19.             dt.Load(reader);  
  20.             reader.Close();  
  21.             return dt;  
  22.         }  
  23.         catch (Exception ex)  
  24.         {  
  25.             //Error logging...  
  26.         }  
  27.     }  
  28.     return dt;  
  29. }  

[SQL]以某個欄位群組N筆數做分頁加總

,然後直接使用 CEILING(ROW_NUMBER() OVER (PARTITION BY 群組欄位 ORDER BY 群組欄位) /2.0) + SubQuery來處理就可順利解決。如下,
01WITH NOXT1
02AS
03(
04SELECT CEILING(row_number() OVER (PARTITION BY NOX ORDER BY NOX) /2.0) AS 'Grouping',
05       *
06FROM dbo.XX AS X
07)
08SELECT A.NOX, A.NO_ITEM, A.QTY
09, (SELECT SUM(B.QTY) FROM NOXT1 B WHERE A.NOX = B.NOX AND A.Grouping = B.GroupingAS '分頁小計'
10, (SELECT SUM(B.QTY) FROM NOXT1 B WHERE A.NOX = B.NOX AND A.Grouping >= B.GroupingAS '群組累計'
11FROM NOXT1 A;

[ASP.NET]Gridview 各欄位的加總計算



GridViewRow.RowType 屬性

如何將GridView內的金額欄位,以動態方式加總?

Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim sumTotal As Integer = 0
        For Each rows As GridViewRow In GridView1.Rows
            Dim priceTotal As Decimal = 0
            priceTotal += Convert.ToDecimal(CType(rows.FindControl("lab_dircharge"), Label).Text.Trim)
            sumTotal = sumTotal + CInt(priceTotal.ToString("c0"))
        Next
        lab_sum.Text = sumTotal
End Sub




使用 ROLLUP 來摘要資料





沒有留言: