jqgrid 选中行触发编辑,切换下一行时验证和异步保存上一行数据
有时,我们需要批量修改或填写一些相似的数据。可以以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 选中行触发编辑,切换下一行时验证和异步保存上一行数据的更多相关文章
- (转)在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?
转自:http://www.cnblogs.com/xiaoyao2011/archive/2011/09/09/2172427.html 在.NET程序运行过程中,什么是堆,什么是栈? 堆也就是托管 ...
- jqGrid选中行、格式化、自定义按钮、隐藏
获取选择一行的id: var id=$('#jqGrid').jqGrid('getGridParam','selrow'); 获取选择多行的id: var ids=$('#jqGrid').jqGr ...
- Easyui datagrid combobox输入框下拉(取消)选值和编辑已选值处理
datagrid combobox输入框下拉(取消)选值和编辑已选值处理 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 需求场景 如下,在datagri ...
- jqgrid 翻页记录选中行
简单的jqgrid列表 $("#list").jqGrid({ url:contextPath + "/getList", postData: data, da ...
- iOS开发UI篇-tableView在编辑状态下的批量操作(多选)
先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...
- jqgrid 获取选中行主键集合
如何获取选中行的主键集合呢? 使用 getGridParam(selarrrow) 方法可获取所有选中行的主键集合. 注意:此处的主键集合是指-设置为主键的列(key: true).再次提醒:一个j ...
- JqGrid获得所有选中行数据ID数组,获取所有行的ID数组
获得选中行的ID数组:var ids = $("jqgridtableid").jqGrid('getGridParam','selarrrow'); 获得所有行的ID数组:var ...
- 巨坑:jqgrid竟然取不到编辑模式下input的值
今天遇到最奇葩的问题,竟然取不到input的值,感觉世界观都颠覆了.后来一搜资料,又是jqgrid框架搞的鬼,真搞不明白,开发框架就好好开发框架,留这么多坑有意思吗? jqgrid编辑模式下不要调用g ...
- Jquery+CSS在不使用Checked的情况下实现当前选中行样式变化
之前在做一个当前选中行样式变化时发现网上很多方法都是利用在行内添加checked,然后通过checked是否选中来判断当前选中行的位置,今天就整理了一个不需要在行内添加其他按钮直接通过变化当前选中行的 ...
随机推荐
- python学习之老男孩python全栈第九期_day005知识点总结
1. 数据类型划分: (1) 不可变数据类型(可哈希): 元组, bool, int(123 就是123,不会变成其他数), str, 字典的keys (2) 可变数据类型(不可哈希): 列表list ...
- Gruntfile.js文件配置项
GRUNT安装与配置 Posted on 2016-08-19 18:13 听风吹来的种子 阅读(47) 评论(0) 编辑 收藏 安装 CLI npm install -g grunt-cli//全局 ...
- python 类之间的关系
类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...
- 微信小程序css画三角形内有文字
<view class="productStatus"> <span> <em>已上架</em> </span> < ...
- tensorflow模型的保存与恢复
1.tensorflow中模型的保存 创建tf.train.saver,使用saver进行保存: saver = tf.train.Saver() saver.save(sess, './traine ...
- android-studio开发NDK错误记录:bash: ../../build/intermediates/classes/debug: is a directory
按照网上很多已有的教程,在用javah生成c的头文件时候报错: Error: no classes specified bash: ../../build/intermediates/classes/ ...
- HCTF2018 pwn题复现
相关文件位置 https://gitee.com/hac425/blog_data/tree/master/hctf2018 the_end 程序功能为,首先 打印出 libc 的地址, 然后可以允许 ...
- Permission denied (publickey),Gitlab & Github 多ssh key 冲突 导致的权限问题
Github 多ssh key导致的权限问题 :Permission denied (publickey) 公司用gitlib搭建了git服务器,自己已有github账号,用ssh-keygen分别生 ...
- LeetCode题解之Longest Palindromic Substring
1.题目描述 2.问题分析 计算每个字符所组成的字符串的回文子串. 3.代码 string longestPalindrome(string s) { ; ; bool is_odd = false ...
- 如何从 Windows 虚拟机分离数据磁盘
当不再需要附加到虚拟机的数据磁盘时,可以轻松地分离它. 这会从虚拟机中删除该磁盘,但不会从存储中删除它. Warning 如果用户分离磁盘,它不会自动删除. 如果订阅了高级存储,则将继续承担该磁盘的存 ...