汇总GridView某一列的值

brucegang 2010-01-15 09:42:17
针对GridView某一列的值进行汇总:以下是一位老师的代码:
    $(document).ready(function()
{
//在表的尾部添加一行,$("#<%=GridView1.ClientID %> tbody")表示GridView1在页面生成的表格,注意这里为了方便,引用了JQuery
var tr = $("#<%=GridView1.ClientID %> tbody")[0].insertRow(-1);
var td;
//按表格的列数在新插入的行里添加单元格
for (var i = 0; i < $("#<%=GridView1.ClientID %> tbody th").length; i++) {
//添加单元格
td = tr.insertCell(-1);
//在添加的单元格里插入空格
td.innerHTML = " ";
}

var sumAmount = 0;
//开始统计
//循环GridView1的每一行
$("#<%=GridView1.ClientID %> tr").each(function()
{
//该行的第N个单元格(N表示我们要统计的列)
td = $(this).find("td").eq(3);
//累加访问人数
sumAmount += Number(td.text());
}
);
//汇总出来了
td.text("金额合计:" + sumAmount);
});

如果GridView 要汇总的这个列是:
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBoxTotal" runat="server" Text='<%#Eval("Total") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
上面的代码就无法实现,哪位老师帮我改一下,可以让我实现汇总,多谢了.
...全文
314 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2010-01-15
  • 打赏
  • 举报
回复
我晕了,看成EXT的gridview了,不好意思啊.
普通的table不是很好操作么?
foolbirdflyfirst 2010-01-15
  • 打赏
  • 举报
回复
你可以修改Ext.grid.GridView的doRender方法
Ext.onReady(function(){
Ext.override(Ext.grid.GridView,{
// private
//这个方法就是读取数据,根据template生成的grid各行数据
doRender : function(cs, rs, ds, startRow, colCount, stripe){
var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1;
var tstyle = 'width:'+this.getTotalWidth()+';';
// buffers
var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
for(var j = 0, len = rs.length; j < len; j++){
r = rs[j]; cb = [];
var rowIndex = (j+startRow);
for(var i = 0; i < colCount; i++){
c = cs[i];
p.id = c.id;
p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
p.attr = p.cellAttr = "";
p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
p.style = c.style;
if(p.value == undefined || p.value === "") p.value = " ";
if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
p.css += ' x-grid3-dirty-cell';
}
cb[cb.length] = ct.apply(p);
}
var alt = [];
if(stripe && ((rowIndex+1) % 2 == 0)){
alt[0] = "x-grid3-row-alt";
}
if(r.dirty){
alt[1] = " x-grid3-dirty-row";
}
rp.cols = colCount;
if(this.getRowClass){
alt[2] = this.getRowClass(r, rowIndex, rp, ds);
}
rp.alt = alt.join(" ");
rp.cells = cb.join("");
buf[buf.length] = rt.apply(rp);
}
//...............
buf[buf.length] = "<div>这里是统计行</div>";//这里加一行,可以读取json数据生成这一行.
//...............
return buf.join("");

}

})
})

brucegang 2010-01-15
  • 打赏
  • 举报
回复
问的人多一些,回答的人少一些,人气不足.
brucegang 2010-01-15
  • 打赏
  • 举报
回复
高手请帮忙啊
brucegang 2010-01-15
  • 打赏
  • 举报
回复
各位老师请帮忙啊.
linxisheng 2010-01-15
  • 打赏
  • 举报
回复
我这里自己写的一段贴出来你看看

function getSelValueInDataGrid(chk_name,dataGridID,dataGridNum,chkIndex)//chk名称与要获取选择项的值列号
{
{//构造
if(!chkIndex)
chkIndex=0;
}
var values="";
var trs=$(dataGridID).getElementsByTagName('tr');
for(var dg_i=1;dg_i<trs.length;dg_i++)//从1开始,排除头部行
{
if(trs[dg_i].getElementsByTagName('td')[chkIndex].getElementsByTagName('input')[0].checked)
{
values+="'" + trs[dg_i].getElementsByTagName('td')[dataGridNum].innerText + "',";
}
}
if(values!="")
{
values = values.substring(0,values.length-1);
}
return values;
}


//第一个参数是全选框ID,第二个似乎GridView的ID,最后一个是要统计的列所在的位置1表示第二列
var ciNums = getSelValueInDataGrid('chkAll_grid_stat','grid_stat',1);

以上是要选择框才能用的,楼主稍微改下去掉选择框的功能就能用了
brucegang 2010-01-15
  • 打赏
  • 举报
回复
默认情况下使用那段js代码是可以统计出最一列的汇总值的,当我把需要汇总的那个列改为模板列,同时 ItemTemplate浏览模式下,使用TextBox显示数据,的情况下,那段JS就统计不出来了.我不知道要修改哪里才可以.
foolbirdflyfirst 2010-01-15
  • 打赏
  • 举报
回复
你的问题表述得不够清晰.

//该行的第N个单元格(N表示我们要统计的列)
td = $(this).find("td").eq(3);

//累加访问人数
sumAmount += Number(td.text()); //是不是因为td.text()是类似以下的一串html串,造成统计出错?
/*
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBoxTotal" runat="server" Text='123'> </asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

*/
brucegang 2010-01-15
  • 打赏
  • 举报
回复
不过,也谢谢你的热心回答.

87,908

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