C#中Gridview如何实现列的动态最后加一个统计行 列的动态就是根据需要显示列的数目 有可能4列有可能5列 统计行 则 需要在gridview中 添加一行 改行实现列的合并功能 不需要链接 只要关键部分代码 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); } } 在上班不好写例子给你,给你点思路,希望对你有帮助可以给查询出来的datatable插入个空行,然后对gridview进行处理gridview1.row[gridview1.rows.count]这个是最后一行因为最后一行值是空的,其他的列你不用管,你只管加统计,找到位置的控件赋值如果还不明白,下班给你写个例子 随你多少列 问题是你要统计的是哪一列而且这一列是不是固定的?前提:设置属性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(); } } /// <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; } } 使用SQL查询统计出合计值,在绑定GridView时让其结果赋于一个DataTable(全局变量),然后在RowDataBound事件中 sum1 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_ActivedUser"))).Text.Trim()); sum2 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_TotalUser"))).Text.Trim());用控件绑定你的数目然后进行累加。。1楼代码写的好啊。 没有写死啊,你统计总知道要放在gridview的那几列吧,至于统计的数据,你自己被做死就可以了你可以把统计的数据存在和数据库表相同的字段里,直接绑定,不用你再另外设置 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(); } 除了 这个方法获取那个底部列之外 还有其他的方法没??? 我统计的是所有的数据 不是显示的数据 //} 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 是动态绑定的 好像gridview没有footerrow吧 Aspx中设置属性ShowFooter="True"然后就像1楼那样将累加的值传到对应的Cells[]你也可以在查询数据的时候在SQL语句里事先就把值统计出来(加别名),程序里可以直接绑别名 这个不是很难的东西啊! 你只需要在绑定数据前,把你查询出来的table 多加一行统计行 或则统计列就行了,然后在进行绑定! 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 然后给他赋值就好了,一般新手都这样```` .. 很无语的说 如果可以对table进行操作的话 那么我也不会问了 我需要的是gridview中列 和行的合并 这个是关键 统计倒是其次 不过问题还是解决了 花了不少时间是最郁闷的事 谢谢大家了 sql 语句统计出来啊with rollup C# 链接 Sybase数据库 大数据量问题! 大侠们来看看! HttpWebRequest还不是太了解 注册的一个问题 求一界面比较专业的服装类的网站参考参考. 一个页面多个相同的用户控件 谁能给我一段asp.net连access数据库的更新代码啊 如何获取动态生成的控件的值 discuz论坛与网站整合后可以实现会员注册同步,但是登陆无法同步(急) 存储过程分页 ashx+ajson实现加载更多,请将代码补充完整 …………【HTML字符串拼接】 面试题:怎么写需求文档?
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);
}
}
可以给查询出来的datatable插入个空行,然后对gridview进行处理
gridview1.row[gridview1.rows.count]这个是最后一行
因为最后一行值是空的,其他的列你不用管,你只管加统计,找到位置的控件赋值如果还不明白,下班给你写个例子
前提:设置属性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();
}
}
/// <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;
}
}
sum2 += Convert.ToInt32(((Label)(e.Row.FindControl("Label_TotalUser"))).Text.Trim());用控件绑定你的数目然后进行累加。。1楼代码写的好啊。
你可以把统计的数据存在和数据库表相同的字段里,直接绑定,不用你再另外设置
{
e.Row.Cells[0].Text = "合计";
e.Row.Cells[1].Text = mysum1.ToString();
e.Row.Cells[2].Text = mysum2.ToString();
} 除了 这个方法获取那个底部列之外 还有其他的方法没???
我统计的是所有的数据 不是显示的数据
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 是动态绑定的
好像gridview没有footerrow吧
然后就像1楼那样将累加的值传到对应的Cells[]
你也可以在查询数据的时候在SQL语句里事先就把值统计出来(加别名),程序里可以直接绑别名
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 然后给他赋值就好了,一般新手都这样````
很无语的说 如果可以对table进行操作的话 那么我也不会问了
我需要的是gridview中列 和行的合并
这个是关键 统计倒是其次
不过问题还是解决了 花了不少时间是最郁闷的事 谢谢大家了
with rollup