列的动态就是根据需要显示列的数目 有可能4列有可能5列
 
      
   统计行  则 需要在gridview中 添加一行
   改行实现列的合并功能
      不需要链接  只要关键部分代码  谢谢

解决方案 »

  1.   


        int sum1 = 0;
        int sum2 = 0;
        protected void GridView_BsUserStat_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                sum1 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_ActivedUser"))).Text.Trim());
                sum2 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_TotalUser"))).Text.Trim());
            }
            else if (e.Row.RowType == DataControlRowType.Footer)
            {
                e.Row.Cells[0].Text = "总数";
                e.Row.Cells[1].Text = sum1.ToString();
                e.Row.Cells[2].Text = sum2.ToString();            decimal i = (Decimal)sum1 / sum2 * 100;            e.Row.Cells[3].Text = String.Format("{0:n2}%", i);
            }
        }
      

  2.   

    在上班不好写例子给你,给你点思路,希望对你有帮助
    可以给查询出来的datatable插入个空行,然后对gridview进行处理
    gridview1.row[gridview1.rows.count]这个是最后一行
    因为最后一行值是空的,其他的列你不用管,你只管加统计,找到位置的控件赋值如果还不明白,下班给你写个例子
      

  3.   

    随你多少列 问题是你要统计的是哪一列而且这一列是不是固定的?
    前提:设置属性ShowFooter="True"直接把对应列每一行的值相加(不做数据查询,在RowDataBound事件中运算)
    int mysum1 = 0; 
        int mysum2 = 0;
        protected void GridList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow )
            {
                DataRowView myrows=(DataRowView)e.Row.DataItem;
                mysum1 +=Convert .ToInt32 (myrows[2].ToString ());
                mysum2 += Convert.ToInt32(myrows[3].ToString());
            }
            // 合计
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                e.Row.Cells[0].Text = "合计";
                e.Row.Cells[1].Text = mysum1.ToString();
                e.Row.Cells[2].Text = mysum2.ToString();
            }
        }
      

  4.   


    /// <summary>
            /// 合并单元格 合并一行中的几列
            /// </summary>
            /// <param name="GridView1">GridView ID</param>
            /// <param name="rows">行</param>
            /// <param name="sCol">开始列</param>
            /// <param name="eCol">结束列</param>
            public static void GroupRow(GridView GridView1, int rows,int sCol,int eCol)
            {
                 TableCell oldTc = GridView1.Rows[rows].Cells[sCol];
                for (int i = 1; i < eCol - sCol; i++)
                {
                    TableCell tc = GridView1.Rows[rows].Cells[i + sCol];   //Cells[0]就是你要合并的列
                    tc.Visible = false;
                    if (oldTc.ColumnSpan == 0)
                    {
                       oldTc.ColumnSpan = 1;
                    }
                    oldTc.ColumnSpan++;
                    oldTc.VerticalAlign = VerticalAlign.Middle;
                }
            }
      

  5.   

    使用SQL查询统计出合计值,在绑定GridView时让其结果赋于一个DataTable(全局变量),然后在RowDataBound事件中
      

  6.   

     sum1 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_ActivedUser"))).Text.Trim());
     sum2 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_TotalUser"))).Text.Trim());用控件绑定你的数目然后进行累加。。1楼代码写的好啊。
      

  7.   

    没有写死啊,你统计总知道要放在gridview的那几列吧,至于统计的数据,你自己被做死就可以了
    你可以把统计的数据存在和数据库表相同的字段里,直接绑定,不用你再另外设置
      

  8.   

     if (e.Row.RowType == DataControlRowType.Footer)
      {
      e.Row.Cells[0].Text = "合计";
      e.Row.Cells[1].Text = mysum1.ToString();
      e.Row.Cells[2].Text = mysum2.ToString();
      }  除了 这个方法获取那个底部列之外 还有其他的方法没??? 
      我统计的是所有的数据 不是显示的数据
      

  9.   

       //}
                    TableCell hj_cell = new TableCell();
                    hj_cell.Text = "合计";
                    hj_cell.HorizontalAlign = HorizontalAlign.Center;
                    gv.FooterRow.Cells[0].Attributes.Add("colspan", "2");
                    gv.FooterRow.Cells.Add(hj_cell);    这样写的代码 他说 gv.FooterRow 为null 应该怎么做 
      我的girdview 是动态绑定的 
      

  10.   


    好像gridview没有footerrow吧
      

  11.   

    Aspx中设置属性ShowFooter="True"
    然后就像1楼那样将累加的值传到对应的Cells[]
    你也可以在查询数据的时候在SQL语句里事先就把值统计出来(加别名),程序里可以直接绑别名
      

  12.   

    这个不是很难的东西啊! 你只需要在绑定数据前,把你查询出来的table 多加一行统计行 或则统计列就行了,然后在进行绑定!
      

  13.   


                            sql5 += " order by tb_YieldInfo.PassStationDate";
                            Outds dd = new Outds();
                            DataSet ds = dd.Outdata(sql5);
                            this.GridView1.DataSource = ds.Tables[0];
                            String sql7 = "select sum(cast(GW as bigint)) as a,sum(Tare) as b,sum(cast(NW as bigint)) as c,sum(ta) as d,sum(Special_Tax)as f from (" + sql6 + " )as mm";
                            String ur = ConfigurationManager.ConnectionStrings["SDB"].ConnectionString;
                            SqlConnection co = new SqlConnection(ur);
                            co.Open();
                            SqlCommand cm = new SqlCommand(sql7, co);
                            SqlDataReader sd = cm.ExecuteReader();
                            try
                            {
                                sd.Read();
                                double a = double.Parse(sd["a"].ToString()) * 0.001;
                                double g = double.Parse(sd["b"].ToString()) * 0.001;
                                double c = double.Parse(sd["c"].ToString()) * 0.001;
                                double d = double.Parse(sd["d"].ToString()) * 0.0001;
                                double f = double.Parse(sd["f"].ToString()) * 0.0001;
                                ArrayList ad = Gget13(sql6);
                                aa1 = double.Parse(ad[0].ToString()) * 0.0001;
                                aa2 = double.Parse(ad[1].ToString()) * 0.0001;
                                aa3 = double.Parse(ad[2].ToString()) * 0.0001;
                                aa4 = double.Parse(ad[3].ToString()) * 0.0001;
                                aa5 = double.Parse(ad[4].ToString()) * 0.0001;
                                aa6 = double.Parse(ad[5].ToString()) * 0.0001;
                                aa7 = double.Parse(ad[6].ToString()) * 0.0001;
                                aa8 = double.Parse(ad[7].ToString()) * 0.0001;
                                aa9 = double.Parse(ad[8].ToString()) * 0.0001;
                                aa10 = double.Parse(ad[9].ToString()) * 0.0001;
                                aa11 = double.Parse(ad[10].ToString()) * 0.0001;
                                aa12 = double.Parse(ad[11].ToString()) * 0.0001;
                                co.Close();
                                sd.Close();
                                String s = Recount();
                                this.Label2.Text = "【合计】:[当前记录条数共:" + s + "条] ," + " [毛重" + a + "吨] ,[皮重" + g + "吨] ,[净重" + c + "吨],[原矿石" + c + "吨 ],[普通帐户扣款" + d.ToString("F4") + "万元],[专用税费款" + f.ToString("F4") + "万元],[收益金(元)财政局" + aa1.ToString("F4") + "万元 ],[资源补偿费(元)国土局" + aa2.ToString("F4") + "万元 ],[水土保持费(元)水电局" + aa3.ToString("F4") + "万元 ],[环保费(元)环保局" + aa4.ToString("F4") + "万元 ],[采矿权价款(元)国土局" + aa5.ToString("F4") + "万元 ],[植被恢复金(元)国土局" + aa6.ToString("F4") + "万元 ],[价格调节金(元)财政局" + aa7.ToString("F4") + "万元 ],[国税(元)财政局" + aa8.ToString("F4") + "万元 ],[资源税(元)地税局" + aa9.ToString("F4") + "万元 ],[地税(元)地税局" + aa10.ToString("F4") + "万元 ],[印花税(元)地税局" + aa11.ToString("F4") + "万元 ],[产业补贴(元)" + aa12.ToString("F4") + "万元 ]";
                            }
                            catch (Exception ce)
                            {                            this.Label2.Text = "";
                                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('没有数据');</script>");
                            }
                            finally
                            {                        }
                            this.GridView1.DataBind();在GRIDVIEW多添加一个LABEL  然后给他赋值就好了,一般新手都这样````
      

  14.   

    .. 
         很无语的说  如果可以对table进行操作的话 那么我也不会问了  
      我需要的是gridview中列 和行的合并 
      这个是关键 统计倒是其次
       
      不过问题还是解决了 花了不少时间是最郁闷的事 谢谢大家了 
      

  15.   

    sql 语句统计出来啊
    with rollup