`
mj4d
  • 浏览: 301924 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jqGrid中的编辑

阅读更多

在jqGrid的官方文档http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules中,对jqGrid的编辑总结了以下三种类型的编辑:

 写道
cell editing: 编辑一个Grid的cell
inline editing: 编辑同一row的几个cell
form editing: 创建一个form表单在外部更新grid内容

 在jqGrid中主要通过以下colModel参数来实现:

  • editable: true|false 表示该cell是否支持可编辑,默认为false。对hidden属性默认不支持编辑,当然也可以通过其他方式来实现
  • edittype:简单说就是当前cell在编辑状态下是按照哪种input类型,因为在编辑下会转化为<input type="text/password..."../>,于是支持的输入类型当然包括:'text', 'textarea', 'select', 'checkbox', 'password', 'button', 'image', 'file'还有custom,默认为text
  • editoptions:一个数组用来设置edittype属性,通过该属性来限定input中各属性的值,比如:
edittype="text", editoptions: {size:10, maxlength: 15}
edittype="textarea", editoptions: {rows:"2",cols:"10"}
edittype="textarea",editoptions: { value:"Yes:No" }
edittype="select",editoptions: { value: “FE:FedEx; IN:InTime; TN:TNT” }//对于多选的支持:editoptions: {multiple:true, size:3... }
//当edittype为custom时需要有两个函数,一个用来创建该元素(custom_element另外一个对其赋值(custom_value),如
edittype:'custom', editoptions:{
	custom_element: function(value, options){
	}, 
	custom_value:function(elem, operation, value){
	}
}
  •  editrules:用来校验用户输入值,比如我们常见的长度、必填、email、数字等校验。如editrules:{maxValue:20, required:true, number:true},提供了一系列常见的验证格式,具体见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules。这里举例来描述一个custom实例
editrules:{custom:true, custom_func: function(value, colname){
	if (value < 0 || value >20) {
		 return [false,"Please enter value between 0 and 20"];
	}else{
		   return [true,""];
	}
}}
  •  formoptions:用于上面的form editing,用来对form表单排序或在表单前面或后面加上一个元素。如对必填在前面加上*号等。如果要使用该元素,推荐对所有editable的元素都加上该属性
1、cell editing
是对一个grid的row中一个单独的cell进行编辑,支持ajax和本地的方式修改,同时对cell的编辑支持事件主要是[Enter]已经上下左右等鼠标事件来触发,同时还有对编辑事件本身,如beforeEditCell、afterEditCell等。
在cell编辑中,主要通过jqGrid的options参数来设置:
{
'cellEdit' : true,
'cellsubmit' : 'remote|clientArray',
'cellurl' : '/url/to/handling/the/changed/cell/value'
}
 其实这个cellEdit限制挺多,如果cellEdit=true即支持celEdit时jqGrid的onSelectRow事件都不能使用。就我自己来说没有在实际业务常见中使用,这里不再多说,具体见:
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:cell_editing

2、inlineEditing
当用户在对grid的一行做选择(如grid的onSelectRow、ondblClickRow事件触发时),当前grid进入可编辑状态。以下是一个例子,对一些常用的可编辑项做了说明
var datas = [
{"id":1,  "name":"name1",  "date":"2012-08-18 11:11:11", "price":123.1, 	"email":"abc@163.com", 	"amount":1123423, 	"gender":"1", "type":"0"},
{"id":2,  "name":"name2",  "date":"2012-08-18 11:11:11", "price":1452.2,  	"email":"abc@163.com",	"amount":12212321, 	"gender":"1", "type":"1"},
{"id":3,  "name":"name3",  "date":"2012-08-18 11:11:11", "price":125454, 	"email":"abc@163.com", 	"amount":2345234, 	"gender":"0", "type":"0"},
{"id":4,  "name":"name4",  "date":"2012-08-18 11:11:11", "price":23232.4, 	"email":"abc@163.com",  	"amount":2345234, 	"gender":"1", "type":"2"},
{"id":5,  "name":"name5",  "date":"2012-08-18 11:11:11", "price":473454, 	"email":"abc@163.com", 	"amount":5234534, 	"gender":"0", "type":"0"},
{"id":6,  "name":"name6",  "date":"2012-08-18 11:11:11", "price":34563, 	"email":"abc@163.com", 	"amount":2345342, 	"gender":"1", "type":"1"}
	    ];
 
colModel:[
	{name:'id',		index:'id'},
	{name:'name',	index:'name',	editable:true, edittype:"text", editrules:{required: true},editoptions:{size:16, maxlength: 15}},
	{name:'date',	index:'date',	editable:true, edittype:"text", editrules:{date: true},editoptions:{ size: 10, maxlengh: 10,
		   	      dataInit: function(element) {
		   	        $(element).datepicker({dateFormat: 'yy-mm-dd'});
		   	      }
	   }},
	{name:'price',	index:'price', 	editable:true, edittype:"text", editrules:{required: true, number: true}},
	{name:'email',	index:'email', 	editable:true, edittype:"text", editrules:{required: true, email: true}},
	{name:'amount',	index:'amount', editable:true, edittype:"text", editrules:{required: true, number: true, maxValue:20}},		
	{name:'gender',	index:'gender',	editable:true, edittype:"checkbox", editrules:{value:"Yes:No"}},
	{name:'type',	index:'type', 	editable:true, edittype:'select', formatter:'select', editoptions:{value:"0:现货;1:可配货;2:无货"}}
	],
以上是编辑的设置,主要包含了几种可编辑的方式:
1、edittype="text",并设置必填、size和maxlength的限制、email、number、maxValue等校验,在编辑时将对数据的有效性进行校验
2、edittype="text",对datepicker控件的支持,需要引入jquery-ui和国际化jquery.ui.datepicker-zh-CN.js的支持
3、edittype="checkbox",对cell中的值进行checkbox转换,并设置默认值的设置
4、edittype="select",配合formatter的使用,设置了可选择的下拉列表editoptions:{value:"0:现货;1:可配货;2:无货"}}
 
下面在对gridRow的双击事件触发编辑: 
ondblClickRow: function(id){
	if(id && id !== lastsel){
		var rowData = $("#jqGridId").jqGrid("getRowData", id); 
		$('#jqGridId').jqGrid('restoreRow',lastsel);
		$('#jqGridId').jqGrid('editRow',id,{
			keys : true,		//这里按[enter]保存
			url: s2web.appURL + "jq/save.action",
			mtype : "POST",
			restoreAfterError: true,
			extraparam: {
				"ware.id": rowData.id,
				"ware.warename": $("#"+id+"_name").val(),
				"ware.createDate": $("#"+id+"_date").val(),
				"ware.number": $("#"+id+"_amount").val(),
				"ware.valid": $("#"+id+"_type").val()
			},
			oneditfunc: function(rowid){
				console.log(rowid);
			},
			succesfunc: function(response){
				alert("save success");
				return true;
			},
			errorfunc: function(rowid, res){
				console.log(rowid);
				console.log(res);
			}
		});
	}
}
 以上是在双击grid的row时触发当前row为可编辑状态,在回车时调用editRow对当前编辑数据进行保存。展现的效果如下:
这里用了innerEdit的editRow方法:
jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc);
 或者:
jQuery("#grid_id").jqGrid('editRow',rowid,  {
	"keys" : false,
	"oneditfunc" : null,
	"successfunc" : null,
	"url" : null,
        	"extraparam" : {},
	"aftersavefunc" : null,
	"errorfunc": null,
	"afterrestorefunc" : null,
	"restoreAfterError" : true,
	"mtype" : "POST"
});
这里对以上各个参数的意思做一个简单的描述
  • rowid:当前编辑的rowid
  • succesfunc:如果定义了改函数,将会在请求成功调用后立即返回,该函数签名包括server返回的数据。同时该函数需要返回tue/false
  • url: 如果定义了改值,将会覆盖jqGrid中的editurl(当然,如果没有url和editurl是会报错的)。如果url="clientArray" 那么就不会向server端触发请求,可在后期手动调用修改
  • extraparam:请求参数列表{name:value, name:value},将会append到requestData中向server端发送
  • aftersavefunc:如果定义了改函数,将会在数据向server端保存后立即调用,该函数接受rowid、response参数。同样如果是上面的url="clientArray"该函数同样执行
  • errorfunc:如果定义了改函数,将会在数据向server端保存后调用,该函数接受rowid、response参数
  • afterrestorefunc:如果定义了改函数,将在restoreRow后调用,接受rowid作为参数 
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing 中对于innerEdit主要有以下几个方法:
写道
editRow //在用户出发edit事件时调用该方法
saveRow //用户不需要调用该方法,在edit时会自动调用
restoreRow //回滚当前editRow
addRow //新增row
inlineNav
 下面这个例子是对jqGrid新增一行并可编辑状态:
$("#addBtn").bind("click", function() {
		$("#jqGridId").jqGrid('addRow',{
			rowID : "new_row",
		    initdata : {},
		    position :"first",
		    useDefValues : true,
		    useFormatter : true,
		    addRowParams : {extraparam:{
		    	
		    }}
		});
		//当前新增id进入可编辑状态
		$('#jqGridId').jqGrid('editRow','new_row',{
			keys : true,		//这里按[enter]保存
			url: s2web.appURL + "jq/save.action",
			mtype : "POST",
			restoreAfterError: true,
			extraparam: {
			},
			oneditfunc: function(rowid){
				console.log(rowid);
			},
			succesfunc: function(response){
				alert("save success");
				return true;
			},
			errorfunc: function(rowid, res){
				console.log(rowid);
				console.log(res);
			}
		});
	
}); 
 
3、FormEditing
支持弹出窗的形式对grid的数据查看、新增、编辑、删除和查找,主要包含以下几个方法:
查找:searchGrid
编辑:editGridRow:
调用方式如下:
$("#grid_id").jqGrid('editGridRow', rowid, {properties} );
新增:editGridRow
$("#grid_id")..jqGrid('editGridRow', "new", properties );
查看:viewGridRow
删除: delGridRow
 
 
4、主要API
 
分享到:
评论
2 楼 zhenyitian 2013-10-25  
你好!我参考了下您写的代码,发现点击回车后,系统并未去获取输入框中的值,意味着extraparam没有值。
FF调试发现,当我双击这一行的时候,js就已经开始执行extraparam方法,那时候值还未有值, $("#"+id+"test").val()值为空,我写的代码如下,

ondblClickRow: function(id){   

           $('#list_data').jqGrid('editRow',id,{  
               keys : true,        
               url:  "test.action",  
               extraparam: {
                   "map.id": id,  
                   "map.test": $("#"+id+"test").val(),      
               }
           });  
       }
  
1 楼 tt434341228 2013-10-23  
我想问一下,单元格可编辑,需要引用哪些js?

相关推荐

    jqgrid行编辑+动态为其他列赋值

    在本例中,我们将深入探讨如何实现"jqgrid行编辑+动态为其他列赋值"这一功能。 首先,我们需要理解jqGrid的行编辑功能。jqGrid允许用户在表格的每一行上进行编辑,这通常通过双击或点击编辑按钮来触发。默认情况下...

    JqGrid中文API文档

    JqGrid是一款强大的JavaScript数据网格组件,用于在Web应用程序中展示和操作数据。它基于jQuery库,提供了丰富的功能,如分页、排序、过滤、编辑和格式化数据。本中文API文档将帮助开发者深入理解并有效利用JqGrid的...

    jqgrid中文文档API

    jQgrid中文文档API jQgrid是一个功能强大且流行的JavaScript插件,用于创建交互式表格。它基于jQuery库,提供了许多强大的功能,例如排序、过滤、编辑、分页等,使得开发者可以快速创建复杂的表格应用程序。本文将...

    jqgrid 编辑表格 一列

    本篇文章将深入探讨如何在 jqGrid 中实现表格的一列编辑功能。 一、jqGrid 基础 在开始编辑表格之前,我们需要了解 jqGrid 的基本结构和配置。首先,引入 jqGrid 的必需库,包括 jQuery、jQuery UI CSS 文件、...

    jqGrid中文文档.doc

    jqGrid 提供丰富的功能,如数据分页、排序、过滤、编辑、导入导出等。在实际应用中,你可以根据项目需求选择合适的组件和配置,以实现高效的数据管理界面。通过深入理解 jqGrid 的 API 和各种选项,可以定制化地满足...

    PHP+jqGrid表格插件实现增删改查

    改:在jqGrid中编辑某条记录,用户提交更改后,PHP脚本会接收到修改后的数据,更新数据库中的记录。 查:jqGrid默认支持服务器端分页,每次请求都会包含当前页的参数,PHP脚本据此生成SQL查询语句,获取指定页的...

    jqGrid_api中文文档

    文件中提及了jqGrid中的一些核心概念,例如ColModel API、参数配置、自定义搜索、搜索工具栏、搜索、自定义格式化类型、格式化、自定义按钮、翻页功能、配置json、方法和事件。这些内容涉及了如何通过编程方式操作...

    jqGrid 中文大全(1)

    在“jqGrid中文大全(1)”这个压缩包中,包含了一系列关于jqGrid的中文教程和文档,这些资料可以帮助开发者更深入地理解和应用jqGrid。以下是一些主要知识点的详细介绍: 1. **安装jqGrid**: jqGrid的安装通常涉及...

    jqGrid的表格数据呈编辑转态

    #### 二、jqGrid中的数据编辑特性 根据提供的代码片段,可以看出jqGrid被配置为允许用户直接在表格内编辑数据。这种功能对于需要频繁更新数据的应用场景非常有用。 #### 三、代码分析 接下来,我们将深入分析代码中...

    jqGrid表格数据展示插件

    在jqGrid中,你可以实现交互式操作,比如点击行进行选中、双击行进行编辑、单击列头进行排序等。此外,它还提供了强大的搜索功能,用户可以通过输入关键词或选择条件进行数据筛选。jqGrid还支持自定义列头菜单,允许...

    jqGrid4.6完整包

    4. **使用方法**:在 HTML 页面中引入 jqGrid 的 JS 和 CSS 文件,然后通过 JavaScript 创建表格并配置相关选项,例如设置数据源、列定义、编辑选项等。 5. **主要功能**: - 数据加载:支持 JSON、XML、HTML、...

    jqgrid 表格的增删改查以及modal弹出框

    **增加(Add)**:在 jqGrid 中添加新记录通常通过调用 `editGridRow` 方法实现,但在这个项目中,可能会使用一个 modal 弹出框来收集用户输入的数据。当用户点击“添加”按钮时,一个模态窗口会打开,展示用于输入...

    jqGrid_API中文

    首先,要在页面中引入jqGrid所需的CSS和JavaScript文件,通常包括`ui.jqgrid.css`和`jquery.jqGrid.min.js`。然后,你需要创建一个HTML表格元素,并为其添加`id`属性,这将是jqGrid的容器。 ```html ...

    JqGrid插件+JqGridDemo+JqGrid主题

    JqGrid是一款强大的JavaScript表格插件,用于在Web应用程序中展示和操作数据。它基于jQuery库,提供了丰富的功能,如数据排序、筛选、分页、编辑、添加、删除和保存等,极大地增强了网页中表格的交互性和数据管理...

    jqGrid3.6中文文档

    jqGrid 是一个基于 jQuery 的数据网格插件,用于在网页中展示和操作表格数据。它遵循 B/S(浏览器/服务器)架构,服务器负责数据管理,而客户端负责数据显示和交互。jqGrid 提供了一种高效的方式来展示数据库中的...

    JQGrid系列教程 代码

    JQGrid是一款基于jQuery的强大的数据网格插件,用于在Web应用中展示和管理大量的结构化数据。它提供了丰富的功能,如分页、排序、搜索、编辑和添加数据等,是开发人员构建数据密集型用户界面的理想选择。在本教程中...

    jqGrid 属性中文配置文档

    jqGrid 的 autoencode 属性用于设置是否对从服务器返回的数据以及编辑模式下提交的数据进行 HTML 编码。默认值为 false,这个属性可以修改。 autowidth jqGrid 的 autowidth 属性用于设置 grid 的宽度是否根据父...

    jqGrid 中文 英文 文档

    这份文档对于中文使用者来说是一份非常实用的参考资料,能够帮助开发者快速理解和应用jqGrid的各项功能,解决在开发过程中遇到的问题。 **jqGrid 英文文档** jqGrid 3.4英文说明文档(pdf)是针对jqGrid 3.4版本的...

Global site tag (gtag.js) - Google Analytics