行式填报表如何复制选中行的数据
在行式填报表中,有插入,添加,删除数据的功能。有些时候客户希望点击“插入”或者“添加”按钮时,能复制选中行的数据。
下面我们一起来看一下如何实现这种效果:
首先设置一张行式填报表,设置其更新属性及单元格的可写属性为“可写”。
然后右键单击A3单元格,选择“填报属性”,在其流水号中写:getUuid(),注意:这里并不需要设置流水号。
然后一个发布报表的JSP,在该JSP中增加几个自定义按钮,如下图:
其中_insertRow123(report1)和_appendRow123(report1)是我重写了一下report4.jar中已经封装好了的名为_insertRow(report1)和_appendRoe(report1)的js函数,如下图:
(我这里只是重新命名了一下,其余的都没变)
<script language=”javascript”>
function _insertRow123(table){
alert(‘插入行‘);//这句可要可不要
if( !_submitEditor( table ) ) return;
if( table.currCell == null ) {
alert( __UU );
return;
}
var row = table.currCell.parentElement;
if( !row.isDetail ) {
alert( __VV );
return;
}
var index = row.rowIndex;
while( !row.isFirst ) {
index–;
row = table.rows[ index ];
}
_copyRows( table, row, index );
_calcRowNoInGroup( table, row );
}
function _appendRow123(report1){
alert(“追加行“);//这句可要可不要
if( !table.isImport ) {
if( !_submitEditor( table ) ) return -1;
}
var index = -1;
if( table.appendIndex == null || table.appendIndex < 0 ) {
if( table.currCell == null ) {
alert( __WW );
return -1;
}
var row = table.currCell.parentElement;
if( !row.isDetail ) {
alert( __XX );
return -1;
}
index = row.rowIndex;
while( !row.isFirst ) {
index–;
row = table.rows[ index ];
}
table.baseRow = row; //要复制的记录的首行
var srcCell = row.cells[0].sc;
while( true ) {
index++;
var r = table.rows[ index ];
if( r == null ) {
index = -1;
break;
}
if( !r.isDetail ) break;
if( r.isFirst && r.cells[0].sc != srcCell ) break;
}
if( table.isImport ) table.appendIndex = index;
}
else index = table.appendIndex;
var rowno = _copyRows( table, table.baseRow, index );
if( table.isImport ) {
table.appendIndex = rowno + parseInt( table.baseRow.drows );
}
_calcRowNoInGroup( table, table.baseRow );
return rowno;
}
</script>
当点击“插入行”之后,报表会自动复制所选中行的数据,如下图:
说明:插入行是选中行的下一行进行复制,追加行是在报表的最后一行复制所选中行的数据。