转自 http://blog.csdn.net/xueshijun666/article/details/18151055

// var ret = $("#in_store_list_details_grid_table").getChangedCells('dirty'); // Returns the changed cells.

// var ret = $("#in_store_list_details_grid_table").getChangedCells('all'); // Return Rows

单元格编辑

单元格编辑提供给用户修改一行中的单个单元格内容的功能,开发者可以通过ajax或者单元格编辑事件对修改的数据进行处理。

通过下面的行为,单元格编辑支持键盘导航和执行单元格编辑操作

  1. 点击一个不可编辑的单元格会选中它,然后可以通过上下左右键移动到其他单元格
  2. 当移动到一个可编辑的单元格,可以按下Enter键将单元格切换到编辑模式。当再次按下Enter键,或者tab,点击其他单元格将会执行保存操作。按下Esc键取消编辑并且恢复为之前的值。当编辑一个单元格时,光标键始终在此单元格内。
  3. 点击可编辑的单元格会切换到编辑模式下
  4. 单元格设置有'not-editable-cell'样式时,即使colModel中设置过此列为可编辑的,也无法编辑此列。
  5. 提示:colModel中需要配置列为可编辑,并且指定了edittype才会切换到编辑模式,要不无法切换。

安装

要使用单元格编辑模块,你需要在下载页面勾选Cell editing 和 Common这2个功能,然后再点击 Download 下载按钮下载jqGrid。下载地址:http://www.trirand.com/blog/?page_id=6

要看元代可以从src目录中找到 grid.celledit.js 这个文件

属于单元格编辑的属性,事件和方法是jqGrid选项配置中的一个子集。

属性

单元格编辑的具体属性需要在jqGrid方法中配置。

属性名称 类型 描述 默认值
cellEdit boolean 是否启用单元格编辑。设置为true,onSelectRow事件不能使用,鼠标悬停也会被禁用(鼠标悬停在行上) false
cellsubmit string 配置单元格内容保存位置,可用值'remote' 或者'clientArray'
1)设置为remote,单元格内容改变后将启动ajax请求cellurl配置的地址保存到服务器上。此数据行的id和修改的内容被附加到url上。配置了mtype为post提交,那么将会post提交键值对内容。例如,保存一个名为mycell的单元格 {id: rowid, mycell: cellvalue} 将会作为附加数据附加到url上。
2)设置为clientArray,不会发送ajax请求,修改后内容可以条用getChangedCells方法或者通过事件获取到
remote
cellurl string 保存数据的url地址。cellsubmit设置为remote时一定要配置url地址。 null
ajaxCellOptions object 配置保存数据的ajax请求的全局设置。这个配置可以重写所有当前保存数据的ajax请求设置,包括complete事件 empty object

示例

cellsubmit设置为remote,可以使用下面的代码

-收缩JavaScript代码
$('selector').jqGrid({
//其他配置
    'cellEdit' : true,
    'cellsubmit' : 'remote',
    'cellurl' : '/url/to/handling/the/changed/cell/value'
})

cellsubmit设置为clientArray

-收缩JavaScript代码
$('selector').jqGrid({//其他配置    'cellEdit' : true,    'cellsubmit' : 'rclientArray'})

事件

单元格编辑的事件需要在jqGrid方法中配置

下面列出的大部分事件使用下面定义的参数,备注:iRow和iCol经测试值的开始位置不一样。

  • rowid - 数据行的id
  • cellname-单元格名称(colModel定义的name)
  • value - 单元格内容
  • iRow - 单元格所在行的行号(注意不要和rowid搞混),iRow从1开始
  • iCol - 单元格处于行中的列号,iCol从0开始
事件名称 参数 描述
afterEditCell rowid, cellname, value, iRow, iCol 单元格被编辑后出发,例如对应的编辑控件元素被添加DOM后
afterRestoreCell rowid, value, iRow, iCol 调用restoreCell方法或者按ESC键取消编辑后出发
afterSaveCell rowid, cellname, value, iRow, iCol 单元格成功保存后出发,这是更改其他内容的理想的地方
afterSubmitCell serverresponse, rowid, cellname, value, iRow, iCol

数据提交到服务器并返回信息后触发。此方法需要返回[success(boolean),message] 类型的数据。
1)返回[true,””] 表示成功保存了单元格内容。
2)返回[false,”Error message”]表示保存单元格内容失败,并且出现一个对话框显示返回的错误信息。
servereresponse为发送请求的ajax对象,返回值的第二个参数可以通过获取serverresponse.responseText 得到服务器返回的信息

beforeEditCell rowid, cellname, value, iRow, iCol 在编辑单元格前触发
beforeSaveCell rowid, cellname, value, iRow, iCol

在验证输入数据(如果存在)之前触发。事件可以返回新的内容替换之前的内容。

