jqGrid

前段时间做了个小项目,用到了jqgrid,jqgrid看起来还是很强大的,通过一些配置既可以实现对数据的增删改查,但是由于我的一些数据处理比较复杂,如果直接通过jqgrid的配置来实现所有的功能,可能比较难,而且说实话,jqgrid的配置说明不是很清楚,学习成本也不小,所以我只用了grid的展示与分页,一些toolbar按钮操作基本上都是自己写的。

首先看下效果:

下面来看一下如何通过配置实现:

1,首先 定义两个html元素分别代表data grid以及下面的分页

<table id="grid-table"></table>
<div id="grid-pager"></div>

2,js

//首先可以定义对应以上两个元素的id,方便配置
var grid_selector = "#grid-table";
var pager_selector = "#grid-pager";
jQuery(grid_selector).jqGrid({
            url : "/tem/list.do",
            datatype : "json",
            height : 390,
            colNames : [ '操作', '','名称', '编号', '是否推荐', '状态', '创建时间' ],
            colModel : [ {
                name : 'test',
                index : '',
                width : 150,
                fixed : true,
                sortable : false,
                resize : false,
                formatter : function(cellvalue, options, rowObject) {
                    var id = rowObject.id;
                    return applyActions(id, "view,active,inActive,edit,delete");
                }
            }, {
                name : 'siteUrl',
                index : 'siteUrl',
                hidden:true,
            },{
                name : 'name',
                index : 'name',
                width : 160
            }, {
                name : 'sn',
                index : 'sn',
                width : 160
            }, {
                name : 'recommended',
                index : 'recommended',
                width : 100,
                formatter : function(cellvalue, options, rowObject) {
                    return getRecoBtn(rowObject.recommended, rowObject.id);
                    /* if (rowObject.recommended === true) {
                        return "是";
                    }
                    return "否"; */
                }
            }, {
                name : 'status',
                index : 'status',
                width : 70,
                formatter : function(cellvalue, options, rowObject) {
                    return tem_status[rowObject.status];
                }
            }, {
                name : 'createdTime',
                index : 'createdTime',
                width : 120
            }, ],
            jsonReader : {
                root : "data",
                total : "totalpages",
                page : "currpage",
                records : "totalCount",
                repeatitems : false
            },
            rownumbers : true,
            viewrecords : true,
            rowNum : 10,
            rowList : [ 10, 20, 30 ],
            pager : pager_selector,
            altRows : true,
            //toppager: true,

            multiselect : true,
            //multikey: "ctrlKey",
            multiboxonly : true,

            loadComplete : function() {
                var table = this;
                setTimeout(function() {
                    styleCheckbox(table);
                    updateActionIcons(table);
                    updatePagerIcons(table);
                    enableTooltips(table);
                }, 0);
            },

            //editurl: "/dummy.html",//nothing is saved
            caption : "模版列表",
            autowidth : true,

        });
        $(window).triggerHandler('resize.jqGrid');//trigger window resize to make the grid get the correct size
grid 配置

说明一下:

    a: 数据的接收解析,通过jsonReader配置,(服务端的数据格式下面细说)其中的root对应数据list名称,total:共几页,page:当前页,records:共多少条数据

    b:每一行的数据通过配置name对应bean中的属性即可

    c:分页配置参数rowNum,默认每页行数,rowList,可选的每页行数,pager要指向页面中定义的page标签id

    d:pager 栏目中的自定义按钮,我是如下定义的

function applyNavButton(option) {
    // grid-pager_left
    var table = $("<table></table>");

    table.attr("cellspacing", "0");
    table.attr("cellpadding", "0");
    table.attr("border", "0");
    table.addClass("ui-pg-table");
    table.addClass("navtable");
    table.css({
        "float" : "left",
        "table-layout" : "auto"
    });

    var tr = $("<tr></tr>");
    tr.appendTo(table);
    if (option.active == true) {
        var _td = createTD(5, option.activeFunction);
        _td.appendTo(tr);
    }
    if (option.inActive == true) {
        var _td = createTD(6, option.inActiveFunction);
        _td.appendTo(tr);
    }

    if (option.add == true) {
        var _td = createTD(1, option.addFunction);
        _td.appendTo(tr);
    }
    if (option.del == true) {
        var _td = createTD(2, option.delFunction);
        _td.appendTo(tr);
    }
    if (option.refresh == true) {
        var _td = createTD(3, option.refreshFunction);
        _td.appendTo(tr);
    }
    if (option.search == true) {
        var _td = createTD(4, option.searchFunction);
        _td.appendTo(tr);
    }
    console.log(table);
    table.appendTo($("#grid-pager_left"));

}

function createTD(type, fn) {

    var iconClass;
    var hoverTitle;
    switch (type) {
    case 1:
        iconClass = "ui-icon ace-icon fa fa-plus-circle purple";
        hoverTitle = "添加一条记录";
        break;
    case 2:
        iconClass = "ui-icon ace-icon fa fa-trash-o red";
        hoverTitle = "删除选中记录";
        break;
    case 3:
        iconClass = "ui-icon ace-icon fa fa-refresh green";
        hoverTitle = "刷新记录";
        break;

    case 4:
        iconClass = "ui-icon ace-icon fa fa-search orange";
        hoverTitle = "搜索";
        break;

    case 5:
        iconClass = "ui-icon ace-icon fa fa-check green";
        hoverTitle = "激活";
        break;

    case 6:
        iconClass = "ui-icon ace-icon fa fa-ban grey";
        hoverTitle = "下线";
        break;

    default:
        break;
    }
    var td = $("<td></td>");
    var _div = $("<div></div>");
    var _span = $("<span></span>");

    _div.appendTo(td);
    _span.appendTo(_div);
    td.on("click", fn);

    _div.addClass("ui-pg-div");
    td.addClass("ui-pg-button ui-corner-all");
    td.attr("data-original-title", hoverTitle);
    _span.addClass(iconClass);

    return td;

}
applyNavButton

然后在页面中

applyNavButton({
            add : true,
            addFunction : function() {
                addFunction();
            },
            del : true,
            delFunction : delFunction,
            refresh : true,
            refreshFunction : refreshFunction,
            search : true,
            searchFunction : searchFunction,
            active : true,
            activeFunction : activeFunction,
            inActive : true,
            inActiveFunction : inActiveFunction,
        });

对应的不同操作的方法,可通过配置绑定。在每一行中的按钮也是类似。

 

服务端配置:

    @RequestMapping("/list.do")
    public @ResponseBody JSONObject customerList(
            HttpServletRequest request,
            @RequestParam(value = "page", required = false, defaultValue = "1") Integer page,
            @RequestParam(value = "rows", required = false, defaultValue = "10") Integer pageSize,
            Model model) {

        List<SearchBean> sbeans = convert2SearchBean(request);
        sbeans.add(new SearchBean("status", "4", "!="));
        Pageable pageable = new PageRequest(page - 1, pageSize, new Sort(
                Direction.ASC, "order"));
        Page<TemplateDto> list = templateService.find(pageable,
                sbeans.toArray(new SearchBean[] {}));
        return this.toJSONResult(list.getTotalElements(), list.getContent(),
                pageSize, page);
    }

分页接收的参数,page请求第n页数据,rows:对应每页数据条数

需要返回的参数,返回4个参数对应上面的jsonreader中已经说明,只需将参数名对应配置即可

原文地址:https://www.cnblogs.com/china2k/p/4287094.html