有时,我们需要批量修改或填写一些相似的数据。可以以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. Python 并发编程(管道,事件,信号量,进程池)

    管道 Conn1,conn2 = Pipe() Conn1.recv() Conn1.send() 数据接收一次就没有了 from multiprocessing import Process,Pip ...

  2. JSON 解析与封装

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.解析: var str = '{"name":"huangxiaojian&qu ...

  3. vue 自定义组件的自定义属性

    <auto-com :value="value"></auto-com> //带 : 的属性传入的是动态的值 <auto-com value=&quo ...

  4. 高性能JavaScript(快速响应的用户界面)

    浏览器UI线程 用于执行JavaScript代码和更新界面的进程被称为 “浏览器UI线程” . UI线程的工作基于一个简单的队列系统,任务会被保存到队列中直到线程空闲,一旦空闲队列就被重新提取出来运行 ...

  5. CentOS7下 将django工程部署到Apache2.4上

    因为需要写一个网站,考虑到也没写过其他的语言,就直接采用了python,说起python的框架,就是大名鼎鼎的Django啦. 工程所采用的版本是python 2.7,django 是1.8,wind ...

  6. Oracle 修改oracle数据库名

    Oracle 修改oracle数据库名 by:授客 QQ:1033553122 1.确保你有个可用于数据库恢复的,完整的数据库备份 2.确保数据库处于mount,非open状态,并且在加载前先以imm ...

  7. C#和C++互相操作 结构体数组的传递

    C++中结构体定义: typedef struct // 平面 { double time;  float normal[3]; float center[3];  } plane; C++中方法声明 ...

  8. python基础一数据类型之字符串

    摘要: python基础一中有字符串,所以这篇主要讲字符串. 一,字符串的注释 二,字符串的索引与切片 三,字符串的方法 一,字符串的注释 单引号 双引号 三引号都可以用户定义字符串.三引号不仅可以定 ...

  9. leveldb源码阅读

    http://blog.csdn.net/sparkliang/article/details/8567602 http://brg-liuwei.github.io/tech/2014/10/15/ ...

  10. 【Git】从服务器搭建到提交分支使用——初学者轻松上手篇

    GitHub就是一个免费托管开源代码的远程仓库,个人可以把代码寄存处上面,不过会被公开.对于商业公司来说在Linux上搭建一台Git服务器作为私有仓库使用.开发人员在本地下载仓库代码,协同开发.本篇介 ...