jQuery Grid高级指南
上周以为已经把jqgrid 表格这部分已经搞得差不多了,没想到在实际用的时候,出现了不少问题,重新把这块知识整理一下。
问题一:设置表格的自动刷新
问题的原因:
使用表格自带的增删改查的功能,编辑完数据后表中数据会刷新。但是手写方法修改数据,例如模态框,修改完成后并不会在表中进行数据的刷新。
解决的办法:
在请求发送之后,模态框关闭之前使用jqgrid的reloadGrid。
$("#jqGrid").trigger("reloadGrid");
问题二:表中日期的显示格式
问题的原因:
当数据库中的字段是date类型时,直接将数据加载到表格中,显示得是一串数字,为时间的毫秒值。
解决的办法:
给字段后追加时间转换的方法
{ label: '日期', name: 'birthday' ,align: 'center',editable: true, formatter:dateConvert },
编写dateConvert方法
function dateConvert(cellvalue){
var times= new Date(cellvalue) ;
date = times.toLocaleString();
return date;
}
问题三:设置表中每行交替显示样式不同
问题的原因:
在设置表格的属性altRows:true 后,表格的样式并没有发生改变
解决的办法:
在添加altRows:true属性之后,还需要设置altclass来规定需要交替显示得样式
altRows: true, //设置行交替样式
altclass: 'differ', //手动写的交替的样式
.differ{
background-color: #DDDDDC;
}
问题四:表格完成响应式
问题的原因:
这个问题本来已经在上一篇博客中得到了解决,可是又发现了一个新的问题,就是当表格的列数比较多时,表格中不会出现滚动条,手动调整窗口大小时才会出现。
解决的办法:
// 初始化表格
function gridInit(){
// 获取当前页面的宽度
var Width = document.body.clientWidth;
$("#jqGrid").jqGrid({
url: '<%=basePath%>theTypeController/queryPerform/query',
mtype: "post",
datatype: "json",
colModel: [
{ label: '这是文本', name: 'theText' ,align: 'center',editable: true },
{ label: '这是日期', name: 'theDate' ,align: 'center',editable: true,formatter:dateConvert },
{ label: '这是数字', name: 'theNumber' ,align: 'center',editable: true },
{ label: '这是主键', name: 'theId',key:true ,align: 'center',editable: true },
{ label: '操作', name: 'operator', align: 'center',formatter: operation}
],
viewrecords: true, //定义是否要显示总记录数
rowNum: 5, //每页显示的条数
height: 'auto', //自动行高
width: Width-60,
shrinkToFit:false, //设置为true时,列数充满表格,当列数较多时,只会缩小列宽,并不会出现滚动条,需要将属性设置为false
autoScroll: true, //设置滚动条
altRows: true, //设置行交替样式
altclass: 'differ', //交替的样式
multiselect: true, //是否可以多选
rowList: [5,10,20], //用来改变显示记录数
pager: "#jqGridPager" //定义翻页用的导航栏 });
}
问题五:表格行中增加自定义按钮
问题的原因:
目前的项目中,需要给角色赋予增删改查的权限,当角色没有权限的时候,表中不应该出现对应的按钮,即动态的生成按钮。
解决的办法:
首先在表格中添加操作的列
{ label: '操作', name: 'operator', align: 'center',formatter: operation}
根据权限动态生成按钮,项目中是获取到该角色没有的权限名,根据权限名找到对应的按钮name,将其设置为隐藏
//根据权限动态生成表格中行按钮
function operation(cellvalue, options, rowObject) {
var id = "'"+options.rowId+"'"; //id写成这样的理由下面进行解释
var button = "";
//定义按钮的name
var menu = ["editBut","deleteBut","browseBut"];
//定义操作的方法名
var opera = ["update","deleteConfirm","browse"];
//按钮的图标名
var icons = ["fa fa-edit","fa fa-trash","fa fa-th"];
//获得所有没有权限的集合
var stateValue = $("#PLATFORM_VIEWSTATE_49DFD9F16B6D11E6A077645A042EAA66_ID").val(); if (stateValue) {
//将没有权限的集合转为json数据
var values = JSON.parse(stateValue);
for (var i = 0; i < values.length; i++) {
//判断按钮是否在没有权限的集合中,在表示为没有权限,返回其所在索引
if($.inArray(values[i].name,menu)!=-1){
//数组中移除相关的name,方法名,图标名,即不生成按钮
var index = $.inArray(values[i].name);
menu.splice(index,1);
opera.splice(index,1);
icons.splice(index,1);
}
}
//循环生成按钮
for(var i = 0; i < menu.length; i++) {
button += '<a name="'+menu[i]+'" class="btn btn-sm btn-default" onclick="'+opera[i]+'('+id+')"><i class="'+icons[i]+'"></i></a>'+ ' ';
}
}else{
button = '<a name="editBut" class="btn btn-sm btn-default" onclick="update('+id+')"><i class="fa fa-edit"></i></a>'+ ' '+
'<a name="deleteBut" class="btn btn-sm btn-default" onclick="deleteConfirm('+id+')"><i class="fa fa-trash"></i></a>'+ ' '+
'<a name="browseBut" class="btn btn-sm btn-default" onclick="browse('+id+')"><i class="fa fa-th"></i></a>';
}
return button;
}
按钮对应的方法
// 添加功能
function add(){
jQuery("#jqGrid").jqGrid('editGridRow',"new",
{url:"<%=basePath%>ttttttController/createPerform/",
left:500,width:300,reloadAfterSubmit:false,closeAfterEdit: true});
} // 编辑功能
function update(rowid){
if( rowid != null ) {
jQuery("#jqGrid").jqGrid('editGridRow',rowid,
{url:"<%=basePath%>ttttttController/updatePerform/",
left:500,width:300,reloadAfterSubmit:false,closeAfterEdit: true});
} else{
alert("请选择一行进行修改!");
}
} // 删除功能
function deleteConfirm(rowid){
if( rowid != null ) {
jQuery("#jqGrid").jqGrid('delGridRow',rowid,
{url:"<%=basePath%>ttttttController/deletePerform/",
left:500,width:300,reloadAfterSubmit:false});
} else{
alert("请选择一行进行删除!");
}
} // 浏览功能
function browse(rowid){
if( rowid != null ) {
jQuery("#jqGrid").jqGrid('viewGridRow',rowid,{left:500,width:300,reloadAfterSubmit:false});
} else{
alert("请选择一行进行查看!");
} // 删除浏览中的操作按钮
$("#trv_operator").css({
"display":"none"
});
}
问题六:表格中点击行按钮触发事件,传递的参数为[object HTMLTableRowElement]
问题的原因:
在实现删除和修改功能时,表中设置的key为数字类型时,传参过程正常进行。但是当key为字符串时,参数传入新方法中会变成[object HTMLTableRowElement],无法进行对应的操作。
解决的办法:
经过调试发现,例如修改按钮,点击按钮,触发update(options.rowId)方法,参数值为abc时,在浏览器中可以看到,点击事件为update(abc),参数会发生异常。
只需将options.rowId提前处理好后再传递到方法中,例如写成这样的形式,var id = " ' "+options.rowId+" ' "; 给参数两端加上单引号之后,方法就会变为update('abc')。
问题七:对表格中的数据进行筛选
问题的原因:
根据输入框中输入的条件,点击修改按钮,筛选出需要的数据
解决的办法:
// 首先获取查询条件中的值
var theNumber = $("input[name='theNumber']").val();
var theId = $("input[name='theId']").val();
// 使用jqgrid中的方法
$("#jqGrid").jqGrid('setGridParam',{
postData:{
'theNumber' : theNumber ,
'theId' : theId
}
}).trigger("reloadGrid"); //重新载入
问题八:表格坐下角增删改查刷新的方法
问题的原因:
利用表格中自带的方法进行数据操作,可以在表格的属性中设置editurl,不同操作向后台传递的参数不同,后台使用oper接收,编辑为edit,删除为delete,增加为add;若在弹框中设置了url,则会覆盖editurl
解决的办法:
$('#jqGrid').navGrid('#jqGridPager', {
edit: false, add: false, del: true, search: false, refresh: false, view: false,
position: "left", cloneToTop: false },
// 编辑信息弹框
{
url:"<%=basePath%>ttttttController/updatePerform/",
editCaption: "编辑信息",
recreateForm: true,
left:650,
width:300,
beforeSubmit : function( postdata, form , oper) {
if( confirm('确定更新信息吗?') ) {
return [true,''];
} else {
return [false, '不能提交!'];
}
},
closeAfterEdit: true,
errorTextFormat: function (data) {
return 'Error: ' + data.responseText;
}
},
// 新增信息弹框
{
url:"<%=basePath%>ttttttController/createPerform/",
addCaption: "新增信息",
closeAfterAdd: true,
recreateForm: true,
left:500,
width:300,
errorTextFormat: function (data) {
return 'Error: ' + data.responseText;
}
},
// 删除信息弹框
{
url:"<%=basePath%>ttttttController/deletePerform/",
delCaption: "删除信息",
left:500,
width:300,
errorTextFormat: function (data) {
return 'Error: ' + data.responseText;
}
});
}
jQuery Grid高级指南的更多相关文章
- jQuery Grid入门指南
上周需要把一个项目中的普通table改成使用jQuery插件形式的表格,找到了jqgrid这个插件,本以为找个demo,查查api就能解决,没想到还是费了一番的功夫,在这里记录总结一下. 本文实现的内 ...
- Jquery remove 高级用法
Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ...
- jQuery Grid With ASP.Net MVC
jQuery Grid 能够在 ASP.NET MVC 中轻松地实现分页. 排序. 筛选以及 jQuery 插件网格中的 CRUD 操作. 具有以下特征: 时尚的表格数据呈现控件. JavaScrip ...
- jQuery MiniUI 开发指南+API组件参考手册
jQuery MiniUI 开发指南 本文档将逐步的讲解jQuery MiniUI的方方面面,从此您将踏上jQuery MiniUI的深入探索之旅. 1.Hello M ...
- jQuery性能优化指南(转载)
现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, ...
- Linux网络设置高级指南
from:http://www.oschina.net/question/23734_117144 Linux网络设置高级指南 本文面向的是被Linux复杂的有线无线网络架构弄得头昏脑胀:或者被网上半 ...
- 【译】高级指南-深入JSX
title: 高级指南-深入JSX date: 2017-4-5 17:13:09 --- 深入JSX 从根本上来讲,JSX 仅仅是提供 React.createElement(component, ...
- [Html] jQuery Grid
https://www.jqwidgets.com/ jQuery Grid https://marketplace.visualstudio.com/items?itemName=jqwidget ...
- 第一百七十一节,jQuery,高级事件,模拟操作,命名空间,事件委托,on、off 和 one
jQuery,高级事件,模拟操作,命名空间,事件委托,on.off 和 one 学习要点: 1.模拟操作 2.命名空间 3.事件委托 4.on.off 和 one jQuery 不但封装了大量常用的事 ...
随机推荐
- Mysql 定时任务事件
参考文献:https://blog.csdn.net/dream_ll/article/details/73499750
- eclipse无法加载主类错误(项目上红色感叹号问题解决)
在用eclipse运行一个简单的继承程序时,在点击运行时提示如下: 点击process后,提示无法加载主类错误 在网上一直没找到原因,连helloword程序都无法正常运行了,而且此时我看到文件项目中 ...
- mac+windows下从git上拉取项目及运行
一.Mac下从git拉取项目 1. 拉项目 打开终端,先进入想放置项目的目录.假设进入workfile目录,输入cd workfile. 进入workfile目录后:输入git clone 链接(gi ...
- C# 图像处理:获取鼠标位置信息(全局)
Point ms = Control.MousePosition; //获取鼠标位置 this.label2.Text = string.Format("{0}:{1}", ms. ...
- effective C++学习二(仅供个人学习记录,本文摘录effective C++)
条款 2:尽量用<iostream>而不用<stdio.h> scanf 和 printf 很轻巧,很高效,你也早就知道怎么用它们,这我承 认.但尽管他们很有用,事实上 sca ...
- thymeleaf 的常见属性
- sass 的安装 编译 使用
1.使用node 的command 运行命令: gem install sass2.cmd检查是否安装成功 sass -v 如果成功了 可以看见版本信息Sass 3.5.5 ...3. 创建.scss ...
- create-react-app之proxy
[create-react-app之proxy] create-react-app可以用于一键创建web_client环境,默认使用webpack-dev-server.但在开发过程中,往往需要cli ...
- msf客户端渗透(七):跳板、post模块、自动运行脚本
跳板 假设有这样一个场景,有一个局域网内网网关是1.1.1.1,局域网里的主机1是kali,它经过一个防火墙连接到公网,主机2和主机3在另一个内网网关为2.1.1.1的局域网,由于防火墙做了设置,只有 ...
- Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final
Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final