jQuery MiniUI

标题: onDrawSummaryCell循环赋值问题 [打印本页]

作者: jinjisong    时间: 2017-8-17 09:29:57     标题: onDrawSummaryCell循环赋值问题

我想实现的效果是,行与行之间数值相加的结果赋值到指定行中
问题在图中,还请各位帮忙看看,感谢了~
[attach]9723[/attach]



作者: jinjisong    时间: 2017-8-17 09:51:13

问题找到了,原来是字符串的问题,转成字符串就好了,xxx.toString()
作者: dforce    时间: 2017-8-17 10:17:08

jinjisong 发表于 2017-8-17 09:51
问题找到了,原来是字符串的问题,转成字符串就好了,xxx.toString()

1楼的问题里看不出你的处理代码,这里问题最好提供一点代码来分析。
作者: jinjisong    时间: 2017-8-17 11:00:59

dforce 发表于 2017-8-17 10:17
1楼的问题里看不出你的处理代码,这里问题最好提供一点代码来分析。
  1. function onDrawSummaryCell (e) {
  2.             var record = e.record;
  3.             var result = e.result;
  4.             var grid = e.sender;
  5.             var field = e.field, value = e.value;
  6.             var rows = e.data;
  7.             if (e.field == "cus") {
  8.                 var total = 0;
  9.                 for (var i = 0, l = rows.length; i < l; i++) {
  10.                     var row = rows[i];
  11.                     var t = row.cus;
  12.             //这段是找出了指定两行数据
  13.                     if (row.ruleid == "sfppt") {
  14.                         var top = row.cus;
  15.                     }
  16.                     if (row.ruleid == "sfppb") {
  17.                         var bottom = row.cus;
  18.                     }
  19.                     var ratio = parseFloat(bottom)+parseFloat(top);
  20.             //下面是我想将上面两个行数据进行相加,然后更新到指定行中的数据,但是下面的出了问题,数据可以更新,但是前段没有显示,只能点击才能看到
  21.                     if (row.ruleid == "sfrpb") {
  22.                         row.cus = ratio.toString();
  23.                         row.scc = row.cus;
  24.                         row.scc_display = row.cus;
  25.                         row._state = "modified";
  26.                         row.text = ratio.toString();
  27.                         var row = grid.getSelected();
  28.                         grid.updateRow(row, {
  29.                             manager: data.id,
  30.                             manager_name: data.name
  31.                         });
  32.                     }
  33.                     console.log(row)
  34.                 }
  35.             }
  36.         }
复制代码

作者: jinjisong    时间: 2017-8-17 11:02:11

dforce 发表于 2017-8-17 10:17
1楼的问题里看不出你的处理代码,这里问题最好提供一点代码来分析。

刚刚我以为是字符串转换问题,但不是。。。。我现在用了grid.updateRow,不知道能不能实现
作者: qsw    时间: 2017-8-17 11:12:27

jinjisong 发表于 2017-8-17 11:02
刚刚我以为是字符串转换问题,但不是。。。。我现在用了grid.updateRow,不知道能不能实现 ...

if (row.ruleid == "sfppt") {
                        var top = row.cus;
                    }
                    if (row.ruleid == "sfppb") {
                        var bottom = row.cus;
                    }
                    var ratio = parseFloat(bottom)+parseFloat(top);
这样能获取top 、bottom ?它们在if里定义,外面取不到吧!
作者: dforce    时间: 2017-8-17 11:16:41

jinjisong 发表于 2017-8-17 11:02
刚刚我以为是字符串转换问题,但不是。。。。我现在用了grid.updateRow,不知道能不能实现 ...

为什么要在这里处理
我建议在ondrawcell事件里绘制
grid.on("drawcell",function(e){
    var record=e.record;
    var field=e.field;
    if(field=="cus"){
        if(record.ruleid=="sfrp"){
               var top=grid.findRow(function(row){
                         if(row.ruleid=="sfpt") return true;
                }).cus;
                 var bottom=grid.findRow(function(row){
                         if(row.ruleid=="sfppb") return true;
                }).cus;
                var ratio = parseFloat(bottom)+parseFloat(top);
                e.cellHtml=ratio ;
                e.record.cus=   ratio ;
        }
    }
})
作者: jinjisong    时间: 2017-8-17 11:17:04

qsw 发表于 2017-8-17 11:12
if (row.ruleid == "sfppt") {
                        var top = row.cus;
                    }

我是通过for循环出来指定的那两条数据,然后相加, 在通过循环,插入多指定的行中
作者: qsw    时间: 2017-8-17 11:19:00

qsw 发表于 2017-8-17 11:12
if (row.ruleid == "sfppt") {
                        var top = row.cus;
                    }

还有onDrawSummaryCell方法里好像不能用grid.updateRow,会报错
作者: jinjisong    时间: 2017-8-17 12:56:54

dforce 发表于 2017-8-17 11:16
为什么要在这里处理
我建议在ondrawcell事件里绘制
grid.on("drawcell",function(e){

好精简的语法,感谢了。
不过这样的话,不能够联动的写入在sfppb栏位里
作者: jinjisong    时间: 2017-8-17 13:53:05

dforce 发表于 2017-8-17 11:16
为什么要在这里处理
我建议在ondrawcell事件里绘制
grid.on("drawcell",function(e){

可不可以即时更新列里面某一内容呢?
作者: dforce    时间: 2017-8-17 14:39:00

jinjisong 发表于 2017-8-17 12:56
好精简的语法,感谢了。
不过这样的话,不能够联动的写入在sfppb栏位里 ...

因为更新的时候只会重绘本行,你这是跨行的需要主动来更新指定行。
grid.on("cellcommitedit",function(e){
     var row=e.record;
     if(row.ruleid=="sfpt"||row.ruleid=="sfppb"){
          var targetRow=grid.findRow(function(row){
                         if(row.ruleid=="sfrp") return true;
                });
           setTimeout(function(){
                       grid.updateRow(targetRow);
                   },100)
     }
})
作者: jinjisong    时间: 2017-8-17 15:10:30

dforce 发表于 2017-8-17 14:39
因为更新的时候只会重绘本行,你这是跨行的需要主动来更新指定行。
grid.on("cellcommitedit",function(e ...

太感谢了!!!!
作者: jinjisong    时间: 2017-8-17 15:27:54

dforce 发表于 2017-8-17 14:39
因为更新的时候只会重绘本行,你这是跨行的需要主动来更新指定行。
grid.on("cellcommitedit",function(e ...

  已经完全解决这个问题了,感谢了~~




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2