自定义控件不能入库问题解决办法
问题介绍:
客户使用自定义控件进行填报,在使用过程中发现数据能够回写到单元格中,但是填报更新的时候发现日历控件的数据没有更新进数据库,后台显示没有得到下拉日历的值,后台打印的是null。
解决思路:自定义控件的数据能够回写到单元格中证明自定义控件的功能是基本没有问题的,数据能在单元格中显示,但是在后台没有办法得到数据更新进数据库,这应该是自定义控件只把值赋给了单元格的innerHtml属性,而没有把值赋给单元格的value属性,所以要修改自定义控件的代码,把值赋予单元格的value属性就可以了。
解决过程:
下面就用一个自定义的日历控件为例,实现一下上面所说的修改过程。
客户最初的自定义日历控件返回值部分的代码如下:
function returnDate() //根据日期格式等返回用户选定的日期
{
if(WebCalendar.objExport)
{
var returnValue;
var a = (arguments.length==0) ? WebCalendar.day[this.id.substr(8)].split(“/”) : arguments[0].split(“/”);
var d = WebCalendar.format.match(/^(\w{4})(-|\/)(\w{1,2})\2(\w{1,2})$/);
if(d==null){alert(“你设定的日期输出格式不对!\r\n\r\n请重新定义 WebCalendar.format !“); return false;}
var flag = d[3].length==2 || d[4].length==2; //判断返回的日期格式是否要补零
returnValue = flag ? a[2] +d[2]+ appendZero(a[1]) +d[2]+ appendZero(a[0]) : a[2] +d[2]+ a[1] +d[2]+ a[0];
if(WebCalendar.timeShow)
{
var h = new Date().getHours(), m = new Date().getMinutes(), s = new Date().getSeconds();
returnValue += flag ? ” “+ appendZero(h) +”:”+ appendZero(m) +”:”+ appendZero(s) : ” “+ h +”:”+ m +”:”+ s;
}
WebCalendar.objExport.innerHTML = returnValue;
hiddenCalendar();
}
}
使用这个自定义控件的raq文件和更新属性如下图所示:
发布上图的报表后,在对应的位置填写数据值,在下拉日历里面选择值,可以看到数据能够回写到单元格里,效果如下图所示:
点击提交按钮以后发现数据并没有被更新进数据库,见下图:
这时在自定义控件返回值处加上一句代码:WebCalendar.objExport.value = returnValue;,把返回值赋给单元格的值,此时返回值对应的js代码如下:
此时再次尝试更新更新如下图的数据:
更新以后可以看到此时显示的效果如下图,数据被更新进数据库了:
这样自定义控件在单元格可以显示,但是无法更新的问题就解决了,最核心的内容就是一定要把返回的值赋给单元格的value属性,不能自给单元格的显示属性,否则的话填报的时候是无法取得这个单元格的值的。