jqgrid記錄


最近在跟着學長做一個管理系統,在學習java的同時,接觸到了jgrid,不得不說jqgrid十分的強大表格控件。分頁,排序,搜索,編輯,刪除。。。功能很豐富

首先在js中定義表格模板:

$("#table_list_2").jqGrid({
    url:url,
    // data:mydata,
    datatype: "json",
    height:380,
    autowidth:true,
    shrinkToFit:true,
    multiSort: true,
    rownumbers: true,  //是否顯示行號
    multiselect: true,  //是否有多選功能
    rowNum:10,
    rowList:[10,20,30],
    emptyrecords : "沒有記錄",


//下面的colName和colModel是對應的,,colNames的值對應表格中的表頭,而colModel的值對應於下面幾行的值,所以列數要相等
//注意colModel中name對應的是json數據的鍵,所以要根據后台傳來的數據來設置



    colNames:["國家","學校","起始時間","終止時間","詳情","操作"],
    colModel:[{name:"country",index:"country",editable:true,width:60,search:true,
            editrules: {
                required: true
            },

//searchoptions是設置表格中用來搜索的條件的,eq表示相等,ne為不等
            searchoptions: {
                sopt: ['eq', 'ne']
            }
        },

        {name:"organization",index:"organization",editable:true,width:90,
            editrules: {
                required: true
            },
            searchoptions: {
                sopt: ['eq', 'ne']
            }},

        {name:"start_date",index:"start_date",editable:true,width:100,sorttype:"date",formatter:"date",
            editrules: {
                required: true
            },

//這里調用了laydate的插件,對比其他的日期插件,個人認為是比較好看的
            editoptions: {
                dataInit: function (element) {
                    $(element).attr("readonly", "readonly");
                    $(element).on("click", function () {
                        laydate({istime: false, format: 'YYYY-MM-DD', choose: function(dates){ //選擇好日期的回調
                            $(element).trigger("change");
                        }})
                    })
                }
            },
            searchoptions: {
                sopt: ['eq', 'ne', 'lt', 'le', 'gt'],
                dataInit: function (element) {
                    $(element).attr("readonly", "readonly");
                    $(element).on("click", function () {
                        laydate({istime: false, format: 'YYYY-MM-DD', choose: function(dates){ //選擇好日期的回調
                            $(element).trigger("change");
                        }})
                    })
                }
            }},

        {name:"end_date",index:"end_date",editable:true,width:100,sorttype:"date",formatter:"date",
            editrules: {
                required: true
            },
            editoptions: {
                dataInit: function (element) {
                    $(element).attr("readonly", "readonly");
                    $(element).on("click", function () {
                        laydate({istime: false, format: 'YYYY-MM-DD', choose: function(dates){ //選擇好日期的回調
                            $(element).trigger("change");
                        }})
                    })
                }
            },
            searchoptions: {
                sopt: ['eq', 'ne', 'lt', 'le', 'gt'],
                dataInit: function (element) {
                    $(element).attr("readonly", "readonly");
                    $(element).on("click", function () {
                        laydate({istime: false, format: 'YYYY-MM-DD', choose: function(dates){ //選擇好日期的回調
                            $(element).trigger("change");
                        }})
                    })
                }
            }},
        {name:"details",index:"details",editable:true,width:80},
        {
            sortable: false,
            formatter : 'actions', // 在每一行顯示編輯按鈕與刪除按鈕
            formatoptions : {          // 按鈕設定
                url: updateUrl,  //in-line 更新對應的接口
                delOptions: {
                    url: deleteUrl,  //刪除對應接口
                    afterSubmit: function (response, postdata) {
                        var result = response.responseJSON.success;
                        return [result, '刪除失敗!', postdata.id];
                    }
                }
            }
        }],
    pager:"#pager_list_2",

//排序為降序
    sortorder: "desc",
    viewrecords:true,
    //設置jqGrid將要向Server傳遞的參數名稱,用來分頁
    prmNames: {
        rows: 'limit',
        page: 'page'
    },
    jsonReader: {
        root: 'result',
        total: 'pages',
        page: 'page',
        records: 'recores',
        repeatitems: false
    },
    caption:"出國經歷",
    add:true,edit:true,addtext:"Add",edittext:"Edit",hidegrid:false
)};

 




2. jqgird編輯
  這里有兩種編輯形式,1.行內編輯。

  行內編輯的樣式是這樣的比較方便吧

行內編輯的代碼是需要在colModel中加入的:
{
                sortable: false,
                formatter : 'actions', // 在每一行顯示編輯按鈕與刪除按鈕
                formatoptions : {          // 按鈕設定
                    url: updateUrl,  //in-line 更新對應的接口
                    delOptions: {
                        url: deleteUrl,  //刪除對應接口
                        afterSubmit: function (response, postdata) {
                            var result = response.responseJSON.success;
                            return [result, '刪除失敗!', postdata.id];
                        }
                    }
                }
            }
 
        

這里的updateUrl和deleteUrl我是在前面便先定義了的,值為后台操縱數據庫的接口,我在java里是controller的方法。




             2.彈窗編輯。


彈窗編輯的樣式
這里的代碼是類似的:
{//編輯按鈕選項
                key: true,
                url: updateUrl,
                mtype: 'POST',
                editCaption: "編輯",
                restoreAfterError: true,
                afterSubmit : function(response, postdata) {
                    var result = response.responseJSON.success;
                    return [result,'更新失敗!',postdata.id];
                },
                closeAfterEdit: true,
                extraparam: {

                }
            }
 
        

這些都是jqgrid自帶的,這里的編輯按鈕是彈窗編輯的。。

 

 

3.分頁

//設置jqGrid將要向Server傳遞的參數名稱
        prmNames: {
            rows: 'limit',
            page: 'page'
        },

后台將會接收傳來的限制參數,來顯示當前頁應該顯示的數據,,后台根據傳來的當前頁數來判斷 下一頁的記錄

查看NetWork的Headers信息,發現傳到后台的limit是每頁最多顯示記錄條數,page為當前頁。

 

4.排序和搜索

//搜素按鈕對應搜索框設置
                multipleSearch:true,   //是否開啟多條件搜索功能
                caption: "搜索...",  //搜索模態框標頭
                multipleGroup: true, //復雜條件與或搜索
                Find: "搜索",  //搜索按鈕顯示名稱
                Reset: "重置", //重置按鈕名稱
                // top: 100,
                showQuery: false,  //是否在搜索模態框中顯示生成的搜索條件語句
                searchOnEnter: true,  //按下回車建是否開始搜索
                groupOps: [ { op: "AND", text: "滿足以下所有條件" }, { op: "OR", text: "滿足以下任意條件" } ],  //邏輯條件名稱設置
                // jqModal: true,
                // modal: true,
                drag: true, //搜索模態框是否能夠被拖拽動
            }

根據Headers顯示:

sidx表示排序的列,也就是根據哪一列排序,

sord表示排序的規則,filters代表過濾元素,即

按照這些要求進行搜索

后台將接收過濾條件進行操作

 

$(window).bind("resize",function(){
var width=$(".jqGrid_wrapper").width();
$("#table_list_2").setGridWidth(width)
});
綁定事件,

 

 

 

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM