如何用自定义按钮将JQGrid多选数据发送至editurl批量审批?
解决jqGrid自定义按钮批量审批的问题
我明白你现在的困扰——自定义按钮不像jqGrid内置的Edit/Delete按钮那样自动帮你把数据发送到editurl,得咱们手动在点击事件里处理AJAX提交才行。咱们来一步步调整你的代码,实现批量审批的需求:
核心思路
自定义按钮的逻辑完全靠onClickButton回调来驱动,我们需要在这里完成三个关键步骤:
- 获取选中多行的
wrkid并拼接 - 收集当前用户信息
- 手动发送AJAX请求到你的ASHX页面,处理响应后刷新表格
修改后的完整代码
$('#jQGrid').navButtonAdd('#jQGridPager', { buttonicon: "ui-icon-mail-closed", title: "批量审批", caption: "批量审批", position: "last", onClickButton: function () { // 第一步:检查是否选中了记录 var selectedRowIds = $('#jQGrid').jqGrid('getGridParam', 'selarrrow'); if (selectedRowIds.length === 0) { alert('请先选中要审批的记录!'); return; } // 第二步:拼接选中的所有wrkid,用逗号分隔 var wrkIdList = selectedRowIds.map(function(rowId) { return $('#jQGrid').jqGrid('getCell', rowId, 'wrkid'); }).join(','); // 获取当前登录用户 var currentUser = '<% =System.Web.HttpContext.Current.User.Identity.Name %>'; // 第三步:发送AJAX请求到ASHX页面 $.ajax({ url: $('#jQGrid').jqGrid('getGridParam', 'editurl'), // 直接复用jqGrid配置的editurl type: 'POST', // 根据你的ASHX接收方式调整,POST更适合批量操作 data: { WrkId: wrkIdList, CurrentUser: currentUser, Action: 'BatchApprove' // 加个标识让ASHX知道是批量审批操作 }, dataType: 'text', success: function(response) { // 处理服务器响应 var resText = response.trim(); if (resText === "") { // 审批成功,刷新当前页保持分页位置 $("#jQGrid").trigger("reloadGrid", [{ current: true }]); alert('批量审批完成!'); } else { // 有错误信息,提示用户并刷新表格 alert('审批出错:' + resText); $("#jQGrid").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid'); } }, error: function(xhr, status, err) { // 请求失败的提示 alert('请求发送失败:' + err); } }); } });
关键细节说明
- 选中行处理:用
selarrrow获取所有选中行的ID,再通过map+join拼接wrkid,比你原来的for循环更简洁。 - 复用editurl:直接从jqGrid的配置里取
editurl,不用硬写地址,后续修改更方便。 - Action标识:添加
Action: 'BatchApprove'参数,让你的ASHX页面能区分这是批量审批操作,和普通的编辑/删除请求分开处理。 - 用户反馈:不管成功还是失败,都给用户明确的提示,同时刷新表格保证数据最新。
ASHX页面的处理提示
在你的ASHX文件中,需要读取请求参数并执行批量逻辑:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string action = context.Request.Form["Action"]; if (action == "BatchApprove") { string wrkIds = context.Request.Form["WrkId"]; string currentUser = context.Request.Form["CurrentUser"]; // 分割wrkIds为数组,执行批量审批逻辑 string[] idArray = wrkIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); try { // 这里写你的批量审批代码 context.Response.Write(""); // 成功返回空字符串 } catch (Exception ex) { context.Response.Write(ex.Message); // 失败返回错误信息 } } }
这样调整后,点击自定义按钮就能完成批量审批的操作了。
内容的提问来源于stack exchange,提问作者Adam Cheeseman




