jQuery MiniUI

标题: datagrid 编辑问题 [打印本页]

作者: liangzhl    时间: 2013-9-27 14:51:57     标题: datagrid 编辑问题

即:我按新增,可以新增一行空的,我编辑这行空的后,鼠标点击其他地方,这行编辑状态结束,那么同时保存到后台数据库中。
同理,我在按新增,又新增一行空的,我编辑后,在点击其他地方,编辑状态结束,我后台保存这行数据。

请问该怎么实现?

作者: felt    时间: 2013-9-27 15:14:44

监听oncellendedit,结束编辑的时候调用一下保存。
http://www.miniui.com/demo/#src=tree/treeCRUD2.html
这是我们tree操作的实时保存,你参考一下。
作者: factory    时间: 2013-9-27 15:34:35

你的具体的编辑结束保存的依据条件是什么? 只要是编辑完一个单元格,就保存?
作者: liangzhl    时间: 2013-9-27 15:55:42

不是,要当前行编辑结束才保存的,编辑完当前行后,鼠标点击其他地方,其他行或者表格其他区域,那么当前行就自动编辑结束同时数据进行保存的,现在就是不知道

鼠标点击离开事件是哪个?即点击其他地方
作者: factory    时间: 2013-9-27 15:59:11

liangzhl 发表于 2013-9-27 15:55
不是,要当前行编辑结束才保存的,编辑完当前行后,鼠标点击其他地方,其他行或者表格其他区域,那么当前行 ...

当前行编辑数据? 是指行中的数据都被录入到吗?

单元格编辑完成事件是 oncellendedit
作者: liangzhl    时间: 2013-9-27 16:07:46

一行有很多列啊,那如果是编辑单元格的话,那我不是每个单元格编辑完,都要执行一次后台操作了?所以我想行编辑完后,在执行一次后台操作。


作者: liangzhl    时间: 2013-9-27 16:09:33

但是我不想加一列操作列,去执行 保存,更新,或者删除操作。

我想当你编辑完当前行后,鼠标点击其他地方,就自动进行后台操作了。


作者: factory    时间: 2013-9-27 16:13:26

liangzhl 发表于 2013-9-27 16:09
但是我不想加一列操作列,去执行 保存,更新,或者删除操作。

我想当你编辑完当前行后,鼠标点击其他地方 ...

那你还不如直接用行编辑呢
http://www.miniui.com/demo/#src=datagrid/rowedit.html
作者: liangzhl    时间: 2013-9-27 16:15:46

我知道啊,可是可以不多最前面那列操作么,换我说的方式,或者怎么实现?
作者: factory    时间: 2013-9-27 16:20:39

liangzhl 发表于 2013-9-27 16:15
我知道啊,可是可以不多最前面那列操作么,换我说的方式,或者怎么实现? ...

这个不好弄,你单元格的值能不能为空的? 如果不会为空的话就简单了
给单元格加上非空验证,每次结束编辑就验证一下表格,只要有空值,就不允许保存,都编辑完了,就执行保存

其他的办法不好处理,你的录入顺序又不固定,只能判断这行的字段全不全,并且字段的值有没有都赋到.要做肯定是可以做的,但是很麻烦
作者: liangzhl    时间: 2013-9-27 16:24:37

都不为空啊,我现在就想要怎么实现,才能在鼠标点击其他地方,结束当前行的编辑,同时执行后台操作呢?
作者: liangzhl    时间: 2013-9-27 16:25:58

你刚才说的tree时时数据操作,可以在这2个里面去处理onendedit="saveData" ondrop="saveData",那我datagrid应该在哪里处理?
作者: factory    时间: 2013-9-27 16:40:43

liangzhl 发表于 2013-9-27 16:25
你刚才说的tree时时数据操作,可以在这2个里面去处理onendedit="saveData" ondrop="saveData",那我datagri ...

那个不一样啊,tree显示到界面,你可编辑的,也就只有一个数据字段
但是表格一个行,你能有N个单元格.如何才算是这行编辑结束? 你要单元格结束编辑就保存是可以实现,就是监听oncellendedit.但是你要的是整行编辑完成,那这个编辑完成的标识如何判断? 哪个单元格编辑完成的时候,才算是整行编辑完成?才进行保存?
作者: liangzhl    时间: 2013-9-27 16:45:06

只要当我鼠标点击表格其他行或者表格其他空白地方,就表示行编辑结束,就进行数据处理。
作者: factory    时间: 2013-9-27 16:46:43

liangzhl 发表于 2013-9-27 16:45
只要当我鼠标点击表格其他行或者表格其他空白地方,就表示行编辑结束,就进行数据处理。 ...

那你就直接监听 oncellendedit好了,我以为你是要确保整行数据都需要录入完毕,然后才算是可以保存
在事件里面,执行保存方法
作者: liangzhl    时间: 2013-9-27 16:53:41

这个不好吧,我编辑每个单元格完后,都要去执行一次后台操作啊
作者: liangzhl    时间: 2013-9-27 16:54:27

就用刚说的那个好了,特麻烦,唉。
作者: factory    时间: 2013-9-27 17:02:06

liangzhl 发表于 2013-9-27 16:53
这个不好吧,我编辑每个单元格完后,都要去执行一次后台操作啊

只要当我鼠标点击表格其他行或者表格其他空白地方,就表示行编辑结束,就进行数据处理。

你要的是整行数据都录入完毕才进行数据处理吧,你这个判断条件没说清楚啊.
而且也不好判断,很麻烦,你新增一条数据,如果新增的时候是 var newRow = {};然后直接addRow()进去的话,
你要判断newRow的字段齐不齐,因为只有当编辑了,我们才会给数据增加字段,如果不进行编辑的话,getChanges()获取出来的 这行数据,除了一些我们加入的_index等这类内部字段外,其他你自己的字段是没有的.
作者: factory    时间: 2013-9-27 17:06:04

liangzhl 发表于 2013-9-27 16:54
就用刚说的那个好了,特麻烦,唉。

或者这样,你用个变量,这个变量里面放的是表格的字段.
每当你编辑完一个单元格,就把这个单元格对应的在这个变量里的字段设置一个值为true
最后判断下,当这个变量里的所有字段值都为true的时候,就进行保存
不然就不执行保存
作者: liangzhl    时间: 2013-9-27 17:16:29

哦,多谢。那看来还是刚说的那样好点。

现在有个问题,我里面比如有一列是 编码字段,文本框,我在这列的单元格里面输入 编码,完后,当我鼠标跳到后面那个单元格的话,就自动执行一个后台操作,去判断下数据库里面是否有存在一条跟当前输入的编码的数据,如果有的话,那么获取出来,自动填到后面那几列对应的字段里面去,如果没有的话,那么后面的那几列字段我自己输入。

这个有例子么
作者: niko    时间: 2013-9-28 10:06:22

grid.on("cellcommitedit", function(e){
   if(e.field == "对应列"){
      $.ajax({
          async: false, //最好同步执行
          success:  function(text){
             var obj = mini.decode(text);
             if(obj) grid.updateRow(e.record, obj); //将获取的数据更新到当前行,如果有的话
          }
      });
   }
});




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