转自 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. HTML5 Canvas 笛卡尔坐标系转换尝试

    <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...

  2. 移动负载均衡技术(MBL)

    移动负载均衡技术(MBL)   转至元数据结尾 附件:5 被admin添加,被admin最后更新于四月 27, 2015 转至元数据起始 互联网技术发展到今天,已经进入移动时代,很多在传统CS和BS的 ...

  3. Android创建JSON格式数据

    Android创建JSON格式数据 作为上一篇博客的补充,简单那解说了一下Android创建JSON格式数据的小Demo. 1. 创建JSON格式数据 对于Android创建JSON格式数据.因为An ...

  4. jumpserver-v0.5.0 应用图解

    一. Jumpserver启动 Python: 版本 3.6 1.1 启动Jumpserver 先进入Python虚拟环境 [root@localhost ~]# source /opt/py3/bi ...

  5. 使用CAsyncSocket总结

    最近想起CAsyncSocket这个类,记得很早以前用过,现在却想不起来怎么用了,翻了翻以前的代码又看了看msdn感觉这个类做简单的异步socket太简单了,几行代码就可以搞定,在此先做个总结. 不管 ...

  6. tcp/ip ---数据链路层

  7. 安装ecshop默认安装后的错误解决方案

    1,统一解决 php.ini中的配置 error_reporting = E_ALL | E_STRICT 这是说,显示那些不符合编码规范的警告(coding standards warnings). ...

  8. unity, write/read txt file

    在Assets下新建文件夹StreamingAssets.然后下面代码可在其中生成test.txt文件,并读写: using UnityEngine;using System.Collections; ...

  9. Angularjs学习笔记3_datepicker

    1.使用jquery-ui +angular      <script src="http://libs.useso.com/js/jquery/1.11.1/jquery.js&qu ...

  10. grub.conf文件说明

    default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux ...