You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用自定义按钮将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);
            }
        });
    }
});

关键细节说明

  1. 选中行处理:用selarrrow获取所有选中行的ID,再通过map+join拼接wrkid,比你原来的for循环更简洁。
  2. 复用editurl:直接从jqGrid的配置里取editurl,不用硬写地址,后续修改更方便。
  3. Action标识:添加Action: 'BatchApprove'参数,让你的ASHX页面能区分这是批量审批操作,和普通的编辑/删除请求分开处理。
  4. 用户反馈:不管成功还是失败,都给用户明确的提示,同时刷新表格保证数据最新。

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

火山引擎 最新活动