润乾报表 行式填报表如何实现批量删除效果

在润乾报表的行式填报表中允许用户删除页面端数据,从而点击保存后能将数据库中对应的数据删除,在默认情况下,删除按钮位于报表的上方或下方,如果页面数据过多,删除时要一次一次来点太不方便,如果数据前方能生成复选框,先用鼠标选中需要删除数据的复选框,最后点击一次删除能将选择的数据都删除,这样能大大提高工作效率,那如何实现批量删除效果呢?

解决方案:
报表中插入一列,然后使用复选框编辑风格,在展现报表的jsp中定义js实现批量删除和全选效果,具体实现如下:
1.报表设计制作数据处理脚本,设计单元格字段名称等配置(此部分可以参考填报表教程)
因为要生成复选框,所以第一列要空出一列,并将填报的编辑风格设置成复选框,如下图:
 
2.jsp配置(自定义js实现批量删除和全选效果)
此处是在工具栏中进行修改配置,即修改的是inputtoolbar.jsp

全选示例代码:

function selcheck(groupId, sheetIndex, cellName) {
  var objs = _lookupCells( groupId + sheetIndex + "_" + cellName );
var cbk = document.getElementById("box");
   //alert(cbk.checked);
  for(var i=0; i<objs.length; i++) {
          if(cbk.checked){
          objs[i].setAttribute( "value" ,"1") ;
   objs[i].childNodes[0].checked = true;
          }
          else{
                  objs[i].setAttribute( "value" ,"0") ;
   objs[i].childNodes[0].checked = false;
          }
  }


批量删除部分主要代码如下:
function batchDeleteRows( groupId, sheetIndex, cellName ) {
        var cells = _lookupCells( groupId + sheetIndex + "_" + cellName );
                //alert(cells);
        var table = document.getElementById( groupId + sheetIndex );
        var last = 0;
        var length = cells.length;
        var afterLength = length;
        table.currCell = cells[0];//首个删除定位
        for( var i = 0; i < length; i++ ) {
                var cell = cells[i];
                table.currCell = cell;
                if( cell.getAttribute( "value" ) == "1" ) {  //复选框被勾选了,删除此行
                        _deleteRow( groupId );
                        last = i; //记录最后一个删除的,插入的时候从这里插入
                        afterLength--;
                }
        }
        if(last >= afterLength){ //如果删的最后一个的序号大于删完的长度,那么要找到删完的最后一个
                table.currCell = cells[afterLength - 1];
        }//否则
        else table.currCell = cells[last + 1];//cells集合没变,已知last删除了,找last的下一行
    }
假如填报表第一个sheet中的A5是复选框单元格,那么调用
batchDeleteRows( "<%=sgid%>", 0, "A5" );


效果如下图所示:
 
 

猜你喜欢

转载自blog.csdn.net/xiaohuihui_1992/article/details/81673965