快速掌握-jqgrid

是什么

jqgrid是一个基于jquery的表格控件,可以直接使用ajax的方式和服务器端通信。获取数据并渲染表格

jqgrid 做了什么

他内部实现了 从服务器端获取数据,通过监听请求前、请求中、请求后等状态,可以方便的获取和修改数据并绘制到表格中。在内部也对数据做了一些缓存优化,在处理 table 表格数据的时候,有一定的优势。

jqGrid参数

autowidth boolean 如果为ture时,则当表格在首次被创建时会根据父元素比例重新调整表格宽度。如果父元素宽度改变,为了使表格宽度能够自动调整则需要实现函数:setGridWidth false cellLayout integer 定义了单元格padding + border 宽度。通常不必修改此值。初始值为 cellEdit boolean 启用或者禁用单元格编辑功能 false cellsubmit String 定义了单元格内容保存位置 ‘remote’ cellurl String 单元格提交的url datastr String xmlstring或者jsonstring deselectAfterSort boolean 只有当datatype为local时起作用。当排序时不选择当前行 direction string 表格中文字的显示方向,从左向右(ltr)或者从右向左(rtr) editurl string 定义对form编辑时的url emptyrecords string 当返回的数据行数为0时显示的信息。只有当属性viewrecords 设置为ture时起作用 ExpandColClick boolean 当为true时,点击展开行的文本时,treeGrid就能展开或者收缩,不仅仅是点击图片 ExpandColumn string 指定那列来展开tree grid,默认为第一列,只有在treeGrid为true时起作用 footerrow[ a3] boolean 当为true时,会在翻页栏之上增加一行 false forceFit boolean 当为ture时,调整列宽度不会改变表格的宽度。当shrinkToFit 为false时,此属性会被忽略 false gridstate string 定义当前表格的状态:'visible' or 'hidden' visible gridview boolean 构造一行数据后添加到grid中,如果设为true则是将整个表格的数据都构造完成后再添加到grid中,但treeGrid, subGrid, or afterInsertRow 不能用 false height mixed 表格高度,可以是数字,像素值或者百分比 hiddengrid boolean 当为ture时,表格不会被显示,只显示表格的标题。只有当点击显示表格的那个按钮时才会去初始化表格数据。 false hidegrid boolean 启用或者禁用控制表格显示、隐藏的按钮,只有当caption属性不为空时起效 hoverrows boolean 当为false时mouse hovering会被禁用 false jsonReader array 描述json 数据格式的数组 lastpage integer 只读属性,定义了总页数 lastsort integer 只读属性,定义了最后排序列的索引,从0开始 loadonce boolean 如果为ture则数据只从服务器端抓取一次,之后所有操作都是在客户端执行,翻页功能会被禁用 false loadtext string 当请求或者排序时所显示的文字内容 Loading.... loadui string 当执行ajax请求时要干什么。 disable 禁用ajax执行提示; enable 默认,当执行ajax请求时的提示; block 启用Loading提示,但是阻止其他操作 enable multikey string 只有在multiselect设置为ture时起作用,定义使用那个key来做多选。 shiftKey altKey ctrlKey multiboxonly boolean 只有当multiselect = true.起作用,当multiboxonly 为ture时只有选择checkbox才会起作用 false multiselect boolean 定义是否可以多选 false multiselectWidth integer 当multiselect为true时设置multiselect列宽度 integer 设置初始的页码 pagerpos string 指定分页栏的位置 center pgbuttons boolean 是否显示翻页按钮 pginput boolean 是否显示跳转页面的输入框 pgtext string 当前页信息 prmNames array Default valuesprmNames: {page:“page”,rows:“rows”, sort: “sidx”,order: “sord”, search:“_search”, nd:“nd”, npage:null}当参数为null时不会被发到服务器端 postData array 此数组内容直接赋值到url上,参数类型:{name1:value1…} 空array reccount integer 只读属性,定义了grid中确切的行数。通常情况下与records属性相同,但有一种情况例外,假如rowNum=15,但是从服务器端返回的记录数是20,那么records值是20,但reccount值仍然为15,而且表格中也只显示15条记录。 recordpos string 定义了记录信息的位置: left, center, right right records integer 只读属性,定义了返回的记录数 recordtext string 显示记录数信息。{0} 为记录数开始,{1}为记录数结束。viewrecords为ture时才能起效,且总记录数大于0时才会显示此信息 scroll boolean 创建一个动态滚动的表格,当为true时,翻页栏被禁用,使用垂直滚动条加载数据,且在首次访问服务器端时将加载所有数据到客户端。当此参数为数字时,表格只控制可见的几行,所有数据都在这几行中加载 false scrollOffset integer 设置垂直滚动条宽度 scrollrows boolean 当为true时让所选择的行可见 false selarrrow array 只读属性,用来存放当前选择的行 array selrow string 只读属性,最后选择行的id shrinkToFit boolean 此属性用来说明当初始化列宽度时候的计算类型,如果为ture,则按比例初始化列宽度。如果为false,则列宽度使用colModel指定的宽度 sortable boolean 是否可排序 false sortname string 排序列的名称,此参数会被传到后台 sortorder string 排序顺序,升序或者降序(asc or desc) subGrid boolean 是否使用suggrid false subGridModel array subgrid模型 array subGridType mixed 如果为空则使用表格的dataType subGridUrl string 加载subgrid数据的url,jqGrid会把每行的id值加到url中 subGridWidth integer subgrid列的宽度 toolbar array 表格的工具栏。数组中有两个值,第一个为是否启用,第二个指定工具栏位置(相对于body layer),如:[true,”both”] 。工具栏位置可选值:“top”,”bottom”, “both”. 如果工具栏在上面,则工具栏id为“t_”+表格id;如果在下面则为“tb_”+表格id;如果只有一个工具栏则为 “t_”+表格id [false,''] totaltime integer 只读属性,计算加载数据的时间。目前支持xml跟json数据 treedatatype mixed 数据类型,通常情况下与datatype相同,不会变 treeGrid boolean 启用或者禁用treegrid模式 false treeGridModel string treeGrid所使用的方法 Nested treeIcons array 树的图标,默认值:{plus:'ui-icon-triangle-1-e',minus:'ui-icon-triangle-1-s',leaf:'ui-icon-radio-off'} treeReader array 扩展表格的colModel且加在colModel定义的后面 tree_root_level numeric r oot元素的级别, userData array 从request中取得的一些用户信息 array userDataOnFooter boolean 当为true时把userData放到底部,用法:如果userData的值与colModel的值相同,那么此列就显示正确的值,如果不等那么此列就为空 false viewrecords boolean 是否要显示总记录数 false viewsortcols array 定义排序列的外观跟行为。数据格式:[false,'vertical',true].第一个参数是说,是否都要显示排序列的图标,false就是只显示 当前排序列的图标;第二个参数是指图标如何显示,vertical:排序图标垂直放置,horizontal:排序图标水平放置;第三个参数指单击功能,true:单击列可排序,false:单击图标排序。说明:如果第三个参数为false则第一个参数必须为ture否则不能排序 width number 如果设置则按此设置为主,如果没有设置则按colModel中定义的宽度计算 xmlReader array 对xml数据结构的描述 afterInsertRow rowidrowdatarowelem 当插入每行时触发。rowid插入当前行的id;rowdata插入行的数据,格式为name: value,name为colModel中的名字 beforeRequest 向服务器端发起请求之前触发此事件但如果datatype是一个function时例外 beforeSelectRow rowid, e 当用户点击当前行在未选择此行时触发。rowid:此行id;e:事件对象。返回值为ture或者false。如果返回true则选择完成,如果返回false则不会选择此行也不会触发其他事件 gridComplete 当表格所有数据都加载完成而且其他的处理也都完成时触发此事件,排序,翻页同样也会触发此事件 loadComplete 当从服务器返回响应时执行,xhr:XMLHttpRequest 对象 loadError xhr,status,error 如果请求服务器失败则调用此方法。xhr:XMLHttpRequest 对象;satus:错误类型,字符串类型;error:exception对象 onCellSelect rowid,iCol,cellcontent,e 当点击单元格时触发。rowid:当前行id;iCol:当前单元格索引;cellContent:当前单元格内容;e:event对象 ondblClickRow rowid,iRow,iCol,e 双击行时触发。rowid:当前行id;iRow:当前行索引位置;iCol:当前单元格位置索引;e:event对象 onHeaderClick gridstate 当点击显示/隐藏表格的那个按钮时触发;gridstate:表格状态,可选值:visible or hidden onPaging pgButton 点击翻页按钮填充数据之前触发此事件,同样当输入页码跳转页面时也会触发此事件 onRightClickRow rowid,iRow,iCol,e 在行上右击鼠标时触发此事件。rowid:当前行id;iRow:当前行位置索引;iCol:当前单元格位置索引;e:event对象 onSelectAll aRowids,status multiselect为ture,且点击头部的checkbox时才会触发此事件。aRowids:所有选中行的id集合,为一个数组。 status:boolean变量说明checkbox的选择状态,true选中false不选中。无论checkbox是否选择,aRowids始终有 值 onSelectRow rowid,status 当选择行时触发此事件。rowid:当前行id;status:选择状态,当multiselect 为true时此参数才可用 onSortCol index,iCol,sortorder 当点击排序列但是数据还未进行变化时触发此事件。index:name在colModel中位置索引;iCol:当前单元格位置索引;sortorder:排序状态:desc或者asc resizeStart event, index 当开始改变一个列宽度时触发此事件。event:event对象;index:当前列在colModel中位置索引 resizeStop newwidth, index 当列宽度改变之后触发此事件。newwidth:列改变后的宽度;index:当前列在colModel中的位置索引 serializeGridData postData 向服务器发起请求时会把数据进行序列化,用户自定义数据也可以被提交到服务器端
jQuery("#jqgrid").jqGrid({
  url: APIPAGE["list"],
  datatype: "JSON",
  mtype: "POST",
  ajaxGridOptions: { contentType: "application/json;charset=utf-8" },
  serializeGridData: function (postData) {
    var param = {};
    //分页条件
    param.pageNumber = postData.page;
    param.pageSize = postData.rows;
    return JSON.stringify(param);
  height: "auto",
  colNames: [
    "5寸图",
    "倒计时间(s)",
    "图片链接地址",
    "是否传用户参数",
    "状态",
    "操作",
  colModel: [
      name: "imageUrl",
      index: "imageUrl",
      sortable: false,
      formatter: function (cellvalue, options, rowObj) {
        return "<img src=" + cellvalue + ' width="50" height="50"/>';
    { name: "countdownTime", index: "countdownTime", sortable: false },
    { name: "linkAddress", index: "linkAddress", sortable: false },
      name: "isTransferParams",
      index: "isTransferParams",
      sortable: false,
      formatter: function (cellvalue, options, rowObj) {
        if (cellvalue == "Y") {
          return "是";
        } else {
          return "否";
      name: "status",
      index: "status",
      sortable: false,
      formatter: function (cellvalue, options, rowObj) {
        if (cellvalue == "START") {
          return "启用";
        } else {
          return "禁用";
    { name: "act", index: "act", sortable: false },
  rowList: [5, 10, 20],
  pager: "#pjqgrid",
  viewrecords: false,
  jsonReader: {
    root: "data.list",
    page: "data.page.pageNumber",
    total: "data.page.pageTotal",
    records: "data.page.recordTotal",
    repeatitems: false,
    cell: "cell",
    id: "id",
  gridComplete: function () {
    var ids = jQuery("#jqgrid").jqGrid("getDataIDs");
    for (var i = 0; i < ids.length; i++) {
      var cl = ids[i];
        "<button class='btn btn-xs btn-danger' data-toggle='tooltip' data-placement='right' title='停用' onclick=\"deleteScreen('" +
        "');\"><i class='fa fa-pencil-square-o'></i>&nbsp;&nbsp;停用</button>&nbsp;";
        "<button class='btn btn-xs btn-primary' data-toggle='tooltip' data-placement='right' title='修改' onclick=\"editScreen('" +
        "');\"><i class='fa fa-lock'></i>&nbsp;&nbsp;修改</button>&nbsp;";
      var rowData = $("#jqgrid").jqGrid("getRowData", cl);
      jQuery("#jqgrid").jqGrid("setRowData", ids[i], { act: ce + be });
    $(".jqgrid-rownum").removeClass("ui-state-default");
  loadComplete: function () {},
  caption: null,
  autowidth: true,
// 弹框-闪屏-修改
function editScreen(rowId) {
  var rowData = jQuery("#jqgrid").jqGrid("getRowData", rowId);
  //$("#editScreenModal").modal('show');
  console.log(rowData);