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

时间:2011-05-09 21:15:42

标签: jquery jqgrid edit

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

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

我们正在尝试避免必须逐个对每行进行更改,并且每次都要对服务器执行单独的“往返”,因为我们要为多个字段批量编辑多个字段记录并有一个“提交”。

3 个答案:

答案 0 :(得分:8)

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

我个人不会在我的项目中实现这种行为。原因是我认为网站应该始终支持并发(乐观并发最有意义)。如果一个人尝试将更改提交到服务器,服务器可以回答并发错误:其他人已经修改了数据。在应该刷新网格数据并且应该重复编辑行的情况下。在使用乐观并发的情况下,我看到实现编辑多行的问题。错误消息将如何显示?如果更改了许多行,错误消息应该如何?如果出现错误,用户应该怎么做?他/她应该重复完整的数据更改吗?用户的观点从哪里获益?

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

答案 1 :(得分:1)

在原始JQGrid实现中无法对多行进行内联编辑。原始实现的作用是,您编辑和失去焦点的每一行都将被提交。

相反,创建一个这样的自定义实现: 1.覆盖(扩展)现有的grid.inline.js并编写自己的编辑行并保存行。 2.在编辑行功能中,配置以添加要单独收集的脏行(已编辑)。 3.在保存行功能中,您只能将脏行提交给服务器。

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

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

答案 2 :(得分:1)

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

  1. 转到jqGrid演示页面http://www.trirand.com/blog/jqgrid/jqgrid.html
  2. 加载道路编辑/基本示例页面。
  3. 手动运行此代码:

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

  5. 手动运行此代码:

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

    希望这有帮助