博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据
阅读量:6891 次
发布时间:2019-06-27

本文共 4217 字,大约阅读时间需要 14 分钟。

有时,我们需要批量修改或填写一些相似的数据。可以以jqgrid表来显示,可能的效果如下:

 

 

选中触发行编辑参考:

本文主要说说验证和异步保存上一条数据的,以下是我项目中的内容,为了做记录留存,没有进行精简处理,感兴趣可以大致阅读下。

我的思路是:

1)用隐藏控件 selectRowId 来记录上一个编辑的行主键。获取值: $("#selectRowId").val()

2)通过隐藏控件值来追踪和验证上个编辑单元格的格式,并对错误的做提示,正确的直接通过

3)验证不通过不允许切换到下个编辑行;验证通过异步保存数据,并将行主键值存储在隐藏控件,保存上个编辑行,触发下个行为编辑状态

$.jgrid.gridUnload("jqGrid");//先卸载    $("#jqGrid").jqGrid({        url: 'QueryTargetDetailList',        postData: {            targetTagId: $("#TargetTagId").val(),            ...        },        mtype: "POST",        styleUI: 'Bootstrap',        datatype: "json",//如果url中需要回调函数,则此处格式为jsonp        //altRows: true,        editurl: 'clientArray',        responsive: true,        page: 1,        colModel: [            { label: '编号', name: 'Id', width: 50, key: true, editable: false },            ...        ],        shrinkToFit: true,//是否列宽度自适应。true=适应 false=不适应        loadonce: false,        viewrecords: true,        onSelectRow: EditSelectRow,        height: window.innerHeight * 0.6,        width: $(".modal-body").width()        //rowNum: fieldJson.length,    });

写在 EditSelectRow 方法中的内容如下:

//选中行启用行编辑function EditSelectRow(id) {    var result = ValidateTvalue();//验证数据    if (result != "" && result.length > 0) {        abp.message.error(result);        return;    }    SaveOneScore();//保存上一行数据    //当前选中行    $("#selectRowId").val(id);//临时存储当前选中行    //启用当前行为编辑状态    $("#jqGrid").jqGrid('editRow', id, { keys: true, focusField: 17 });}
写在 ValidateTvalue 方法中的内容如下:
//自定义验证function ValidateTvalue() {    var result = "";    var oldSelectRowId = $("#selectRowId").val();    if (oldSelectRowId != null && oldSelectRowId != "" && oldSelectRowId.length > 0) {        $("#jqGrid").jqGrid('saveRow', oldSelectRowId);//保存上一行        var rowDatas = $("#jqGrid").jqGrid('getRowData', oldSelectRowId);//获取上一行数据        //#region 验证分数是否为数值        var regu = "^[0-9]+(.[0-9]{2})?$";        //var regu = "/^\+?(\d*\.\d{2})$/";        var re = new RegExp(regu);        if (re.test(rowDatas.MarkScore)) {            //return [true, ""];        }        else {            result = "打分值【" + rowDatas.MarkScore + "】错误,请输入数值型.如:12或12.23";            $("#jqGrid").jqGrid('editRow', oldSelectRowId, { keys: true, focusField: 17 });        }        //#endregion        //#region 验证分数的范围值        var MarkScore = rowDatas.MarkScore - 0;//打分        var Weight = rowDatas.Weight - 0;//权重分        if (MarkScore >= 0 && MarkScore <= Weight) {            //return [true, ""];        }        else {            result = "打分值【" + rowDatas.MarkScore + "】应在【" + 0 + "~" + rowDatas.Weight + "】范围内";            $("#jqGrid").jqGrid('editRow', oldSelectRowId, { keys: true, focusField: 17 });        }        //#endregion    }    return result;}

写在 SaveOneScore 方法中的代码如下:

//保存上一条信息function SaveOneScore() {    //原选中行ID    var oldSelectRowId = $("#selectRowId").val();    if (oldSelectRowId != null && oldSelectRowId != "" && oldSelectRowId.length > 0) {        $("#jqGrid").jqGrid('saveRow', oldSelectRowId);//保存上一行        var rowDatas = $("#jqGrid").jqGrid('getRowData', oldSelectRowId);//获取上一行数据        //计算当前指标最终得分        var endScore = CalculateScore(oldSelectRowId, rowDatas);        //设置打分后的单元格值        $("#jqGrid").setCell(oldSelectRowId, 'EndScore', endScore);        //异步保存打分和得分        $.ajax({            type: "post",            url: "../api/services/api/MonthBonus/SaveEndScore",            data: {                DetailId: rowDatas.Id,                MarkScore: rowDatas.MarkScore,                EndScore: endScore            },            success: function (e) {                //abp.message.success("", "打分成功!");            },            error: function (e) {                if (e.responseText.indexOf("") != -1) {                    var start = e.responseText.indexOf("<title>");                    var end = e.responseText.indexOf("");                    abp.message.error(e.responseText.substring(start + 7, end), rowDatas.TargetName + "编号【" + rowDatas.Id.toString() + "】打分失败");                }                else                    abp.message.error(e.responseText, rowDatas.TargetName + "编号【" + rowDatas.Id.toString() + "】打分失败");            }        });    }}

 由于不想整理了,就草草做了以上粘贴,将就看了。

转载于:https://www.cnblogs.com/senyier/p/7652843.html

你可能感兴趣的文章
FreeNAS如何配置LACP(链路聚合和故障)
查看>>
AJAX 学习笔记[三] get 与post 模式的区别
查看>>
MES技术
查看>>
GO语言练习:网络编程 ICMP 示例
查看>>
ios11--UIButton
查看>>
阿里云海外征战记:跻身全球前三,只用了两年半
查看>>
解密回声消除技术之二(应用篇)
查看>>
Go语言的web程序写法
查看>>
IDF2011:基于SaaS模式的"教学云"案例
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第七章:基本系统配置- 7.5. 配置系统时间...
查看>>
云计算你必须思考的8大问题
查看>>
Windows7 Debug Test
查看>>
HTTPS连接的前几毫秒发生了什么
查看>>
从变量到封装:一文带你为机器学习打下坚实的Python基础
查看>>
给大家共享一个基本算法包
查看>>
Riverbed:SDN向广域网扩展为企业带来哪些价值
查看>>
定义中国网络安全市场战略高度,绿盟科技为“互联网+”保驾护航
查看>>
python 自定义 包 模块 打包 安装
查看>>
ubuntu桌面的标题栏和启动栏消失问题[亲测可用]
查看>>
Cloud technology in today's job market
查看>>