Jquery 在jqGrid中,可以一次内联编辑多行,然后执行一次提交吗?

Jquery 在jqGrid中,可以一次内联编辑多行,然后执行一次提交吗?,jquery,jqgrid,edit,Jquery,Jqgrid,Edit,我们正在使用jqGrid的jQuery('#grid').editRow()功能,它允许您内联编辑行中的字段 jqGrid是否支持一次内联编辑多行,我可以对多行进行更改,然后一次提交所有行 我们试图避免对每一行逐一进行更改,并对服务器进行单独的“往返”以每次提交,因为我们希望批量编辑多个记录的多个字段并进行单个“提交”。jqGrid没有实现多行的内联编辑。您可以使用本地编辑并手动将所有更改发布到服务器,但您必须自己实现所有更改的提交 我个人不会在我的项目中实施这种行为。原因是我认为web站点应该

我们正在使用jqGrid的
jQuery('#grid').editRow()
功能,它允许您内联编辑行中的字段

jqGrid是否支持一次内联编辑多行,我可以对多行进行更改,然后一次提交所有行


我们试图避免对每一行逐一进行更改,并对服务器进行单独的“往返”以每次提交,因为我们希望批量编辑多个记录的多个字段并进行单个“提交”。

jqGrid没有实现多行的内联编辑。您可以使用本地编辑并手动将所有更改发布到服务器,但您必须自己实现所有更改的提交

我个人不会在我的项目中实施这种行为。原因是我认为web站点应该始终支持并发(乐观并发最有意义)。如果一个人试图将更改提交给服务器,服务器可能会出现并发错误:其他人已经修改了数据。在这种情况下,应刷新网格数据并重复对行的编辑。我看到了在使用乐观并发的情况下实现多行编辑的问题。错误消息是什么样子的?如果更改了许多行,错误消息应该是什么样子?如果出现错误,用户应该怎么做?他/她是否应该重复数据的全部更改?从用户的角度来看,好处在哪里


在我所拥有的所有jqGrid实现中,几乎都会立即提交一行的编辑。因此,我认为没有必要在项目中同时执行多行。在并发错误的情况下,用户的缺点更大,因为“往返”减少带来了好处。由于与服务器的连接非常好,因此在我的客户的环境中,数据的发送不是问题。

在最初的JQGrid实现中,多行的内联编辑是不可能的。原始实现所做的是,您编辑并失去焦点的每一行都将被提交

相反,创建如下自定义实现: 1.覆盖(扩展)现有grid.inline.js并编写自己的编辑行和保存行。 2.在“编辑行”功能中,配置为添加要单独收集的脏行(已编辑)。 3.在“保存行”功能中,只能向服务器提交脏行

为了防止相同数据的并发更新,您可以通过以下任一方式使用版本控制机制: 1.为所有行设置一个版本字段(隐藏)。当一行变脏时,增加版本字段。 2.提交行时,检查现有版本号和新版本号。如果存在不匹配,请告知用户/更新现有的。(这一点,您可以很容易地实现)


就这样!希望这是有用的!:-)

我对jqGrid不太了解,但是我做了一个简单的测试(我可能遗漏了一些东西):

  • 转到jqGrid演示页面
  • 加载道路编辑/基本示例页面
  • 手动运行此代码:

    jQuery("#rowed1").jqGrid('editRow', '11');
    jQuery("#rowed1").jqGrid('editRow', '12');
    jQuery("#rowed1").jqGrid('editRow', '13')
    
    jQuery("#rowed1").jqGrid('saveRow', '11');
    jQuery("#rowed1").jqGrid('saveRow', '12');
    jQuery("#rowed1").jqGrid('saveRow', '13');
    
  • 编辑三行

  • 手动运行此代码:

    jQuery("#rowed1").jqGrid('editRow', '11');
    jQuery("#rowed1").jqGrid('editRow', '12');
    jQuery("#rowed1").jqGrid('editRow', '13')
    
    jQuery("#rowed1").jqGrid('saveRow', '11');
    jQuery("#rowed1").jqGrid('saveRow', '12');
    jQuery("#rowed1").jqGrid('saveRow', '13');
    
  • 当然,url参数是必需的,我认为您可以使用
    回调
    选项来收集所有编辑的行


    希望这有助于

    ,因为乐观并发通常会使用带有
    行版本
    时间戳
    类型的附加列,这些列将自动更新(至少在MS SQL中)或每个触发器。我看到的问题不是检测并发错误,而是为用户显示错误。让我们假设用户一次更新了10行,您检测到第2、7和10行被另一个用户修改。应该采取什么行动?可以提交其他行中的更改。应重新加载第2、7和10行的内容,并且用户应重复对行所做的更改。你打算怎么做?最好显示用户修改的内容和修改行中存在的更改之间的差异。这可能是因为其他用户修改了其他行字段,因此可以执行提交的更改。可能是真正的冲突存在。如何为用户准确显示(标记)有冲突的行?把它标成红色?如何显示有冲突的字段?如果一个人放弃更改并显示错误消息,那么只有一个人会遇到难题。用户无法重现更改,或者可能认为某些工作已经完成,但事实并非如此。这些问题恐怕我喜欢你的答案。如果绝对需要一次更改一批行,我宁愿使用合并进行SQLite本地存储和数据同步。当然,写起来有点挑战性,但很有趣:)还有一些建议。。。有趣的是,没有太多关于使用本地数据的信息jqGrid@Alex帕克卡:谢谢你的帮助。我同意,这个问题可能是更多的数据库问题,就像jqGrid一样。解决方法取决于客户环境。关于这个问题,我不太同意你的看法。jqGrid的本地排序和过滤是纯JavaScript解决方案,从大约1000行开始就非常慢。Web SQL数据库/索引数据库或客户端上的任何其他本机数据库实现可以有更好的性能。哦,是的,当然,“本地”只是为了阻止jqGrid进入网络。所有排序和搜索/查询都应该通过事件绑定在jqGrid之外完成。虽然不确定它将如何发展,但可能需要一些jqGrid代码黑客攻击。。。有趣的项目本身。