beforeSaveCell : function(rowid,celname,value,iRow,iCol) {
if( some_condition )
{ return “new value”; }
}
new value将替换之前的值

beforeSubmitCell rowid, cellname, value, iRow, iCol

beforeSubmitCell : function(rowid,celname,value,iRow,iCol) {
if( some_condition ) {
return {name1:value1,name2:value2}
}
else
{ return {} }
}
返回的JSON数据将会附加到cellurl提交的数据中。

发送单元格内容到服务器之前触发(cellsubmit配置为remote是有效)。事件可以返回一个新JSON数据一起提交到服务器

errorCell serverresponse, status 保存数据后动态页出错时触发。
1)servereresponse为ajax对象,可以通过serverresponse.responseText获得服务器返回的信息
2)status为错误号
formatCell rowid, cellname, value, iRow, iCol 此事件可以在单元格被编辑前格式化单元格内容,返回格式化后的值。
onSelectCell rowid, celname, value, iRow, iCol 在单元格切换为文本模式后触发
serializeCellData postdata 如果设置了这个事件,在保存单元格时将序列化传给ajax请求的数据。这个方法需要返回序列化后的内容。当自定义数据需要发送到服务器时可以使用此事件。例如,JSON格式的字符串,XML格式的字符串等等。此事件返回的数据将会提交到服务器。

事件调用循序

取决于cellSubmit配置的值为 'remote' 或者 'clientArray'

下面为cellSubmit设置为remote的循序

  1. formatCell (rowid, cellname, value, iRow, iCol) :切换到编辑模式前可以在这里修改单元格内容作为输入控件的值
  2. beforeEditCell (rowid, cellname, value, iRow, iCol) :在单元格切换到编辑模式前触发事件
  3. afterEditCell (rowid, cellname, value, iRow, iCol) :在单元格对应的输入控件加入DOM中触发事件
  4. beforeSaveCell (rowid, cellname, value, iRow, iCol) :在单元格内容保存前触发,你可以在这个事件里面存储发往服务器的内容
  5. beforeSubmitCell (rowid, cellname, value, iRow, iCol) :在数据发到服务器前触发,此方法可以返回json对象附加额外的数据
  6. afterSubmitCell (serverresponse, rowid, cellname, value, iRow, iCol):保存单元格,服务器返回信息后触发,事件可以返回错误信息弹出显示错误的对话框
  7. afterSaveCell (rowid, cellname, value, iRow, iCol) :单元格成功保存后触发
  8. errorCell (serverresponse, status):当服务器返回非200状态出错时触发 (如403, 404, 500状态等)
  9. onSelectCell (rowid, celname, value, iRow, iCol) :在单元格切换为文本模式后触发

cellSubmit设为 clientArray的循序

  1. formatCell (rowid, cellname, value, iRow, iCol) :切换到编辑模式前可以在这里修改单元格内容作为输入控件的值
  2. beforeEditCell (rowid, cellname, value, iRow, iCol):在单元格切换到编辑模式前触发事件
  3. afterEditCell (rowid, cellname, value, iRow, iCol) :在单元格对应的输入控件加入DOM中触发事件
  4. beforeSaveCell (rowid, cellname, value, iRow, iCol):在单元格内容保存前触发
  5. beforeSubmitCell (rowid, cellname, value, iRow, iCol):你可以保存数据到任何地方,包括自定义ajax发送数据到服务器保存【用ajax时注意ajax为异步的,ajax未返回前就会继续自行下面2个事件,所以下面2个事件要根据ajax结果来进行一些判断的时候,ajax需要指定为同步执行】
  6. afterSaveCell (rowid, cellname, value, iRow, iCol) :beforeSubmitCell成功保存单元格内容后触发
  7. onSelectCell (rowid, celname, value, iRow, iCol):在单元格切换为文本模式后触发

方法

下面所有方法调用需要通过jqGrid的实例并且返回相同的jqGrid实例。jqGrid示例图

方法名称 方法参数 描述
editCell iRow, iCol, edit 编辑iRow行号iCol列号的单元格。iRow,iCol定义。如果edit参数设置为false仅选中单元格。设置为true选中单元格并且切换到编辑模式
getChangedCells method

依据method参数(默认值为all)返回修改过的所有行数据(JSON对象数组),设置为dirty,返回的数据包含id和被修改过的数据,未修改过的不返回。

eg,原始数据为[{id:1,name:'showbo1',addr:'桂林'},{id:2,name:'showbo2',addr:'广西桂林'}],修改id为1的name为showbo csdn,调用此方法
1)不传递method参数或者为all,则返回[{id:1,name:'showbo csdn',addr:'桂林'}}]。
2)method设置为dirty,则返回[{id:1,name:'showbo csdn'}]

