jQuery MiniUI

标题: 为什么DataGrid通过getChanges方法获取更改的数据总少一条 [打印本页]

作者: benkey    时间: 2014-4-8 14:59:40     标题: 为什么DataGrid通过getChanges方法获取更改的数据总少一条

现象如下,我修改了这个DataGrid三条数据,在捕捉调试是只看到两条修改的数据,如图:[attach]4255[/attach]


为什么DataGrid通过getChanges总少一条?当修改一条的时候,总是获取不到修改的数据。请问这是什么问题?
作者: benkey    时间: 2014-4-8 15:06:09

代码如下:
  1. function SavePlan() {
  2.         form.validate();
  3.         if (form.isValid() == false) return;

  4.         grid.validate();
  5.         if (grid.isValid() == false) {
  6.             var error = grid.getCellErrors()[0];
  7.             grid.beginEditCell(error.record, error.column);
  8.             return;
  9.         }

  10.         debugger;
  11.         var planData = form.getData();
  12.         var paraChanges = grid.getChanges();

  13.         grid.loading("保存中,请稍后......");
  14.         $.ajax({
  15.             type: "post",
  16.             url: "@Url.Action("SaveOrUpdatePlan")",
  17.                 data: mini.encode({ plan: planData, parameters: paraChanges }),
  18.                 contentType: 'application/json',
  19.                 success: function (text) {
  20.                     if (text.ErrorCode == "00") {
  21.                         CloseWindow("save");
  22.                     } else {
  23.                         var msg = mini.decode(text);
  24.                         showOperationResult(msg);
  25.                     }
  26.                 },
  27.                 error: function () {
  28.                     CloseWindow();
  29.                 }
  30.             });

  31.         }
复制代码
HTML代码:
  1. <div class="mini-fit">
  2.                 <div id="dgTaskParameter" class="mini-datagrid" style="width: 100%; height: 100%;"
  3.                          url="@Url.Action("GetParameterByPlan")" idfield="Id"
  4.                          allowcelledit="true" allowcellselect="true" multiselect="true" allowcellvalid="true"
  5.                          allowCellValid="true" oncellvalidation="onCellValidation"
  6.                          emptyText="数据为空,<a href='javascript:addRow()'>增加一条</a>" showEmptyText="true"
  7.                          borderstyle="border:0;">
  8.                     <div property="columns">
  9.                         <div field="ParamName" headeralign="center" width="auto" name="ParamName">
  10.                             名称
  11.                                 <input property="editor" class="mini-textbox" width="auto" />
  12.                         </div>
  13.                         <div field="ParamValue" headeralign="center" width="auto" name="ParamValue">
  14.                             参数值
  15.                                 <input property="editor" class="mini-textbox" style="width: 100%;" />
  16.                         </div>
  17.                         <div type="checkboxcolumn" field="IsRequired" truevalue="1" falsevalue="0" headeralign="center" width="auto" name="IsRequired">是否必填</div>
  18.                         <div field="Des" headeralign="center" width="auto" name="Des">
  19.                             说明
  20.                                 <input property="editor" class="mini-textarea" style="width: 100%;" minheight="80" />
  21.                         </div>
  22.                         <div name="action" headeralign="center" align="center" renderer="onActionRenderer" cellstyle="padding:0;" width="auto">#</div>
  23.                     </div>
  24.                 </div>
  25.             </div>
复制代码

作者: felt    时间: 2014-4-8 15:15:38

benkey 发表于 2014-4-8 15:06
代码如下:HTML代码:

你确定222这个单元格有修改吗?
你把这个单元格失去焦点再SavePlan看看
作者: benkey    时间: 2014-4-8 15:17:20

felt 发表于 2014-4-8 15:15
你确定222这个单元格有修改吗?
你把这个单元格失去焦点再SavePlan看看

是更改过的,原来是22。
作者: felt    时间: 2014-4-8 15:50:22

benkey 发表于 2014-4-8 15:17
是更改过的,原来是22。

你失去焦点的时候那个格子有红色小三角吗?
本地测试没发现你说的问题,能做一个重现的简单html页面,包括数据上传上来
作者: benkey    时间: 2014-4-8 16:01:18

felt 发表于 2014-4-8 15:50
你失去焦点的时候那个格子有红色小三角吗?
本地测试没发现你说的问题,能做一个重现的简单html页面,包 ...

是的,应该是一个未失去焦点,可是在单击按钮的时候,Grid的单元格应该就失去了焦点才是啊。

这个现象在IE8上存在这个问题,其他浏览器未出现这个问题。

那现在的问题是:我怎么在单击按钮的时候,失去单元格焦点呢?
作者: factory    时间: 2014-4-8 16:02:44

benkey 发表于 2014-4-8 15:17
是更改过的,原来是22。

你贴的代码,我没法运行,只能用我本地的数据,发现没有问题

而且你的代码也不全面,不知道你的验证是什么处理的

你最好这样,数据用几条静态的,然后可以运行,并且重现问题之后,把页面上传上来
作者: benkey    时间: 2014-4-8 18:24:34

factory 发表于 2014-4-8 16:02
你贴的代码,我没法运行,只能用我本地的数据,发现没有问题

而且你的代码也不全面,不知道你的验证是什么处 ...

你可以多尝试下你们官方给出的例子,也有这个问题。有时可以取到,有时取不到,多试几次,就出现和我一样的现象。

测试环境:IE8

官方例子:http://www.miniui.com/demo/#src=datagrid/celledit.html
[attach]4263[/attach]

作者: felt    时间: 2014-4-9 09:44:38

benkey 发表于 2014-4-8 18:24
你可以多尝试下你们官方给出的例子,也有这个问题。有时可以取到,有时取不到,多试几次,就出现和我一样 ...

你截的图对选中数据有何修改??
作者: benkey    时间: 2014-4-9 10:42:49

felt 发表于 2014-4-9 09:44
你截的图对选中数据有何修改??

1、进入这个网址:http://www.miniui.com/demo/#src=datagrid/celledit.html
2、在CellEdit 单元格编辑的Grid选择第一条数据的备注,起始为空,修改数据为wwww
3、修改备注数据为wwww后,不要单击其他任何地方,直接单击保存
4、查看保存结果,虽然提示成功,但数据还是原来的。

有时能保存成功,有时不能。
IE8下存在这样的现象。
作者: felt    时间: 2014-4-9 10:54:15

benkey 发表于 2014-4-9 10:42
1、进入这个网址:http://www.miniui.com/demo/#src=datagrid/celledit.html
2、在CellEdit 单元格编辑的 ...

保存的时候,先强制结束编辑,grid.commitEdit()一下
作者: q123126    时间: 2014-4-9 17:39:37

benkey 发表于 2014-4-9 10:42
1、进入这个网址:http://www.miniui.com/demo/#src=datagrid/celledit.html
2、在CellEdit 单元格编辑的 ...

测试确实有这个问题。
作者: benkey    时间: 2014-4-11 11:08:20

felt 发表于 2014-4-9 10:54
保存的时候,先强制结束编辑,grid.commitEdit()一下

谢谢,测试此方法可行。




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