有时,我们需要批量修改或填写一些相似的数据。可以以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() + "】打分失败");
}
});
}
}

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

最新文章

  1. scheduleInRunLoop作用
  2. android 图像处理系列合集
  3. Struts2动态方法调用(DMI)
  4. 2.每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。答题人:张立鹏
  5. shell自动计算脚本
  6. Eclipse中Build Workspace 优化
  7. HDU 5379 Mahjong tree
  8. PHP Version之PHP5.2.x到5.3.x
  9. C#第十二天
  10. MyBatis解决字段名与实体类属性名不相同的冲突(四)
  11. 深入解析JavaScript中的this关键字
  12. winform展示Unity3D文件(支持动态改变文件路径)
  13. 第一把机械键盘 ikbc C-87
  14. python学习笔记之集合
  15. 数据分析——pandas
  16. Docker普通用户不使用sudo提权
  17. 调用微信定位功能 lat _ lng php方法
  18. learning makefile multiple target
  19. java中线程安全和非线程安全的集合
  20. 18-09-08 关于Linux 的安装遇到的一些小坑

热门文章

  1. php获取本月、上月、上上月、今日、昨日、上周的起始时间
  2. C语言中数据类型的本质
  3. Vue入门系列(三)之Vue列表渲染及条件渲染实战
  4. ASP.NET Core Razor生成Html静态文件
  5. Ubuntu安装ffmpeg
  6. SqlServer数据库设计一个字段的值是由其他字段运算结果所得
  7. commons-pool 解析
  8. JS获取元素宽高的两种情况
  9. python被游标坑了
  10. 【转】Java学习&mdash;什么是时间复杂度