如何在gridview最后一行具有合计功能,并且能计算某一列的数据总和
页面上有三列,要统计的列是第三列,并且计算第三列的数据总和.第三列里的数据格式都是00.00,比如11.11.首先我先设置ShowFooter="True".privat...
页面上有三列,要统计的列是第三列,并且计算第三列的数据总和.第三列里的数据格式都是00.00,比如11.11.
首先我先设置ShowFooter="True" .
private double sum = 0;//取指定列的数据和
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex >= 0)
{
sum += Convert.ToDouble(e.Row.Cells[2].Text);
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[1].Text = "合计:";
e.Row.Cells[2].Text = sum.ToString();
}
}
代码是以上代码,但是运行后提示"输入字符串的格式不正确。",问题是出在"sum += Convert.ToDouble(e.Row.Cells[2].Text);
"这句上. 展开
首先我先设置ShowFooter="True" .
private double sum = 0;//取指定列的数据和
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex >= 0)
{
sum += Convert.ToDouble(e.Row.Cells[2].Text);
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[1].Text = "合计:";
e.Row.Cells[2].Text = sum.ToString();
}
}
代码是以上代码,但是运行后提示"输入字符串的格式不正确。",问题是出在"sum += Convert.ToDouble(e.Row.Cells[2].Text);
"这句上. 展开
展开全部
给你个建议,你这样做风险比较大,你可以在数据表里做点处理,而不是在GridView上做。
例如查询的时候先查询数据,然后再查询合计(用sum函数),然后把两个结果集union一下,当作查询结果集输出。这是一种方法,比较推荐
另外一种可以在得到DataTable之后遍历每一行,把合计的数算出来,再给DataTable加一行新的,然后绑在GridView上就可以了。用不着再Footer上显示,而且Footer有的时候可能还有其他的用处。
你这个错误报的是数据类型转换出错,字符串无法转换成double,这些都是不可预知因素了
例如查询的时候先查询数据,然后再查询合计(用sum函数),然后把两个结果集union一下,当作查询结果集输出。这是一种方法,比较推荐
另外一种可以在得到DataTable之后遍历每一行,把合计的数算出来,再给DataTable加一行新的,然后绑在GridView上就可以了。用不着再Footer上显示,而且Footer有的时候可能还有其他的用处。
你这个错误报的是数据类型转换出错,字符串无法转换成double,这些都是不可预知因素了
展开全部
if (isFirstBind)
{
for (int i = 0; i < table.Rows.Count; i++)
{
mysum1 += Convert.ToInt32(table.Rows[i][3].ToString());
mysum2 += Convert.ToInt32(table.Rows[i][4].ToString());
}
isFirstBind = false;
}
// 合计
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[1].Text = "合计";
e.Row.Cells[9].Text = mysum1.ToString();
e.Row.Cells[10].Text = mysum2.ToString();
}
这样OK了
{
for (int i = 0; i < table.Rows.Count; i++)
{
mysum1 += Convert.ToInt32(table.Rows[i][3].ToString());
mysum2 += Convert.ToInt32(table.Rows[i][4].ToString());
}
isFirstBind = false;
}
// 合计
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[1].Text = "合计";
e.Row.Cells[9].Text = mysum1.ToString();
e.Row.Cells[10].Text = mysum2.ToString();
}
这样OK了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的不能那么转化,如果是字符串,或者空,你转化要报错
你要
定义个double类型的a 并且给默认值 0
double.TryParse("要转化的值",out a)
sum+= a
你要
定义个double类型的a 并且给默认值 0
double.TryParse("要转化的值",out a)
sum+= a
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那显然你e.Row.Cells[2].Text里面的东西不是double 看看是不是索引错了 应该是1 ??
或者你e.Row.Cells[2].Text里面是空的 你要加判断啊 至少要有Try把转换包起来
或者你e.Row.Cells[2].Text里面是空的 你要加判断啊 至少要有Try把转换包起来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在原数据上做,比较容易。
处理好了,再和GridView绑定。
处理好了,再和GridView绑定。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询