jqGrid模版

需要js文件包jquery-ui-1.9.2、jquery.jqGrid-4.5.4

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>jqGrid</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

     <link rel="stylesheet" type="text/css" media="screen" href="jquery-ui-1.9.2/themes/base/jquery-ui.css" />
     <link rel="stylesheet" type="text/css" media="screen" href="jquery.jqGrid-4.5.4/css/ui.jqgrid.css" />
    <link rel="stylesheet" type="text/css" href="jquery.jqGrid-4.5.4/plugins/ui.multiselect.css" />

    <style type="text/css">
        html, body { font-size: 75%; }
    </style>

    <script type="text/javascript" src="jquery.jqGrid-4.5.4/js/jquery-1.9.0.min.js"></script>
    <script type="text/javascript" src="jquery-ui-1.9.2/ui/jquery-ui.js"></script>
    <script type="text/javascript" src="jquery.jqGrid-4.5.4/plugins/ui.multiselect.js"></script>
     <script type="text/javascript" src="jquery.jqGrid-4.5.4/js/i18n/grid.locale-cn.js"></script>
     <script type="text/javascript" src="jquery.jqGrid-4.5.4/js/jquery.jqGrid.min.js"></script>




    <script type="text/javascript">
        $.jgrid.extend({
            columnChooser : function(opts) {
                var self = this;
                if($("#colchooser_"+$.jgrid.jqID(self[0].p.id)).length ) { return; }
                var selector = $('<div id="colchooser_'+self[0].p.id+'" style="position:relative;overflow:hidden"><div><select multiple="multiple"></select></div></div>');
                var select = $('select', selector);
               
                function insert(perm,i,v) {
                    if(i>=0){
                        var a = perm.slice();
                        var b = a.splice(i,Math.max(perm.length-i,i));
                        if(i>perm.length) { i = perm.length; }
                        a[i] = v;
                        return a.concat(b);
                    }
                }
                opts = $.extend({
                    "width" : 420,
                    "height" : 240,
                    "classname" : null,
                    "done" : function(perm) { if (perm) { self.jqGrid("remapColumns", perm, true); } },
                    /* msel is either the name of a ui widget class that
                       extends a multiselect, or a function that supports
                       creating a multiselect object (with no argument,
                       or when passed an object), and destroying it (when
                       passed the string "destroy"). */
                    "msel" : "multiselect",
                    /* "msel_opts" : {}, */
       
                    /* dlog is either the name of a ui widget class that
                       behaves in a dialog-like way, or a function, that
                       supports creating a dialog (when passed dlog_opts)
                       or destroying a dialog (when passed the string
                       "destroy")
                       */
                    "dlog" : "dialog",
       
                    /* dlog_opts is either an option object to be passed
                       to "dlog", or (more likely) a function that creates
                       the options object.
                       The default produces a suitable options object for
                       ui.dialog */
                    "dlog_opts" : function(opts) {
                        var buttons = {};
                        buttons[opts.bSubmit] = function() {
                            opts.apply_perm();
                            opts.cleanup(false);
                        };
                        buttons[opts.bCancel] = function() {
                            opts.cleanup(true);
                        };
                        return $.extend(true, {
                            "buttons": buttons,
                            "close": function() {
                                opts.cleanup(true);
                            },
                            "modal" : opts.modal ? opts.modal : false,
                            "resizable": opts.resizable ? opts.resizable : true,
                            "width": opts.width+20,
                            resize: function (e, ui) {
                                var $container = $(this).find('>div>div.ui-multiselect'),
                                    containerWidth = $container.width(),
                                    containerHeight = $container.height(),
                                    $selectedContainer = $container.find('>div.selected'),
                                    $availableContainer = $container.find('>div.available'),
                                    $selectedActions = $selectedContainer.find('>div.actions'),
                                    $availableActions = $availableContainer.find('>div.actions'),
                                    $selectedList = $selectedContainer.find('>ul.connected-list'),
                                    $availableList = $availableContainer.find('>ul.connected-list'),
                                    dividerLocation = opts.msel_opts.dividerLocation || $.ui.multiselect.defaults.dividerLocation;
       
                                $container.width(containerWidth); // to fix width like 398.96px                             
                                $availableContainer.width(Math.floor(containerWidth*(1-dividerLocation)));
                                $selectedContainer.width(containerWidth - $availableContainer.outerWidth() - ($.browser.webkit ? 1: 0));
       
                                $availableContainer.height(containerHeight);
                                $selectedContainer.height(containerHeight);
                                $selectedList.height(Math.max(containerHeight-$selectedActions.outerHeight()-1,1));
                                $availableList.height(Math.max(containerHeight-$availableActions.outerHeight()-1,1));
                            }
                        }, opts.dialog_opts || {});
                    },
                    /* Function to get the permutation array, and pass it to the
                       "done" function */
                    "apply_perm" : function() {
                        $('option',select).each(function(i) {
                            if (this.selected) {
                                self.jqGrid("showCol", colModel[this.value].name);
                            } else {
                                self.jqGrid("hideCol", colModel[this.value].name);
                            }
                        });
                       
                        var perm = [];
                        //fixedCols.slice(0);
                        $('option:selected',select).each(function() { perm.push(parseInt(this.value,10)); });
                        $.each(perm, function() { delete colMap[colModel[parseInt(this,10)].name]; });
                        $.each(colMap, function() {
                            var ti = parseInt(this,10);
                            perm = insert(perm,ti,ti);
                        });
                        if (opts.done) {
                            opts.done.call(self, perm);
                        }
                    },
                    /* Function to cleanup the dialog, and select. Also calls the
                       done function with no permutation (to indicate that the
                       columnChooser was aborted */
                    "cleanup" : function(calldone) {
                        call(opts.dlog, selector, 'destroy');
                        call(opts.msel, select, 'destroy');
                        selector.remove();
                        if (calldone && opts.done) {
                            opts.done.call(self);
                        }
                    },
                    "msel_opts" : {}
                }, $.jgrid.col, opts || {});
                if($.ui) {
                    if ($.ui.multiselect ) {
                        if(opts.msel == "multiselect") {
                            if(!$.jgrid._multiselect) {
                                // should be in language file
                                alert("Multiselect plugin loaded after jqGrid. Please load the plugin before the jqGrid!");
                                return;
                            }
                            opts.msel_opts = $.extend($.ui.multiselect.defaults,opts.msel_opts);
                        }
                    }
                }
                if (opts.caption) {
                    selector.attr("title", opts.caption);
                }
                if (opts.classname) {
                    selector.addClass(opts.classname);
                    select.addClass(opts.classname);
                }
                if (opts.width) {
                    $(">div",selector).css({"width": opts.width,"margin":"0 auto"});
                    select.css("width", opts.width);
                }
                if (opts.height) {
                    $(">div",selector).css("height", opts.height);
                    select.css("height", opts.height - 10);
                }
                var colModel = self.jqGrid("getGridParam", "colModel");
                var colNames = self.jqGrid("getGridParam", "colNames");
                var colMap = {}, fixedCols = [];
       
                select.empty();
                $.each(colModel, function(i) {
                    colMap[this.name] = i;
                    if (this.hidedlg) {
                        if (!this.hidden) {
                            fixedCols.push(i);
                        }
                        return;
                    }
       
                    select.append("<option value='"+i+"' "+
                                  (this.hidden?"":"selected='selected'")+">"+colNames[i]+"</option>");
                });
                function call(fn, obj) {
                    if (!fn) { return; }
                    if (typeof fn == 'string') {
                        if ($.fn[fn]) {
                            $.fn[fn].apply(obj, $.makeArray(arguments).slice(2));
                        }
                    } else if ($.isFunction(fn)) {
                        fn.apply(obj, $.makeArray(arguments).slice(2));
                    }
                }
       
                var dopts = $.isFunction(opts.dlog_opts) ? opts.dlog_opts.call(self, opts) : opts.dlog_opts;
                call(opts.dlog, selector, dopts);
                var mopts = $.isFunction(opts.msel_opts) ? opts.msel_opts.call(self, opts) : opts.msel_opts;
                call(opts.msel, select, mopts);
                // fix height of elements of the multiselect widget
                var resizeSel = "#colchooser_"+$.jgrid.jqID(self[0].p.id),
                    $container = $(resizeSel + '>div>div.ui-multiselect'),
                    $selectedContainer = $(resizeSel + '>div>div.ui-multiselect>div.selected'),
                    $availableContainer = $(resizeSel + '>div>div.ui-multiselect>div.available'),
                    containerHeight = $container.height(),
                    $selectedActions = $selectedContainer.find('>div.actions'),
                    $availableActions = $availableContainer.find('>div.actions'),
                    $selectedList = $selectedContainer.find('>ul.connected-list'),
                    $availableList = $availableContainer.find('>ul.connected-list');
                $container.height($container.parent().height()); // increase the container height
                containerHeight = $container.height();
                $selectedContainer.height(containerHeight);
                $availableContainer.height(containerHeight);
                $selectedList.height(Math.max(containerHeight-$selectedActions.outerHeight()-1,1));
                $availableList.height(Math.max(containerHeight-$availableActions.outerHeight()-1,1));
                // extend the list of components which will be also-resized
                selector.data('dialog').uiDialog.resizable("option", "alsoResize",
                    resizeSel + ',' + resizeSel +'>div' + ',' + resizeSel + '>div>div.ui-multiselect');
            }
        });
        /*global $ */
        $(function () {
            'use strict';
            var mydata = [
                    { id: "1",  invdate: "2007-10-01", name: "test",   note: "note",   amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00" },
                    { id: "2",  invdate: "2007-10-02", name: "test2",  note: "note2",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00" },
                    { id: "3",  invdate: "2007-09-01", name: "test3",  note: "note3",  amount: "400.00", tax: "30.00", closed: false, ship_via: "FE", total: "430.00" },
                    { id: "4",  invdate: "2007-10-04", name: "test4",  note: "note4",  amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00" },
                    { id: "5",  invdate: "2007-10-31", name: "test5",  note: "note5",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00" },
                    { id: "6",  invdate: "2007-09-06", name: "test6",  note: "note6",  amount: "400.00", tax: "30.00", closed: false, ship_via: "FE", total: "430.00" },
                    { id: "7",  invdate: "2007-10-04", name: "test7",  note: "note7",  amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00" },
                    { id: "8",  invdate: "2007-10-03", name: "test8",  note: "note8",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00" },
                    { id: "9",  invdate: "2007-09-01", name: "test9",  note: "note9",  amount: "400.00", tax: "30.00", closed: false, ship_via: "TN", total: "430.00" },
                    { id: "10", invdate: "2007-09-08", name: "test10", note: "note10", amount: "500.00", tax: "30.00", closed: true,  ship_via: "TN", total: "530.00" },
                    { id: "11", invdate: "2007-09-08", name: "test11", note: "note11", amount: "500.00", tax: "30.00", closed: false, ship_via: "FE", total: "530.00" },
                    { id: "12", invdate: "2007-09-10", name: "test12", note: "note12", amount: "500.00", tax: "30.00", closed: false, ship_via: "FE", total: "530.00" }
                ],
                $grid = $("#list"),
                initDate = function (elem) {
                    $(elem).datepicker({
                        dateFormat: 'yyyy-m-dd',
                        autoSize: true,
                        changeYear: true,
                        changeMonth: true,
                        showButtonPanel: true,
                        showWeek: true
                    });
                },
                   
                numberTemplate = {formatter: 'number', align: 'right', sorttype: 'number', editable: true,
                    searchoptions: { sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge', 'nu', 'nn', 'in', 'ni'] }},
                dateTemplate = {width: 80, align: 'center', sorttype: 'date',
                        formatter: 'date', formatoptions: { newformat: 'Y-m-d' }, editable: true, datefmt: 'Y-m-d',
                        editoptions: { dataInit: initDate },
                        searchoptions: { sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge'], dataInit: initDate }},
                yesNoTemplate = {width: 75, align: 'center', editable: true, formatter: 'checkbox',
                        edittype: 'checkbox', editoptions: {value: 'Yes:No', defaultValue: 'Yes'},
                        stype: 'select', searchoptions: { sopt: ['eq', 'ne'], value: ':Any;true:Yes;false:No' }};
       
            $grid.jqGrid({
                datatype: 'local',
                data: mydata,
                colNames: ['Inv No', 'Client', 'Date', 'Amount', 'Tax', 'Total', 'Closed', 'Shipped via', 'Notes'],
                colModel: [
                    { name: 'id', index: 'id', width: 70, align: 'center', sorttype: 'int', searchoptions: { sopt: ['eq', 'ne']} },
                    { name: 'name', index: 'name', editable: true, width: 70,
                       editrules: { required: true},editoptions: { dataInit: function (elem) { $(elem).addClass('ui-state-highlight'); }}
                         },
                    { name: 'invdate', index: 'invdate',
                              template: dateTemplate
                         },
                    { name: 'amount', index: 'amount', width: 80,
                              template: numberTemplate
                         },
                    { name: 'tax', index: 'tax', width: 55,
                              template: numberTemplate,
                        editoptions: { dataInit: function (elem) { $(elem).addClass('ui-state-error'); }}
                         },
                    { name: 'total', index: 'total', width: 65,
                              template: numberTemplate
                         },
                    {name: 'closed', index: 'closed',
                              template: yesNoTemplate
                         },
                    {name: 'ship_via', index: 'ship_via', width: 105, align: 'center',
                              editable: true, formatter: 'select',
                        edittype: 'select', editoptions: { value: 'FE:FedEx;TN:TNT;IN:Intim', defaultValue: 'IN' },
                        stype: 'select', searchoptions: { sopt: ['eq', 'ne'], value: ':Any;FE:FedEx;TN:TNT;IN:IN' }
                         },

                    { name: 'note', index: 'note', width: 60, sortable: false,
                              editable: true, edittype: 'textarea'
                         }
                ],
                rowNum: 10,
                rowList: [5, 10, 20],
                pager: '#pager',
                gridview: true,
                rownumbers: true,
                autoencode: true,
                ignoreCase: true,
                sortname: 'invdate',
                viewrecords: true,
                sortorder: 'desc',
                height: '100%',
                caption: '这是一个jqGrid模版'
            });
            $grid.jqGrid('navGrid', '#pager', {refreshstate: 'current',search:true, refresh:false, add: false, edit: false, del: false});
            $.extend(true, $.ui.multiselect, {
                locale: {
                         addAll: '恢复所有',
                         removeAll: '移除所有',
                         itemsCount: '个列选项'
                }
            });
              
            $.extend(true, $.jgrid.col, {
                width: 500,
                modal: true,
                msel_opts: {dividerLocation: 0.5},
                dialog_opts: {
                    minWidth: 470,
                    show: 'blind',
                    hide: 'explode'
                }
            });
              
            $grid.jqGrid('navButtonAdd', '#pager', {
                caption: "",
                buttonicon: "ui-icon-calculator",
                title: "自定义列",
                onClickButton: function () {
                    $(this).jqGrid('columnChooser');
                }
            });
        });
    </script>
</head>
<body>
    <table id="list"><tr><td/></tr></table>
    <div id="pager"></div>
</body>
</html>
效果截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值