restoreCell iRow, iCol 在编辑模式下,还原iRow行号,iCol列号的单元格。如上图不管输入框输入什么,调用$('selector').restoreCell(3,1)后将会丢弃输入的内容,还原为name3,并且切换为文本模式。
saveCell iRow, iCol 在编辑模式下,保存iRow行号,iCol列号的单元格内容,并且切换为文本模式

提示

数据如何组成

单元格编辑模式下输入控件结构依照如下规则When the cell is edited and the input elements is created we set the following rules:

  • 编辑控件的id为: 'iRow_'+colModel中配置的name值。例如,编辑第20行下某列,colModel中配置此列name配置值为myname,那么输入控件的id为20_myname
  • 编辑控件的name为colModel配置中的name值。如上面的示例,name为 myname

提交到服务器的内容

提交到服务器的JSON对象({})数据包含

  • 输入控件键值对(name:value pair ),name为此单元格中输入对象的name值
  • 附加(id:rowid)键值对,rowid为此行对应数据的id
  •  beforeSubmitCell事件中返回的非空的JSON数据

jqGrid单元格编辑配置,事件及方法的更多相关文章

  1. easyui datagrid 单元格 编辑时 事件 修改另一单元格

    //datagrid 列数据 $('#acc').datagrid({ columns : [ [ { field : 'fee_lend', title : '收费A', width : 100, ...

  2. Datagrid扩展方法InitEditGrid{支持单元格编辑}

    //-----------------------------------------------------------------/******************************** ...

  3. GridControl单元格编辑验证的方法

    本文实例演示了DevExpress实现GridControl单元格编辑验证的方法,比较实用的功能,具体方法如下: 主要功能代码如下: /// <summary> /// 自定义单元格验证 ...

  4. JQgrid实现全表单元格编辑

    1 jQuery("#baseWageDataValueGrid").jqGrid('setGridParam',{'cellEdit':true}); 2 3 //修改所有td ...

  5. Datagrid扩展方法onClickCell{easyui-datagrid-扩充-支持单元格编辑}

    //-----------------------------------------------------------------/******************************** ...

  6. Swing-JTable检测单元格数据变更事件

    在JTable的初级教程中往往会提到,使用TableModel的 addTableModelListener方法可以监听单元格数据的变更,在其事件处理函,数tableChanged中,可以通过e.ge ...

  7. Bootstrap:Bootstrap_table第一篇:快速用bootstrap_table(支持参数)筛选并展示数据,固定表格前几列,实现表格单元格编辑

    1.准备好css和js文件 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ...

  8. MFC List Control 控件添加单元格编辑,实现可编辑重写

    在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...

  9. sencha gridpanel 单元格编辑

    { xtype: 'gridpanel', region: 'north', height: 150, title: 'My Grid Panel', store: 'A_Test_Store', c ...

随机推荐

  1. knowledgeroot

    knowledgeroot 示例站点 www.globaladmin.cn Knowledgeroot可用于文档管理,知识库管理. 1.基于php开发,支持linux ,windows.2.支持mys ...

  2. mac打开所有软件源

    sudo spctl --master-disable

  3. 微信小程序页面跳转

    一:跳转的数据传递 例如:wxml中写了一个函数跳转: [html] view plain copy <view class="itemWeight" catchtap=&q ...

  4. Visual studio C++ 之空控制台工程添加文件并解决头文件包含问题

    背景 之前都是用的MFC已搭好框架,今天想自己从零开始完成添加文件,编译,并解决文件包含问题,在此做个记录. 正文 首先创建一个Win32控制台应用程序,不要直接点击完成,而是点击下一步,然后选择空项 ...

  5. mongoDB 获取最后插入的文档的ObjectID/_id方法

    http://stackoverflow.com/questions/3338999/get-id-of-last-inserted-document-in-a-mongodb-w-java-driv ...

  6. iOS:一个Cell中设置另外一个Cell中的button

    场景: 子类化Cell中有button,拥有选中式样,点击第一个Cell中的button后,Cell一中的button获得选中式样.可是当点击Cell二中的button时.Cell一中的button选 ...

  7. centos docker

    1.安装docker yum install docker --安装docker service docker start  --启动docker服务 docker --version  --查看版本 ...

  8. Atitit.数据库存储引擎的原理与attilax 总结

    Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...

  9. Xilinx DDR3 IP核使用问题汇总(持续更新)和感悟

    一度因为DDR3的IP核使用而发狂. 后来因为解决问题,得一感悟.后面此贴会完整讲述ddr3 ip的使用.(XILINX K7) 感悟:对于有供应商支持的产品,遇到问题找官方的流程.按照官方的指导进行 ...

  10. python自动生成文件头

    "auto add pyhton header --start autocmd BufNewFile *.py 0r ~/.vim/vim_template/vim_python_heade ...