http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data01102002.asp

解决方案 »

  1.   

    首先你的统计功能是指DataGrid里的数据还是数据里的数字的总计?
    1、如果是数据的话就很简单,你可以使用脚注,<asp:datagrid ShowFooter="true">
       并添加OnItemCreated="ItemCreated";事件。
       public void ItemCreated(Object sender, DataGridItemEventArgs e)
    {
    ListItemType elemType = e.Item.ItemType;
    if (elemType == ListItemType.Pager) 
    {
    TableCell pager = (TableCell) e.Item.Controls[0];
    for (int i=0; i<pager.Controls.Count; i+=2) 
    {
    Object o = pager.Controls[i];
    if (o is LinkButton) 
    {
    LinkButton h = (LinkButton) o;
    h.Text = "[ " + h.Text + " ]"; 
    }
    else
    {
    Label l = (Label) o;
    l.Text = "Page " + l.Text; 
    }
    }
    }
    2、如果是数据里的数字的总计的话,那就麻烦了,首先在数据库里面建立一个总计的Row:例如:
       商品名称    销售商   商品价格
       AAAAAAAA     TCL      123.68
       AAAAAAAA     TCL       23.69
       AAAAAAAA     -1       147.37  (统计行)
       BBBBBBB      IBM     12.36
       BBBBBBB      IBM     10.10  
       BBBBBBB      -1      22.46   (统计行)
    添加统计行:
    DataGrid控件代码不允许您在运行时添加行。即使可以找出这样做的方法,通常您还是会向已经有最大行数的页中添加行。这些新行不会影响网格从给定页提取项的方式。为了防止行和页出现任何问题,直接想数据库中添加行。理想的情况是,在有不同商品名称记录块之间添加额外的空行,但是进行插入查询需要滚动整个结果集。您还可以更有效的附加行,根据需要设置商品名称字段,然后进行排顺。排顺之后你就会发现你要的相同的记录都在一起了。
    插入统计行:
    DataRowView drv=(DataRowView)e.Item.DataItem;
    if((int) drv["销售商"]==-1)
    {
      e.Item.BackColor=Color.White;
      e.Item.Cells[2].Font.Bold=true;
      e.Item.Cells[2].HorizontalAlign=HorizontalAlign.Right;
      e.Item.Cells.RemoveAt(1);
      e.Item.Cells[0].ColumnSpan=2;
    }