GridView中的汇总

      虽然GridView的主要目标是现实一组记录,但还可以加入一些有趣的信息,比如汇总数据。
      首先需要设置GridView.ShowFooter属性为真来加入脚注行。
      假如,假设你正在处理产品列表,一个简单的汇总行可以显示产品总价或均价。下面示例中,汇总行显示所有库存商品的总称。
      第一步是确定如何计算这个信息。如果正使用手工绑定,你可以在数据对象绑定到GridView之前读取它的值并进行计算。不过,如果你使用的是声明性绑定,就要借助其他技术了。有两个基本选项,在数据对象绑定到网格前获取数据,或者在绑定后从网格读取数据。下面示例使用后者,因为无论使用何种数据源你都可以重用相同的计算代码,如果启用了分页,它还能只计算当前页面显示的记录。这个方法的缺点是代码必须紧密绑定到GridView,因为你需要通过硬编码的序列号从中获取需要的信息。
      下面示例中,产品的分页网格提供表示当前显示产品的总价格的汇总(效果如下图所示)
      
         < asp:GridView  ID ="gridSummary"  runat ="server"  AutoGenerateColumns ="False"  CellPadding ="4"
            DataKeyNames
="ProductID"  DataSourceID ="sourceProducts"  
            Font-Names
="Verdana"  Font-Size ="Small"  ForeColor ="#333333"  GridLines ="None"
             AllowPaging
="True"  OnDataBound ="gridSummary_DataBound"  ShowFooter ="True" >

       GridView中的汇总

      为了填充脚注,需要响应GridView.DataBound事件。这在GridView填充数据后立刻发生。在这之后就不能在访问数据远了,但可以遍历GridView的行和列的集合。计算总数之后,它被插入脚注行。
      完整代码如下:
      
     protected   void  gridSummary_DataBound( object  sender, EventArgs e)
    {
        
decimal  valueInStock  =   0 ;


        
//  The Rows collection only includes rows on the current page
        
//  (not "virtual" rows).
         foreach  (GridViewRow row  in  gridSummary.Rows)
        {
            
decimal  price  =  Decimal.Parse(row.Cells[ 2 ].Text.Substring( 1 ));
            
int  unitsInStock  =  Int32.Parse(row.Cells[ 3 ].Text);
            valueInStock 
+=  price  *  unitsInStock;
        }

        GridViewRow footer 
=  gridSummary.FooterRow;
        
        
//  Set the first cell to span over the entire row.
        footer.Cells[ 0 ].ColumnSpan  =   3 ;
        footer.Cells[
0 ].HorizontalAlign  =  HorizontalAlign.Center;

        
//  Remove the unneeded cells.
        footer.Cells.RemoveAt( 2 );
        footer.Cells.RemoveAt(
1 );

        
//  Add the text.
        footer.Cells[ 0 ].Text  =   " Total value in stock (on this page):  "   +
          valueInStock.ToString(
" C " );

    }

      汇总行信息与网格的其他行拥有相同个数的列。所以如果希望跨越多个单元格显示文字,你需要配置适当的单元格的ColumSpan属性以跨越多格。上例中,第一个单元格跨越了三列。

你可能感兴趣的:(GridView)