找回密码
 立即注册

QQ登录

只需一步,快速开始

15959953549

注册会员

12

主题

33

帖子

123

积分

注册会员

积分
123

微信认证勋章

15959953549
注册会员   /  发表于:2019-7-22 08:59  /   查看:3995  /  回复:5
1金币
需求:某一列编辑结束时或粘贴结束时进行异步ajax请求(同步体验有点差)去后台拿取该行其他列的数据填充到itemsSource里,改了好几次代码发现表格看上去是填充上去了,但是一console.log(theGrid.itemsSource)就会发现值没有添加到数据源里,还请帮忙看看给个示例demo。
  1.         cellEditEnding: function (s, e) {
  2. var col = s.columns[e.col];
  3.             if (col.binding == 'MATERIALNO') {
  4.                 var value = wijmo.changeType(s.activeEditor.value, wijmo.DataType.Number, col.format);
  5.                 if(value){
  6.                     var item = s.rows[e.row].dataItem;
  7.                     item.MATERIALNO = value;
  8.                     var array = [item];
  9.                     $.nflgAjax({
  10.                         url: 'xxx',
  11.                         data: {
  12.                             data: JSON.stringify(array)
  13.                         },
  14.                         success: function (result) {
  15.                             if (result.status == 'error') {
  16.                                 layer.alert(data.message);
  17.                                 return false;
  18.                             }
  19.                             if (result.length > 0) {
  20.                                 s.rows[e.row].dataItem = result[0];
  21.                                 theGrid.refresh();
  22.                             }
  23.                         }
  24.                     });
  25.                 }
  26.             }
  27.         },
  28.         pastedCell: function (s, e) {
  29.             var col = s.columns[e.col];
  30.             if(col.binding == 'MATERIALNO'){
  31.                 var item = s.rows[e.row].dataItem;
  32.                 if(item.MATERIALNO){
  33.                     var array = [item];
  34.                     $.nflgAjax({
  35.                         url: 'xxx',
  36.                         data: {
  37.                             data: JSON.stringify(array)
  38.                         },
  39.                         success: function (result) {
  40.                             if (result.status == 'error') {
  41.                                 layer.alert(data.message);
  42.                                 return false;
  43.                             }
  44.                             if (result.length > 0) {
  45.                                 s.rows[e.row].dataItem = result[0];
  46.                                 theGrid.refresh();
  47.                                 console.log(theGrid.itemsSource);
  48.                             }
  49.                         }
  50.                     });
  51.                     e.cancel = true;
  52.                 }
  53.             }
  54.         }
复制代码


最佳答案

查看完整内容

您好,实际上您可能没注意到示例中的改动,由于Wijmo与数据源进行了绑定,那么实际上可以直接改动数据源即可, 请参考示例中的代码,代码如下,我加了注释:

评分

参与人数 1金币 +20 收起 理由
葡萄城三幺三 + 20 使用悬赏贴,得金币,望扩散给更多人

查看全部评分

5 个回复

倒序浏览
最佳答案
最佳答案
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-7-22 08:59:08
来自 4#
您好,实际上您可能没注意到示例中的改动,由于Wijmo与数据源进行了绑定,那么实际上可以直接改动数据源即可,

请参考示例中的代码,代码如下,我加了注释:

  1. cellEditEnding: function (s, e) {
  2.                 var col = s.columns[e.col];
  3.                 if (col.binding === 'xxx') {
  4.                     var value = wijmo.changeType(s.activeEditor.value, wijmo.DataType.Number, col.format);
  5.                     if(value){
  6.                         var item = s.rows[e.row].dataItem;
  7.                         item.xxx = value;
  8.                         setTimeout(function () {
  9.                             var sourceItem = {
  10.                                 id: 99,
  11.                                 country: countries[Math.floor(Math.random() * 5)],
  12.                                 sales: Math.random() * 100,
  13.                                 expenses: Math.random() * 50,
  14.                                 xxx: Math.random() * 50,
  15.                                 aaa: Math.random() * 50,
  16.                                 bbb: Math.random() * 50,
  17.                                 ccc: Math.random() * 50,
  18.                                 ddd: Math.random() * 50,
  19.                                 eee: Math.random() * 50,
  20.                                 yyy: Math.random() * 50,
  21.                                 uuu: Math.random() * 50,
  22.                                 iii: Math.random() * 50,
  23.                                 ooo: Math.random() * 50,
  24.                                 ppp: Math.random() * 50,
  25.                                 jjj: Math.random() * 50
  26.                             };
  27.                                                         // 更改数据源
  28.                             data[e.row] = sourceItem;
  29.                             //s.rows[e.row] = sourceItem;
  30.                             theGrid.collectionView.refresh();
  31.                         },20);
  32.                     }
  33.                 }
  34.             }
复制代码
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-7-22 16:45:02
2#
您好,改动某一项需要刷新collectionViews,请参考附件示例。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
15959953549
注册会员   /  发表于:2019-7-22 17:59:23
3#
本帖最后由 15959953549 于 2019-7-22 18:02 编辑

你好,这个我其实是知道的,我已经尝试过了 是不行的;数据展示里看是有,但是数据源里没有

  1.         cellEditEnding: function (s, e) {
  2.             //若有行新增物料号,则去请求sap接口获取采购组、实时库存、sap物料描述、是否冻结等信息
  3.             console.log(theGrid.itemsSource);
  4.             var col = s.columns[e.col];
  5.             if (col.binding == 'MATERIALNO') {
  6.                 var value = wijmo.changeType(s.activeEditor.value, wijmo.DataType.Number, col.format);
  7.                 if(value){
  8.                     var item = s.rows[e.row].dataItem;
  9.                     item.MATERIALNO = value;
  10.                     var array = [item];
  11.                     $.nflgAjax({
  12.                         url: 'outsourcing_parts!requestSap.action',
  13.                         data: {
  14.                             data: JSON.stringify(array)
  15.                         },
  16.                         success: function (result) {
  17.                             if (result.status == 'error') {
  18.                                 layer.alert(data.message);
  19.                                 return false;
  20.                             }
  21.                             if (result.length > 0) {
  22.                                 s.rows[e.row].dataItem = result[0];
  23.                                 theGrid.collectionView.refresh();
  24.                                 theGrid.refresh();
  25.                             }
  26.                         }
  27.                     });
  28.                 }
  29.             }
  30.         },
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
15959953549
注册会员   /  发表于:2019-7-23 09:53:04
5#
您好,感谢您的回答,我早上又看了下示例,把s.rows[e.row] = result[0];;这句话换成
                                theGrid.itemsSource[e.row] = result[0];
之后就可以了,感谢您的回答,问题已解决
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-7-23 10:58:57
6#
不客气,很高兴解决了您的问题,本贴我结帖了,有新的问题欢迎发新帖交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部