解决思路是:
假设几个名字,金额这列为A列,累积金额为b列,第一行为A1,b1,第二行为A2,b2 以此类推,名字命名,这些A1,A2,b1,b2都是单元格的文本框的id。如果在现实的项目当中,你可以随意命名,因为在gridview里面命名好了之后,他会自动生成文本框的名字,所以,我们在操作每一行的金额的时候,就必须把每一行的金额,和对应的累积金额的名字取出来。
首先你要取出gridview每一个单元格的空间的id,这个大家会想到在gridview的ItemDataBound时间里面进行。
后台代码是这样的
string control = "";//控件 protected void dvList_ItemDataBound(object sender, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { //金额控件 TextBox _je = (TextBox)e.Item.FindControl("je"); //累积金额控件 TextBox _ljzf = (TextBox)e.Item.FindControl("ljzf"); int _row = e.Item.ItemIndex; if (_row >= 1) control += ";"; //如果不是第一行,就把当前这行的前面的那些累加起来,在前台会用function (objJE, objLJZF)这个方法实现计算 control += _je.ClientID; //绑定文本框离开时间 _je.Attributes["onblur"] = "__doGetljzf('" + control + "','" + _ljzf.ClientID + "')"; } }
用到的前台代码如下:
//累积支付的运算 function __doGetljzf(objJE, objLJZF) { var je = 0; if (objJE.indexOf(";") == -1) { if (document.getElementById(objJE).value != "") { je = parseFloat(document.getElementById(objJE).value); } } else { var jeArr = objJE.split(";"); for (var i = 0; i < jeArr.length; i++) { if (document.getElementById(jeArr[i]).value != "") { je += parseFloat(document.getElementById(jeArr[i]).value); } } } document.getElementById(objLJZF).value = je; }
不明白的可以站内短信给我。
这就是数据与UI的双向绑定了
可以了解一下Knockout.js
查一下 js 操作 table 的函数就知道怎么做。
稍微用点JQuery就能实现了~ 输入框:blur时出发计算方法。即可。