protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                totalstock += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Totalprice"));            }
            else if (e.Row.RowType == DataControlRowType.Footer)
            {
                e.Row.Cells[2].Text = "合计:";
                e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Right;
                e.Row.Cells[3].Text = totalstock.ToString("f2");
                e.Row.Cells[3].HorizontalAlign = HorizontalAlign.Right;
            }
        }这个只能求出每页的合计,但是分了好多页  我想在最后一页的最后一行在做个 总的合计,这页的合计不要了.,谁能教教小弟.

解决方案 »

  1.   

    直接在gridview最后一行利用你的数据源(例:DataTable)计算总和
    不要用绑定到gridview上的cell里的值。
      

  2.   

     有个想法 不知道可以不可行
       循环页数。把每页统计出来的放入session["dd"+'"[i]"']
      最后把session加起来。。具体行不行不知道
      

  3.   

    给LZ  提点 建议吧
      我做 gridview 合计时不是这么做的
    因为这么做 有分页 在困扰着  需要在gridview最后一行显示合计  比较麻烦
      也没必要这么折腾我在项目里面 做合计的时候 是直接在gridview下面(紧挨着gridview) 放个table  然后用Label  需要合计那一列 就在对应的 列下面td 里面放Label  合计很简单 用sql语句sum(你要合计的字段) 就OK了
      然后 一一绑定Label   注意 table 背景色 和gridview的 一样最好 看起来舒服
           这样的话 合计 与gridview的数据 简单明了!~· 
      

  4.   


    if(e.Row.RowIndex==GridView1.Rows.count-1)e.Row.Cells[3].Text=GridView1.Rows.count*需要合计的列名; 
      

  5.   

    你可以把合计先隐藏掉,然后再 判断pageindex 如果pageindex是最后一页你再显示
      

  6.   


    这样也可以啊,判断如果是最后一页就统计出来显示LABLE
      

  7.   

    分页的话 只能对数据源 或者数据库操作进行统计
    很简单 
    在数据库里用sum 获取就行了 前提是判断是否为最后一页
      

  8.   

    在sql语句的时候搞定:
    select 字段1,数字字段2 from table where 条件
    union
    select '总计',sum(数字字段2) from table where 条件
      

  9.   

    直接从数据库中合计出来总数,用Lable接收就行了
      

  10.   

            protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    totalstock += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Totalprice"));            }
                else if (e.Row.RowType == DataControlRowType.Footer)
                {
                    if(判断当前页==总记录数/每页记录数)
                    {
    //判断当前页 = AspnetPager.CurrentPageIndex
    //总记录数 = AspnetPager.RecordCount
    //每页记录数 = GridView1.Pagesize
                    e.Row.Cells[2].Text = "合计:";
                    e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Right;
                    e.Row.Cells[3].Text = totalstock.ToString("f2");
                    e.Row.Cells[3].HorizontalAlign = HorizontalAlign.Right;
                    }
                }
            } 
      

  11.   

    我是用 LINQ返回数据源。 绑定 那个ASPNETPAGE分页控件做的。
      

  12.   

        protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
            { 
                if (e.Row.RowType == DataControlRowType.DataRow) 
                { 
                    totalstock += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Totalprice"));             } 
                else if (e.Row.RowType == DataControlRowType.Footer) 
                { 
                    if(判断当前页==总记录数/每页记录数) 
                    { 
    //判断当前页 = AspnetPager.CurrentPageIndex 
    //总记录数 = AspnetPager.RecordCount 
    //每页记录数 = GridView1.Pagesize 
                    e.Row.Cells[2].Text = "合计:"; 
                    e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Right; 
                    e.Row.Cells[3].Text = totalstock.ToString("f2"); 
                    e.Row.Cells[3].HorizontalAlign = HorizontalAlign.Right; 
                    } 
                } 
            } 
      

  13.   

    你说的统计
    我到看见SQL语句,是在<SQL SERVER 2005宝典>
    用COMPUTE BY/WITH rollup/ 哟详细的你到网上查哈
      

  14.   

    对简单汇总报表使用 Transact-SQL
    生成简单汇总报表的应用程序可使用下列 Transact-SQL 元素: CUBE 或 ROLLUP 运算符,这两者均是 SELECT 语句的 GROUP BY 子句的一部分。
    COMPUTE 或 COMPUTE BY 运算符,这两者也与 GROUP BY 相关联。 
    这些运算符生成的结果集中,既包含每个项目的明细行,也包含每个组的汇总行,汇总行显示了该组的聚合合计。GROUP BY 子句可用于生成只包含各组聚合而不包含明细行的结果。建议应用程序使用 Analysis Services,而不要使用 CUBE、ROLLUP、COMPUTE 或 COMPUTE BY。CUBE 和 ROLLUP 应当只用在无法访问 OLE DB 或 ADO 的环境中,例如脚本或存储过程中。支持 COMPUTE 和 COMPUTE BY 是为了向后兼容。应优先选用 ROLLUP 而非 COMPUTE 或 COMPUTE BY。COMPUTE 或 COMPUTE BY 生成的汇总值作为分离的结果集返回,这些结果集之间还插入了各组明细行结果集;或者作为包含合计的结果集返回,追加在主结果集之后。处理这些多重结果集增加了应用程序代码的复杂性。COMPUTE 和 COMPUTE BY 都不支持服务器游标,而 ROLLUP 则支持。CUBE 和 ROLLUP 将生成单个结果集,其中包含嵌入的小计和合计行。并且,有时查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE 和 COMPUTE BY 生成的更为高效。当使用不带这些运算符的 GROUP BY 时,将返回单个结果集,其中每组一行,行中包含该组的聚合小计。结果集中没有明细行。
      

  15.   

    楼上的几位说得不错, 求总和, 直接再在.cs里读一次数据库就是了.
    我前天也遇到这种情况, 本来想在.cs里循环读每一行的值, 加起来得总值.
    但想想 何必搞N次循环, 还不如一条SQL语句来得省资源和时间.
      

  16.   

    分页的统计按楼主的代码已经可以实现。
    全部的统计要在数据库里用 SQL 语句获取。
    楼上已经有判断是否最后一页的代码,如果是就获取全部的统计,显示出来。
      

  17.   

    在开始计算总和的时候,悄悄的把 GridView.AllowPage改为false,把值计算出来以后然后悄悄的GridView.AllowPage改为true,这样用户感觉不到变化的
    当然这个是最蠢的办法,我刚学的时候用过,以后从不用服务器控件。
      

  18.   

    针对你的DATASET或者DATATABLE操作就可以了GRIDVIEW在绑定后自己再多添加一个静态行作为统计行显示就行,或者写在控件外部也行!
      

  19.   

    那就抛开分页做法,直接用条件语句计算出结果就行了.========
    修改,sql语句!就可以了!