一、背景需求
在优化填报录入流程时,我们考虑到了用户界面的友好性和操作的便捷性。原先,增加和删除记录的操作是通过点击按钮来实现的,这种逐一处理的方式在面对大量数据时显得既不高效也不美观。为了提升用户体验,我们引入了勾选行进行批量删除的功能。
现在,用户只需简单地勾选想要删除的记录行,然后点击一次删除按钮,就能一次性完成多条记录的删除操作。这种方式不仅极大地提高了工作效率,还使得整个操作界面更加整洁、直观。
二、实现步骤
1.增加控件
- 在A2、A3单元格加入复选框按钮控件,将A3单元格左父格设置为C3(此处的目的为复选框跟随数据行扩展)
- 在A4单元格加入按钮控件
- 在B4单元格加入按钮控件,类型为插入一行,指定单元格为C3
2.添加事件
在A2单元格控件添加事件初始化后和改变状态,js代码如下
初始化后——其中_g().setCellValue(0, 0, 1, isAllChecked);根据页签和单元格位置自行修改
setTimeout(function() {
var isAllChecked = true;
//设置标记状态为选中
var boxes = _g().getWidgetsByName("box");
//获取当前页的复选按钮控件数组
if (typeof(boxes[0]) != "undefined") {
for (i = 0; i < boxes.length; i++) {
isAllChecked = boxes[i].getValue() == true ? isAllChecked : false;
//如果控件大于1个,则遍历获取值,一旦出现未选中状态的按钮,则将标记值改为false
}
} else {
isAllChecked = boxes.getValue();
//如果控件只有1个,则直接获取控件值,并传给标记值
}
_g().setCellValue(0, 0, 1, isAllChecked);
//将标记值赋给A2单元格
}, 50)
改变状态——其中_g().setCellValue(0,cr.col,cr.row,flag);根据页签和单元格位置自行修改
var flag = this.getValue();
//获取当前值
var boxes = _g().getWidgetsByName("box");
//获取当前页的复选按钮控件数组
if (typeof(boxes[0]) != "undefined") {
for (i = 0; i < boxes.length; i++) {
var cr=FR.cellStr2ColumnRow(boxes[i].options.location);
//获取行列号对象
_g().setCellValue(0,cr.col,cr.row,flag);
//如果控件大于1个,则遍历赋值
}
} else {
var cr=FR.cellStr2ColumnRow(boxes.options.location);
//获取行列号对象
_g().setCellValue(0,cr.col,cr.row,flag);
//如果控件只有1个,则直接赋值
}
在A3单元格控件添加事件改变状态
var isAllChecked = true;
//设置标记状态为选中
var boxes = _g().getWidgetsByName("box");
//获取当前页的复选按钮控件数组
if (typeof(boxes[0]) != "undefined") {
for (i = 0; i < boxes.length; i++) {
isAllChecked = boxes[i].getValue() == true ? isAllChecked : false;
//如果控件大于1个,则遍历获取值,一旦出现未选中状态的按钮,则将标记值改为false
}
} else {
isAllChecked = boxes.getValue();
//如果控件只有1个,则直接获取控件值,并传给标记值
}
_g().setCellValue(0, 0, 1, isAllChecked);
//将标记值赋给A2单元格
在A4单元格添加事件点击
var boxes = _g().getWidgetsByName("box");
//获取当前页的复选按钮控件数组
var cells = [];
if (typeof(boxes[0]) != "undefined") {
for (i = 0; i < boxes.length; i++) {
if (boxes[i].selected()) {
cells.push(boxes[i].options.location); //如果控件大于1个,则遍历判断是否选中,将选中的控件所在的单元格编号塞进数组中
}
}
} else {
if (boxes.selected()) {
cells.push(boxes.options.location);
//如果控件只有1个,则直接判断是否选中,选中的话把单元格编号塞进数组中
}
}
_g().deleteRows(cells);
//根据单元格编号删除行
//_g().verifyAndWriteReport(true);
//执行校验提交所有sheet,如有删除行时直接提交的需求,可以启用该句