如何实现父表填报时,从子表查询出的数据返回到主表的相应行

各位大神,实现从主表数据行点参照按钮,在出现的子表中查询所需数据,点确定按钮后将所选行的编码返回到主表所点参照按钮的相应行的编码中。

主表:

子表

我在子表的确定按钮增加了如下代码:

var form=window.parent.contentPane;
form.setCellValue(0,1,inv);//这里如何修改为在主表所点参照按钮所在的行及其存货编码的所在列?
window.parent.FR.closeDialog();
window.parent.FR.destroyDialog();

请大神们帮忙,谢谢!

FineReport Jorger 发布于 2019-2-25 09:40
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
4
孤陌Lv6资深互助
发布于2019-2-25 10:27(编辑于 2019-2-25 11:16)



楼主解决了没有,我可以出手吗? 

这样的效果??

if (window.checkboxes) {

var pCode = [];// 创建数组,用于记录被选中行的产品ID

var pName = [];// 创建数组,用于记录被选中行的产品名称

var pValue = [];// 创建数组,用于记录被选中行的单价

var pCnt = [];// 创建数组,用于记录被选中行的数量

var parentLocation = parent.window.pLocation;// 获得父页面产品代码文本框控件里赋值的window.pLocation

var col = FR.cellStr2ColumnRow(parentLocation).col;

var row = FR.cellStr2ColumnRow(parentLocation).row;// FR.cellStr2ColumnRow是帆软现有的方法,用途是把形如A1这样的单元格号转换成形如{col:0,row:0}这样的对象,这里把对象的col、row属性值分别赋予变量col、row,便于定位父页面的单元格,回填数据

for (var i = 0; i < checkboxes.length; i++) { // 循环遍历复选框对象数组checkboxes

var checked = checkboxes[i].selected();// selected()是帆软现有的方法,判断是否被选中

if (checked) {

var cr = FR

.cellStr2ColumnRow(window.checkboxes[i].options.location);

pCode.push(contentPane.getCellValue(cr.col + 2, cr.row));// 如果当前行复选框被选中,则把列号+2,获取该行产品ID的值,添加到数组pCode的尾部

pName.push(contentPane.getCellValue(cr.col + 3, cr.row));// 如果当前行复选框被选中,则把列号+2,获取该行产品ID的值,添加到数组pCode的尾部

pValue.push(contentPane.getCellValue(cr.col + 4, cr.row));// 如果当前行复选框被选中,则把列号+2,获取该行产品ID的值,添加到数组pCode的尾部

pCnt.push(contentPane.getCellValue(cr.col + 5, cr.row));// 如果当前行复选框被选中,则把列号+2,获取该行产品ID的值,添加到数组pCode的尾部

}

}

parent.contentPane

.appendReportRC(pCode.length - 1, parent.window.pLocation);// appendReportRC(插入行数,单元格号)是帆软现有方法,功能是插入行。parent.contentPane.appendReportRC就是向父页面插入行。由于父页面A5已经有一行了,这里就需要把选中复选框的个数pCode.length减去1


setTimeout(function() {// 延时100毫秒,由于父页面插入行有一个页面重载的过程,需要加延等父页面重载完成后,再对父页面回填数据。具体延时多少毫秒,依据父页面复杂程度适当调整

for (var i = 0; i < pCode.length; i++) {

var cellStr = FR.columnRow2CellStr({

col : col,

row : row + i

});// columnRow2CellStr是帆软现有方法,作用是把形如{col:0,row:0}的对象转成形如A1这样的单元格号

parent.contentPane.setCellValue(cellStr, null, pCode[i]); // 循环遍历pCode数组,把数组元素回填父页面相应的单元格

}

for (var i = 0; i < pName.length; i++) {

var cellStr = FR.columnRow2CellStr({

col : col+1,

row : row + i

});// columnRow2CellStr是帆软现有方法,作用是把形如{col:0,row:0}的对象转成形如A1这样的单元格号

parent.contentPane.setCellValue(cellStr, null, pName[i]); // 循环遍历pCode数组,把数组元素回填父页面相应的单元格

}

for (var i = 0; i < pValue.length; i++) {

var cellStr = FR.columnRow2CellStr({

col : col+2,

row : row + i

});// columnRow2CellStr是帆软现有方法,作用是把形如{col:0,row:0}的对象转成形如A1这样的单元格号

parent.contentPane.setCellValue(cellStr, null, pValue[i]); // 循环遍历pCode数组,把数组元素回填父页面相应的单元格

}

for (var i = 0; i < pCnt.length; i++) {

var cellStr = FR.columnRow2CellStr({

col : col+3,

row : row + i

});// columnRow2CellStr是帆软现有方法,作用是把形如{col:0,row:0}的对象转成形如A1这样的单元格号

parent.contentPane.setCellValue(cellStr, null, pCnt[i]); // 循环遍历pCode数组,把数组元素回填父页面相应的单元格

}

parent.FR.closeDialog();

parent.FR.destroyDialog();// 调用父页面的closeDialog和destroyDialog关闭销毁本子页面

}, 500);


}

112.gif

最佳回答
0
promiseykl1988Lv7初级互助
发布于2019-2-25 09:55(编辑于 2019-2-25 10:01)

var location = this.options.location;  //获取当前控件的位置

var cr = FR.cellStr2ColumnRow(location);

var col = cr.col;  //列号

var ro = cr.row;  //行号

var vls = contentPane.getWidgetByCell(FR.columnRow2CellStr({col: col-6, row: ro}));

var form = window.parent.contentPane; //拿取当前页面的父窗口(即获取填报界面)

//form.setCellValue(0,1,zybck); //给文本控件的单元格(D10)赋值val,0代表第一列,1代表第2行  

form.setCellValue(cols-1,rows,vls.getValue()); 

//给文本控件的单元格(D10)赋值val,0代表第一列,1代表第2行  

window.parent.FR.closeDialog(); //确定获取值后,关闭取消父窗口的对话框  

window.parent.FR.destroyDialog();


根据自己的需求自行修改。


cols-1,rows因为我父页面是动态行。所以这2个参数是从主页面传过来的$cols $rows

  • monvzhilei monvzhilei 这个如何多选,需要拼接一下吗?
    2019-02-25 10:18 
  • promiseykl1988 promiseykl1988 回复 monvzhilei 多选 就要选获取选中的值。传过去,就像批量打印一样。。
    2019-02-25 10:20 
  • Jorger Jorger(提问者) 回复 promiseykl1988 你好,可能是我没描述清楚,您的这个方法应该是获取当前子表选中的行相应列的值赋予主表,但是我现在的问题是子表选中的值如何传给主表动态行的相应单元格,也就是您说的 ”主页面传过来的$cols $rows”,我就是不会怎么获取主页面传过来的这两个参数,或者说是怎么传递?
    2019-02-25 10:26 
  • promiseykl1988 promiseykl1988 回复 Jorger(提问者) 点链接的时候获取到当前ROW()和列传过来。。。
    2019-02-25 10:29 
  • 11关注人数
  • 1269浏览人数
  • 最后回答于:2019-2-25 11:16
    请选择关闭问题的原因
    确定 取消
    返回顶部