jqGrid 编辑 之 表单编辑

jqGrid 编辑 之 表单编辑

原文

jqGrid 可以实时地创建一个表单来添加、删除、修改相关数据

editGridRow

请注意新增记录和修改记录都是这个方法。

这个方法可以创建一个以模态弹窗形式呈现的 form,用来编辑指定行的字段。

这个方法可以使用 基本概念相关的 colModal 属性以及 editurl 属性。

调用形式:

$("#grid_id").jqGrid( "editGridRow", rowid, properties );
  • rowid: 所要编辑行的 id ,传入 "new" 时就是新增记录。
  • properties:对象(键值对),包含如下的属性和事件。

属性

属性名 描述 默认值
top 弹窗的顶部位置 0
left 弹窗的左侧位置 0
width 弹窗的宽度 300
height 弹窗的总体高度 auto
dataheight 弹窗内容区的高度 auto
drag 是否可以拖拽 true
resize 是否可以改变尺寸 true
url 数据传递的后台 url,如果设置了此值,将会覆盖 editurl null
mtype 请求类型,是 "get" 还是 "post" POST
editData 一个对象(键值对),这个键值对将被混入发往服务器的数据中,也就是可以添加额外的数据发往服务器。 empty
recreateForm 设为 true 时,每次弹窗显示时,表单都会根据 colModel 中的最新值来重新生成 false
addedrop 新增一行时,插入表格的位置。 "first",表格顶部, "last",表格尾部。
将属性 reloadAfterSubmit 设为 ture 时,那么该行会按顺序出现。
first
topinfo 顶部信息,设置该值后,将会在弹窗的标题栏下面添加一行,表示顶部信息。 空字符串
bottominfo 底部信息,设置该值后,将会在弹窗的按钮栏下面添加一行,表示底部信息。 空字符串
savekey 数组。保存数据的键盘快捷键。
第一个元素是布尔值,表示是否启用快捷键。
第二个元素是数值,表示对应键的 key code,比如 enter 键是 13。
编辑和添加记录两个操作都使用这个属性,所以快捷键是一样的。
[ false, 13 ]
navkeys 数组。在不同字段中切换焦点。
第一个元素,布尔值,表示是否启用该功能。
第二个元素,数值,对应键的 key code,默认值是 "↑" 键,表示向上移动焦点。
第三个元素,数值,对应键的 key code,默认值是 "↓" 键,表示向下移动焦点。
[ false, 38, 40 ]
checkOnSubmit 这个功能之存在于编辑中。
当设置为 true 时,点击提交并且表单域中的值有改动时会触发该功能,即出现一个弹窗来询问是否保存改动。
false
checkOnUpdate 这个功能在新增和编辑中都可以使用。
关闭对话框时,提示是否保存更改。
false
closeAfterAdd 如果是增加一条记录,那么该值设为 true 时,添加完成就关闭对话框。 false
closeAfterEdit 编辑完成时,关闭对话框。 false
reloadAfterSubmit 异步提交数据之后重新载入表格 true
closeOnEscape 按 "Esc" 键关闭弹窗。 false
ajaxEditOptions 即 ajax 的参数,设置该值会覆盖所有 jqGrid 内置的 ajax 参数。 空对象
viewPageButtons 是否显示表单中的前进、后台按钮。 true
zIndex 设置弹窗的 zIndex 。 950

事件

事件名 描述
afterComplete 新增或编辑一条记录完成,并且所有的 actions 和 事件都执行完成时,触发该事件。
afterComplete: function( xhr, postdata, form ) {}
其中:
xhr:xmlhttprequest 对象
postdata:传递到服务器的数据
form: 表单的 jQuery 对象
afterShowForm 表单显现时触发该事件,接受一个参数,为表单的 jQuery 对象。
beforeInitData 表单初始化并并填充数据时触发。
一个参数,为 form 的 jQuery 对象。
返回 false 时,表单不会被创建。
beforeShowForm 表单显示前触发。带一个参数,表单的 jQuery 对象。
beforeSubmit 请求发送之前触发。
两个参数,第一个是将要传递的数据,第二个是表单的 jQuery 对象。
使用该事件时,请务必返回一个数组,否则出错。
数组的第一个元素是布尔值,表示是否继续发送请求。
第二元素则是字符串,表示出错信息。
onclickSubmit 提交按钮被点击,传递的数据构建完成之后触发该事件。
接受两个参数, editGridRow 方法的属性集合以及将要传递到服务端的键值对。
返回值为一个对象(键值对),将会取代参数中的键值对被传递到服务器。
onInitializeForm 只在表单初始化的时候触发一次。接受一个参数,表单的 jQuery 对象。
onClose 关闭对话框之前触发。返回 false 时,将阻止对话框关闭。
errorTextFormat 请求服务器出错时,触发该事件,用来语义化出错信息。
服务端的返回值做为参数传入该事件,返回值必须是字符串,即新的出错信息。
serializeEditData 序列化传递到服务器的数据。
务必返回序列号之后的数据。
参数是将要传递到服务器的数据。

表单是怎样创建的

表单创建遵循如下规则:

  • 隐藏列以隐藏行的形式包含进表单中

  • 文本框等元素的 id 是 colModel 中对应的 name

  • 文本框等元素的 name 也是来自于 colModel 中的 name

  • 为了更方便的操作数据,表单中的每一行都有一个这样的 id : "tr_" 加上 colModel 中的 name

传送到服务器的数据

显然我们是传递一个 {} 的键值对到服务器,其构成如下:

  • name/value 键值对, name 是表单元素的 name , value 是表单元素的 value

  • 额外的, id: rowid ,这里的 rowid 是编辑的那一行( tr ) 的 id 值

  • 额外的, oper: add 来说明操作类型,比如 add 就是新增一行

  • 如果属性 editData 非空,将会把该值混入到将要传递的数据中

  • 如果事件 onclickSubmit 的返回值非空,将会把该返回值混入到将要传递的数据中

添加数据

方法 editGridRow 同样可以用来新增记录。

语法:

// 注意关键参数 "new"
$("#grid_id").jqGrid('editGridRow', "new", properties );
  • new 表示新增一行,务必和编辑模式区别开来

  • properties 参数,和编辑模式相同,请查看上述表格。

表单的创建

和编辑模式相同

传递到后台的数据

和编辑模式相同

delGridRow

通过这个方法,我们可以删除记录并同步到数据库。

这个方法用到了属性 colModal 和 editurl 。

语法形式:

$( "#grid_id" ).jqGrid( "delGridRow", row_id_s, options );
  • row_id_s

    目标行的 id 可以是一个简单的字符串,或者用逗号隔开字符串表示很多行的 id 。

  • options

    参数,一个对象,可以是下面的值。

属性

属性名 描述 默认值
top 弹窗的顶部位置。 0
left 弹窗的左边位置。 0
width 弹窗的宽度。 300
height 弹窗的高度。 auto
modal 是否模态。 false
url 处理数据的 url 。如果设置了,将会覆盖 editurl 。 null
delData 键值对,将会被传递到后台。
reloadAfterSubmit 在发送删除请求成功后,重新加载表格。 true

事件

和 editGridRow 一样。

传递到服务器的数据

  • 键值对 id: rowids ,rowids 可以是字符串,或者逗号隔开的字符串

  • 键值对 oper: del ,标识该操作为删除

  • 如果 delData 属性非空,将会混入到传递到后台的数据中

  • 事件 onclickSubmit 返回值非空的话,会被混入到传递到后台的数据中

results matching ""

    No results matching ""