快速业务通道

ASP.NET 2.0数据教程之十五:在GridView的页脚中显示统计信息

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
k,类型为int

· _totalUnitsOnOrder,类型为int

然后,在RowDataBound事件处 理方法中写一些代码,使每一个数据行都可以增加这些变量的值。

1// 类范围,累积合计的变量……
2decimal _totalUnitPrice = 0m;
3int _totalNonNullUnitPriceCount = 0;
4int _totalUnitsInStock = 0;
5int _totalUnitsOnOrder = 0;
6
7protected void ProductsInCategory_RowDataBound(object sender, GridViewRowEventArgs e)
8{
9  if (e.Row.RowType == DataControlRowType.DataRow)
10  {
11    // 通过 e.Row.DataItem 属性引用ProductsRow
12    Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView) e.Row.DataItem).Row;
13
14    // 增加累积合计(如果它们不 为NULL的话!)
15    if (!product.IsUnitPriceNull())
16     {
17      _totalUnitPrice += product.UnitPrice;
18      _totalNonNullUnitPriceCount++;
19    }
20
21    if (!product.IsUnitsInStockNull())
22       _totalUnitsInStock += product.UnitsInStock;
23
24     if (!product.IsUnitsOnOrderNull())
25       _totalUnitsOnOrder += product.UnitsOnOrder;
26  }
27}

在RowDataBound事件处理方法中,我们首先应该确保我们正在操 作一个DataRow。一旦确定了是这么回事,e.Row中那个刚刚绑定到GridViewRow对 象的Northwind.ProductsRow实例就可以赋值给product变量了。接着,累积合计 就被当前产品的相关值(当然了,我们还是应该要确保它们不会含有一个数据库 NULL值)增加了。我们同时记录了累积的UnitPrice合计以及非空UnitPrice记录 的条数,因为平均价格是这两个数的商。

第四步:在页脚中显示统计数据

计算了统计数据之后,最后一个步骤就是在GridView的页脚上显示它了。 同样,这个任务也可以通过RowDataBound事件处理方法来完成。回忆一下 RowDataBound事件处理方法,它会在每一行绑定到GridView的时候被触发,页脚 行也不例外。因此,我们可以扩展我们的事件处理方法,让它可以通过如下的代 码来在页脚行中显示数据:

1protected void ProductsInCategory_RowDataBound(object sender, GridViewRowEventArgs e)
2{
3  if (e.Row.RowType == DataControlRowType.DataRow)
4  {
5   //……增加累积合计……
6  }
7  else if (e.Row.RowType == DataControlRowType.Footer)
8  {
9   //……在 页脚中显示统计数据……
10  }
11}

因为页脚行是在所有的数据行都已经添加之后才添加到GridView中的,所以我们 可以相信在将统计数据显示在页脚中之前,累积合计值都已经计算完毕了。最后 一步就是将这些值放到页脚的单元格中了。

要在页脚的特定单元格中显示 文本,可以使用use e.Row.Cells[index].Text = value,单元格的索引是从0开 始的。下面的代码计算了平均价格(总的价格除以产品的数量)并将其与库存量 和订货量一起显示到GridView页脚的相应单元格中。

1protected void ProductsInCategory_RowDataBound(object sender, GridViewRowEventArgs e)
2{
3  if (e.Row.RowType == DataControlRowType.DataRow)
4  {
5   //…… 增加累积合计……
6  }
7  else if (e.Row.RowType == DataControlRowType.Footer)
8  {
9   // 确定平均单价
10   decimal avgUnitPrice = _totalUnitPrice / (decimal) _totalNonNullUnitPriceCount;
11
12   // 在相应的 单元格中显示统计数据
13   e.Row.Cells[1].Text = "

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号