润乾报表下拉数据集显示值真实值同步更新
背景描述
润乾填报表提供的下拉数据集需要选定真实值,显示值,在数据提交时向数据库更新真实值。现客户要求下拉数据集显示值和真实值同时更新到数据库中。
分析
对于该需求可以考虑两种实现思路:1写自定义更新类,更新数据集中的显示值和真实值;2通过js在其他格子中回填显示值,更新将该格子与显示值字段对应上。后者好处在于通过js控制比较灵活,本文也将介绍这种实现方式,主要介绍回显部分的实现。
带有下拉数据集的报表发布后,查看页面源文件可以清晰的看到润乾下拉数据集存储在扩展首格TD的editConfig属性中,如:<td id=”report1_C2″ colNo=3 ddEdit=0 ddNew=0 isMulti=0 canEmpty=0 modifiable=true writable=true editStyle=”3″ inputDataType=”1″ editConfig=”0,中国;102,彬洲;11,福建;111,厦门;12,广东;121,肇庆; 10,湖南” updatable=true value=’10′ onclick=”_displayEditor()”>湖南</td>
那就可以根据首格中下拉数据集的内容,通过js获取相应的显示值内容回填到报表单元格中。
实现步骤
1 报表中增加一列,显示行号,以方便获取当前单元格ID;
2 在D2的自动计算中调用该函数
autoWrite2函数内容:
<script type=”text/javascript”>
function autoWrite2(col,rowNum,startRow,cell){//col-列号,rowNum-行号,startRow-初始行号,cell-单元格
var value = document.getElementById(“report1_”+col+rowNum).value;
var list = document.getElementById(“report1_”+col+startRow).editConfig;//获取下拉数据集内容,注意这个内容只有在扩展首格中存储
var array = list.split(“;”);
for(var i=0;i<array.length;i++){//分号分隔每对(真实值,显示值)
if(array[i].indexOf(value)!=-1){
return array[i].split(“,”)[1];//返回显示值
}
}
return “”;
}
</script>