我们正在使用jqGrid的jQuery('#grid').editRow()
功能,它允许您内联编辑行中的字段。
jqGrid是否支持一次内联编辑多行,我可以在多行中进行更改,然后一次提交所有行?
我们正在尝试避免必须逐个对每行进行更改,并且每次都要对服务器执行单独的“往返”,因为我们要为多个字段批量编辑多个字段记录并有一个“提交”。
答案 0 :(得分:8)
jqGrid不实现多行的内联编辑。您可以使用本地编辑并手动将所有更改发布到服务器,但您必须自己实施所有更改的提交。
我个人不会在我的项目中实现这种行为。原因是我认为网站应该始终支持并发(乐观并发最有意义)。如果一个人尝试将更改提交到服务器,服务器可以回答并发错误:其他人已经修改了数据。在应该刷新网格数据并且应该重复编辑行的情况下。在使用乐观并发的情况下,我看到实现编辑多行的问题。错误消息将如何显示?如果更改了许多行,错误消息应该如何?如果出现错误,用户应该怎么做?他/她应该重复完整的数据更改吗?用户的观点从哪里获益?
在我所有的jqGrid实现中几乎立即提交了一行的编辑。所以我认为不需要在项目中一次做多行。在并发错误的情况下用户的缺点是因为“往返”减少的优点而更大。由于与服务器的连接非常好,因此在我的客户环境中发送数据不是问题。
答案 1 :(得分:1)
在原始JQGrid实现中无法对多行进行内联编辑。原始实现的作用是,您编辑和失去焦点的每一行都将被提交。
相反,创建一个这样的自定义实现: 1.覆盖(扩展)现有的grid.inline.js并编写自己的编辑行并保存行。 2.在编辑行功能中,配置以添加要单独收集的脏行(已编辑)。 3.在保存行功能中,您只能将脏行提交给服务器。
为防止同一数据的并发更新,您可以通过以下任一方式使用版本控制机制: 1.为所有行创建一个版本字段(隐藏)。当一行变脏时,增加版本字段。 2.提交行时,检查现有版本号和新版本号。如果存在不匹配,则对用户进行亲密/更新现有的。 (这个,你可以很容易地实现)
就是这样!希望这很有用! : - )
答案 2 :(得分:1)
我不太了解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');
当然url参数是必需的,我认为您可以使用callback
选项来收集所有已编辑的行。
希望这有帮助