前言:
这块的需求在上一篇博客(【玩转GridView】之让GridView动起来(一)】)中已提到,是嵌入gridview中文本框之间的一个求和。之前的做法是全部写在了后台代码中,后来测试提了bug—“嵌入的复制按钮需要双击才生效”,一直没明白是怎么导致的,后来经大神指点,调试发现是两个后台方法在回发的时候冲突,才出现这样的问题.
之后因开发新功能,这块bug留了两周左右,最近新功能开发完了,就和同事请教了一下,将这些实时变化的东西全放在了JS中.
问题:
随调整额和定额的变化,总额要随之实时变化.
首先遇到的问题是,如何在JS中获取嵌入Gridview中文本框的值?如何将对应一行的数据相加并赋值,还保证是同一行?
思路:
先获取点击那行的rowIndex,根据传的参数能获取当前文本框的value值;之后就若是修改调整额的话,需要获取定额值,再求两者之和,赋值给对应的调整总额.获取定额值时,先获取gridview的ID值,再用
getElementsByTagName("input")[index].value
获取值. 赋值用相同的方式反着来就OK.
直接来看看代码就明白了.
代码:
//调整额改变时,总额实时变化
function Count(result) {
//获取行号
var index = result.parentNode.parentNode.rowIndex;
//获取修改的整额值
var adjvalue = result.value;
//判断如果文本框为空时,直接返回不计算
if(isNaN(adjvalue) == true || adjvalue ==''){
return;
}
//获取定额值
if (index == 1) {
var adjust = document.getElementById('<%= grvDetail.ClientID %>').getElementsByTagName("input")[0].value;
} else {
var adjust = document.getElementById('<%= grvDetail.ClientID %>').getElementsByTagName("input")[7 * (index - 1)].value;
}
var adjAllCost = parseFloat(adjvalue) + parseFloat(adjust);
if (index == 1) {
document.getElementById('<%= grvDetail.ClientID %>').getElementsByTagName("input")[index + 2].value = adjAllCost;
} else {
document.getElementById('<%= grvDetail.ClientID %>').getElementsByTagName("input")[index + (6 * index - 4)].value = adjAllCost;
}
}
效果图:
利用复制按钮时,自动汇总数据,是在后台方法中实现的(PS:详见博客【玩转GridView】之让GridView动起来(一)】);当调整额改变时,总额也随之变化。
总结:
当我们再去修改bug时,也就相当于是对功能的再次思考和认识.去看看是业务逻辑出问题了,还是代码写的不够严谨. 不管是什么方面,改Bug也是一种学习.