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

选中触发行编辑参考: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: ,
colModel: [
{ label: '编号', name: 'Id', width: , 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("<title>") != -1) {
var start = e.responseText.indexOf("<title>");
var end = e.responseText.indexOf("</title>");
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() + "】打分失败");
}
});
}
}

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

jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据的更多相关文章

  1. (转)在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?

    转自:http://www.cnblogs.com/xiaoyao2011/archive/2011/09/09/2172427.html 在.NET程序运行过程中,什么是堆,什么是栈? 堆也就是托管 ...

  2. jqGrid选中行、格式化、自定义按钮、隐藏

    获取选择一行的id: var id=$('#jqGrid').jqGrid('getGridParam','selrow'); 获取选择多行的id: var ids=$('#jqGrid').jqGr ...

  3. Easyui datagrid combobox输入框下拉(取消)选值和编辑已选值处理

    datagrid combobox输入框下拉(取消)选值和编辑已选值处理 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3   需求场景 如下,在datagri ...

  4. jqgrid 翻页记录选中行

    简单的jqgrid列表 $("#list").jqGrid({ url:contextPath + "/getList", postData: data, da ...

  5. iOS开发UI篇-tableView在编辑状态下的批量操作(多选)

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  6. jqgrid 获取选中行主键集合

    如何获取选中行的主键集合呢? 使用  getGridParam(selarrrow) 方法可获取所有选中行的主键集合. 注意:此处的主键集合是指-设置为主键的列(key: true).再次提醒:一个j ...

  7. JqGrid获得所有选中行数据ID数组,获取所有行的ID数组

    获得选中行的ID数组:var ids = $("jqgridtableid").jqGrid('getGridParam','selarrrow'); 获得所有行的ID数组:var ...

  8. 巨坑:jqgrid竟然取不到编辑模式下input的值

    今天遇到最奇葩的问题,竟然取不到input的值,感觉世界观都颠覆了.后来一搜资料,又是jqgrid框架搞的鬼,真搞不明白,开发框架就好好开发框架,留这么多坑有意思吗? jqgrid编辑模式下不要调用g ...

  9. Jquery+CSS在不使用Checked的情况下实现当前选中行样式变化

    之前在做一个当前选中行样式变化时发现网上很多方法都是利用在行内添加checked,然后通过checked是否选中来判断当前选中行的位置,今天就整理了一个不需要在行内添加其他按钮直接通过变化当前选中行的 ...

随机推荐

  1. layui 三级菜单

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. python乐观锁、悲观锁

    二.乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改 三.悲观锁总是假设最坏的情况,每次取数据 ...

  3. Python3.6下的Requests登录及利用Cookies登录

    利用Python中的Requests模块可以实现Post,Get等发送功能,我以登录某网站为例,记录使用Post发送用户名.密码及图形验证码,以及通过Cookies直接登录的内容. 1.利用POST发 ...

  4. js-ES6学习笔记-module(1)

    1.在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种.前者用于服务器,后者用于浏览器.ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可 ...

  5. js-数字、字符串、布尔值的转换方式

    来自JavaScript秘密花园 1.转换为字符串 '' + 10 === '10'; // true 将一个值加上空字符串可以轻松转换为字符串类型. 2.字符串转换为数字 +'010' === 10 ...

  6. Microsoft SQL 关系数据库的使用指南

    Microsoft SQL 关系数据库的使用指南 https://docs.microsoft.com/zh-cn/sql/relational-databases/database-features

  7. css继承属性与非继承属性

    一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...

  8. python selenium模拟登录163邮箱和QQ空间

    最近在看python网络爬虫,于是我想自己写一个邮箱和QQ空间的自动登录的小程序, 下面以登录163邮箱和QQ空间和为例: 了解到在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用, ...

  9. 学习笔记:Rick's RoTs -- Rules of Thumb for MySQL

    Table of Contents SELECTs -- do's and don'tsINDEXingENGINE DifferencesOptimizations, and notPARTITIO ...

  10. django —— 邮件

    官方文档 1.11 配置settings.py # QQ邮箱为例, 其他邮箱对应的SMTP配置可查官方 EMAIL_HOST = "smtp.qq.com" EMAIL_PORT ...