ASP.NET数据格中计算数值总和(2)

分类: asp.net   出处:iocblog整理  更新时间:2010-01-15   添加到收藏  

  
  databind方法还保持着对来自数据源的数据栏的动态求和。以下代码返回一行数据的详细个数:
  
  double currentfreight = convert.todouble(databinder._eval(e.item.dataitem,
  
   "freight"));
  
  此行代码返回由_eval语句获得的值,并将其转换为保持动态求和所必需的格式。一旦返回了此值,它将被加到total变量中。在datagrid中的每行都将进行此操作。以下代码定义了一行:
  
  if(e.item.itemtype==listitemtype.item |
  
  e.item.itemtype==listitemtype.alternatingitem)
  
  此语句对于datagrid中的每行都返回true。语句的其他部分决定了何时显示总计数量。当所有的行(if语句的第一部分为false)都被处理时该语句被执行,除非以以下语句开头:
  
  else if (e.item.itemtype == listitemtype.footer)
  
  当到达页脚时,此语句将返回true。既然我们对页眉没有兴趣,我们必须确定这是否是页脚。在这种情况下,总计值将显示在datagrid合适的栏中。必须记住栏的编号是从0开始。由此,我们得出栏2和栏3,而不是栏3和栏4。你可以通过用item的索引值来覆盖cells属性中的text属性来完成此工作。
  
  e.item.cells[2].text = "total:";
  
  e.item.cells[3].text = convert.tostring(totalfreight);
  
  需要注意总计值在显示前被转换为字符串值。
  
  另一种方法
  当并不急需获得数据的总计值时,你可以使用另外一种方法。此方法通过sql sum命令来计算栏中数值的总数。这种方法的缺点在于它需要一个单独的数据库调用,并且结果必须存放在dataset或其他类似的对象中。
  
  翻页
  你或许想知道datagrid 翻页是如何影响到总计值的。本文中的范例代码将显示对屏幕所示的数据的求和,所以对每页来说结果都会不同(你必须调整代码以保持对每个变量的求和,但这已经超出了本文所讨论的范围)。
  
  由于你不能使用sqldatareader来翻页,本文的代码将不能用于翻页的情况。但你可以将代码修改为使用dataset对象以利用其提供的翻页选项。以下代码改变将完成此工作:
  
  sqlcommand comm = new sqlcommand(ssql, conn);
  
  sqldataadapter da = new sqldataadapter();
  
  da.selectcommand = comm;
  
  dataset ds = new dataset();
  
  da.fill(ds);
  
  dgnorthwind.datasource = ds;

上一页 [1] [2]



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。