jQuery EasyUI jquery.datagrid.js源代码

来源:互联网 发布:日常计划软件 编辑:程序博客网 时间:2024/04/30 00:48

jquery.datagrid.js的源代码

很具有参考价值

/*** jQuery EasyUI 1.2.3* * Licensed under the GPL terms* To use it on other terms please contact us** Copyright(c) 2009-2011 stworthy [ stworthy@gmail.com ] * */(function ($) {    $.extend(Array.prototype, { indexOf: function (o) {        for (var i = 0, len = this.length; i < len; i++) {            if (this[i] == o) {                return i;            }        }        return -1;    }, remove: function (o) {        var index = this.indexOf(o);        if (index != -1) {            this.splice(index, 1);        }        return this;    }, removeById: function (filed, id) {        for (var i = 0, len = this.length; i < len; i++) {            if (this[i][filed] == id) {                this.splice(i, 1);                return this;            }        }        return this;    }    });    function setSize(target, param) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        if (param) {            if (param.width) {                opts.width = param.width;            }            if (param.height) {                opts.height = param.height;            }        }        if (opts.fit == true) {            var p = pnl.panel("panel").parent();            opts.width = p.width();            opts.height = p.height();        }        pnl.panel("resize", { width: opts.width, height: opts.height });    };    function fixDataGridHeight(target) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var pnlwidth = pnl.width();        var pnlheight = pnl.height();        var view = pnl.children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        var view1header = view1.children("div.datagrid-header");        var view2header = view2.children("div.datagrid-header");        var view1headerTable = view1header.find("table");        var view2headerTable = view2header.find("table");        view.width(pnlwidth);        var view1headerInner = view1header.children("div.datagrid-header-inner").show();        view1.width(view1headerInner.find("table").width());        if (!opts.showHeader) {            view1headerInner.hide();        }        view2.width(pnlwidth - view1.outerWidth());        view1.children("div.datagrid-header,div.datagrid-body,div.datagrid-footer").width(view1.width());        view2.children("div.datagrid-header,div.datagrid-body,div.datagrid-footer").width(view2.width());        var hh;        view1header.css("height", "");        view2header.css("height", "");        view1headerTable.css("height", "");        view2headerTable.css("height", "");        hh = Math.max(view1headerTable.height(), view2headerTable.height());        view1headerTable.height(hh);        view2headerTable.height(hh);        if ($.boxModel == true) {            view1header.height(hh - (view1header.outerHeight() - view1header.height()));            view2header.height(hh - (view2header.outerHeight() - view2header.height()));        } else {            view1header.height(hh);            view2header.height(hh);        }        if (opts.height != "auto") {            var bodyHeight = pnlheight - view2.children("div.datagrid-header").outerHeight(true) - view2.children("div.datagrid-footer").outerHeight(true) - pnl.children("div.datagrid-toolbar").outerHeight(true) - pnl.children("div.datagrid-pager").outerHeight(true);            view1.children("div.datagrid-body").height(bodyHeight);            view2.children("div.datagrid-body").height(bodyHeight);        }        view.height(view2.height());        view2.css("left", view1.outerWidth());    };    function fixRowHeight(target, index) {        var rows = $.data(target, "datagrid").data.rows;        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var view = pnl.children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        if (!view1.find("div.datagrid-body-inner").is(":empty")) {            if (index >= 0) {                fixSingleRowHeight(index);            } else {                for (var i = 0; i < rows.length; i++) {                    fixSingleRowHeight(i);                }                if (opts.showFooter) {                    var footerRows = $(target).datagrid("getFooterRows") || [];                    var c1 = view1.children("div.datagrid-footer");                    var c2 = view2.children("div.datagrid-footer");                    for (var i = 0; i < footerRows.length; i++) {                        fixSingleRowHeight(i, c1, c2);                    }                    fixDataGridHeight(target);                }            }        }        if (opts.height == "auto") {            var view1body = view1.children("div.datagrid-body");            var view2body = view2.children("div.datagrid-body");            var outerHeightTotal = 0;            var tmpHeight = 0;            view2body.children().each(function () {                var c = $(this);                if (c.is(":visible")) {                    outerHeightTotal += c.outerHeight();                    if (tmpHeight < c.outerWidth()) {                        tmpHeight = c.outerWidth();                    }                }            });            if (tmpHeight > view2body.width()) {                outerHeightTotal += 18;            }            view1body.height(outerHeightTotal);            view2body.height(outerHeightTotal);            view.height(view2.height());        }        view2.children("div.datagrid-body").triggerHandler("scroll");        function fixSingleRowHeight(index, c1, c2) {            c1 = c1 || view1;            c2 = c2 || view2;            var tr1 = c1.find("tr[datagrid-row-index=" + index + "]");            var tr2 = c2.find("tr[datagrid-row-index=" + index + "]");            tr1.css("height", "");            tr2.css("height", "");            var maxheight = Math.max(tr1.height(), tr2.height());            tr1.css("height", maxheight);            tr2.css("height", maxheight);        };    };    function wrapGrid(target, rownumbers) {        function getDataByCondition(conditons) {            var trAry = [];            $("tr", conditons).each(function () {                var thAry = [];                $("th", this).each(function () {                    var th = $(this);                    var col = { title: th.html(), align: th.attr("align") || "left", sortable: th.attr("sortable") == "true" || false, checkbox: th.attr("checkbox") == "true" || false };                    if (th.attr("field")) {                        col.field = th.attr("field");                    }                    if (th.attr("formatter")) {                        col.formatter = eval(th.attr("formatter"));                    }                    if (th.attr("styler")) {                        col.styler = eval(th.attr("styler"));                    }                    if (th.attr("editor")) {                        var s = $.trim(th.attr("editor"));                        if (s.substr(0, 1) == "{") {                            col.editor = eval("(" + s + ")");                        } else {                            col.editor = s;                        }                    }                    if (th.attr("rowspan")) {                        col.rowspan = parseInt(th.attr("rowspan"));                    }                    if (th.attr("colspan")) {                        col.colspan = parseInt(th.attr("colspan"));                    }                    if (th.attr("width")) {                        col.width = parseInt(th.attr("width"));                    }                    if (th.attr("hidden")) {                        col.hidden = th.attr("hidden") == "true";                    }                    if (th.attr("resizable")) {                        col.resizable = th.attr("resizable") == "true";                    }                    thAry.push(col);                });                trAry.push(thAry);            });            return trAry;        };        var wrapObj = $("<div class=\"datagrid-wrap\">" + "<div class=\"datagrid-view\">" + "<div class=\"datagrid-view1\">" + "<div class=\"datagrid-header\">" + "<div class=\"datagrid-header-inner\"></div>" + "</div>" + "<div class=\"datagrid-body\">" + "<div class=\"datagrid-body-inner\"></div>" + "</div>" + "<div class=\"datagrid-footer\">" + "<div class=\"datagrid-footer-inner\"></div>" + "</div>" + "</div>" + "<div class=\"datagrid-view2\">" + "<div class=\"datagrid-header\">" + "<div class=\"datagrid-header-inner\"></div>" + "</div>" + "<div class=\"datagrid-body\"></div>" + "<div class=\"datagrid-footer\">" + "<div class=\"datagrid-footer-inner\"></div>" + "</div>" + "</div>" + "<div class=\"datagrid-resize-proxy\"></div>" + "</div>" + "</div>").insertAfter(target);        wrapObj.panel({ doSize: false });        wrapObj.panel("panel").addClass("datagrid").bind("_resize", function (e, _32) {            var opts = $.data(target, "datagrid").options;            if (opts.fit == true || _32) {                setSize(target);                setTimeout(function () {                    if ($.data(target, "datagrid")) {                        fixColumnSize(target);                    }                }, 0);            }            return false;        });        $(target).hide().appendTo(wrapObj.children("div.datagrid-view"));        var dataFrozen = getDataByCondition($("thead[frozen=true]", target));        var dataFit = getDataByCondition($("thead[frozen!=true]", target));        return { panel: wrapObj, frozenColumns: dataFrozen, columns: dataFit };    };    function getData(target) {        var data = { total: 0, rows: [] };        var getCols = getColumnFiles(target, true).concat(getColumnFiles(target, false));        $(target).find("tbody tr").each(function () {            data.total++;            var col = {};            for (var i = 0; i < getCols.length; i++) {                col[getCols[i]] = $("td:eq(" + i + ")", this).html();            }            data.rows.push(col);        });        return data;    };    function initDatagrid(target) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        pnl.panel($.extend({}, opts, { doSize: false, onResize: function (_40, _41) {            setTimeout(function () {                if ($.data(target, "datagrid")) {                    fixDataGridHeight(target);                    fixColumnWidth(target);                    opts.onResize.call(pnl, _40, _41);                }            }, 0);        }, onExpand: function () {            fixDataGridHeight(target);            fixRowHeight(target);            opts.onExpand.call(pnl);        }        }));        var view = pnl.children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        var view1HeaderInner = view1.children("div.datagrid-header").children("div.datagrid-header-inner");        var view2HeaderInner = view2.children("div.datagrid-header").children("div.datagrid-header-inner");        appendColumns(view1HeaderInner, opts.frozenColumns, true);        appendColumns(view2HeaderInner, opts.columns, false);        view1HeaderInner.css("display", opts.showHeader ? "block" : "none");        view2HeaderInner.css("display", opts.showHeader ? "block" : "none");        view1.find("div.datagrid-footer-inner").css("display", opts.showFooter ? "block" : "none");        view2.find("div.datagrid-footer-inner").css("display", opts.showFooter ? "block" : "none");        if (opts.toolbar) {            if (typeof opts.toolbar == "string") {                $(opts.toolbar).addClass("datagrid-toolbar").prependTo(pnl);                $(opts.toolbar).show();            } else {                $("div.datagrid-toolbar", pnl).remove();                var tb = $("<div class=\"datagrid-toolbar\"></div>").prependTo(pnl);                for (var i = 0; i < opts.toolbar.length; i++) {                    var btn = opts.toolbar[i];                    if (btn == "-") {                        $("<div class=\"datagrid-btn-separator\"></div>").appendTo(tb);                    } else {                        var lnkObj = $("<a href=\"javascript:void(0)\"></a>");                        lnkObj[0].onclick = eval(btn.handler || function () {                        });                        lnkObj.css("float", "left").appendTo(tb).linkbutton($.extend({}, btn, { plain: true }));                    }                }            }        } else {            $("div.datagrid-toolbar", pnl).remove();        }        $("div.datagrid-pager", pnl).remove();        if (opts.pagination) {            var pagerObj = $("<div class=\"datagrid-pager\"></div>").appendTo(pnl);            pagerObj.pagination({ pageNumber: opts.pageNumber, pageSize: opts.pageSize, pageList: opts.pageList, onSelectPage: function (_4a, _4b) {                opts.pageNumber = _4a;                opts.pageSize = _4b;                request(target);            }            });            opts.pageSize = pagerObj.pagination("options").pageSize;        }        function appendColumns(container, columns, frozen) {            if (!columns) {                return;            }            $(container).show();            $(container).empty();            var t = $("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tbody></tbody></table>").appendTo(container);            for (var i = 0; i < columns.length; i++) {                var tr = $("<tr></tr>").appendTo($("tbody", t));                var findCol = columns[i];                for (var j = 0; j < findCol.length; j++) {                    var col = findCol[j];                    var strHtml = "";                    if (col.rowspan) {                        strHtml += "rowspan=\"" + col.rowspan + "\" ";                    }                    if (col.colspan) {                        strHtml += "colspan=\"" + col.colspan + "\" ";                    }                    var td = $("<td " + strHtml + "></td>").appendTo(tr);                    if (col.checkbox) {                        td.attr("field", col.field);                        $("<div class=\"datagrid-header-check\"></div>").html("<input type=\"checkbox\"/>").appendTo(td);                    } else {                        if (col.field) {                            td.attr("field", col.field);                            td.append("<div class=\"datagrid-cell\"><span></span><span class=\"datagrid-sort-icon\"></span></div>");                            $("span", td).html(col.title);                            $("span.datagrid-sort-icon", td).html(" ");                            var findCell = td.find("div.datagrid-cell");                            if (col.resizable == false) {                                findCell.attr("resizable", "false");                            }                            col.boxWidth = $.boxModel ? (col.width - (findCell.outerWidth() - findCell.width())) : col.width;                            findCell.width(col.boxWidth);                            findCell.css("text-align", (col.align || "left"));                        } else {                            $("<div class=\"datagrid-cell-group\"></div>").html(col.title).appendTo(td);                        }                    }                    if (col.hidden) {                        td.hide();                    }                }            }            if (frozen && opts.rownumbers) {                var td = $("<td rowspan=\"" + opts.frozenColumns.length + "\"><div class=\"datagrid-header-rownumber\"></div></td>");                if ($("tr", t).length == 0) {                    td.wrap("<tr></tr>").parent().appendTo($("tbody", t));                } else {                    td.prependTo($("tr:first", t));                }            }        };    };    function bindRowEvents(target) {        var pnl = $.data(target, "datagrid").panel;        var opts = $.data(target, "datagrid").options;        var data = $.data(target, "datagrid").data;        var pnlBody = pnl.find("div.datagrid-body");        pnlBody.find("tr[datagrid-row-index]").unbind(".datagrid").bind("mouseenter.datagrid", function () {            var findIndex = $(this).attr("datagrid-row-index");            pnlBody.find("tr[datagrid-row-index=" + findIndex + "]").addClass("datagrid-row-over");        }).bind("mouseleave.datagrid", function () {            var findIndex = $(this).attr("datagrid-row-index");            pnlBody.find("tr[datagrid-row-index=" + findIndex + "]").removeClass("datagrid-row-over");        }).bind("click.datagrid", function () {            var findIndex = $(this).attr("datagrid-row-index");            if (opts.singleSelect == true) {                clearSelections(target);                selectRow(target, findIndex);            } else {                if ($(this).hasClass("datagrid-row-selected")) {                    unSelectRow(target, findIndex);                } else {                    selectRow(target, findIndex);                }            }            if (opts.onClickRow) {                opts.onClickRow.call(target, findIndex, data.rows[findIndex]);            }        }).bind("dblclick.datagrid", function () {            var findIndex = $(this).attr("datagrid-row-index");            if (opts.onDblClickRow) {                opts.onDblClickRow.call(target, findIndex, data.rows[findIndex]);            }        }).bind("contextmenu.datagrid", function (e) {            var findIndex = $(this).attr("datagrid-row-index");            if (opts.onRowContextMenu) {                opts.onRowContextMenu.call(target, e, findIndex, data.rows[findIndex]);            }        });        pnlBody.find("td[field]").unbind(".datagrid").bind("click.datagrid", function () {            var findIndex = $(this).parent().attr("datagrid-row-index");            var findField = $(this).attr("field");            var findRow = data.rows[findIndex][findField];            opts.onClickCell.call(target, findIndex, findField, findRow);        }).bind("dblclick.datagrid", function () {            var findIndex = $(this).parent().attr("datagrid-row-index");            var findField = $(this).attr("field");            var findRow = data.rows[findIndex][findField];            opts.onDblClickCell.call(target, findIndex, findField, findRow);        });        pnlBody.find("div.datagrid-cell-check input[type=checkbox]").unbind(".datagrid").bind("click.datagrid", function (e) {            var findIndex = $(this).parent().parent().parent().attr("datagrid-row-index");            if (opts.singleSelect) {                clearSelections(target);                selectRow(target, findIndex);            } else {                if ($(this).attr("checked")) {                    selectRow(target, findIndex);                } else {                    unSelectRow(target, findIndex);                }            }            e.stopPropagation();        });    };    function bindCellsEvents(target) {        var pnl = $.data(target, "datagrid").panel;        var opts = $.data(target, "datagrid").options;        var pnlHeader = pnl.find("div.datagrid-header");        pnlHeader.find("td:has(div.datagrid-cell)").unbind(".datagrid").bind("mouseenter.datagrid", function () {            $(this).addClass("datagrid-header-over");        }).bind("mouseleave.datagrid", function () {            $(this).removeClass("datagrid-header-over");        }).bind("contextmenu.datagrid", function (e) {            var filed = $(this).attr("field");            opts.onHeaderContextMenu.call(target, e, filed);        });        pnlHeader.find("div.datagrid-cell").unbind(".datagrid").bind("click.datagrid", function () {            var filed = $(this).parent().attr("field");            var opt = getColOptions(target, filed);            if (!opt.sortable) {                return;            }            opts.sortName = filed;            opts.sortOrder = "asc";            var c = "datagrid-sort-asc";            if ($(this).hasClass("datagrid-sort-asc")) {                c = "datagrid-sort-desc";                opts.sortOrder = "desc";            }            pnlHeader.find("div.datagrid-cell").removeClass("datagrid-sort-asc datagrid-sort-desc");            $(this).addClass(c);            if (opts.onSortColumn) {                opts.onSortColumn.call(target, opts.sortName, opts.sortOrder);            }            if (opts.remoteSort) {                request(target);            } else {                var data = $.data(target, "datagrid").data;                loadData(target, data);            }        });        pnlHeader.find("input[type=checkbox]").unbind(".datagrid").bind("click.datagrid", function () {            if (opts.singleSelect) {                return false;            }            if ($(this).attr("checked")) {                selectAll(target);            } else {                clearSelectRows(target);            }        });        var view = pnl.children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        view2.children("div.datagrid-body").unbind(".datagrid").bind("scroll.datagrid", function () {            view1.children("div.datagrid-body").scrollTop($(this).scrollTop());            view2.children("div.datagrid-header").scrollLeft($(this).scrollLeft());            view2.children("div.datagrid-footer").scrollLeft($(this).scrollLeft());        });        pnlHeader.find("div.datagrid-cell").each(function () {            $(this).resizable({ handles: "e", disabled: ($(this).attr("resizable") ? $(this).attr("resizable") == "false" : false), minWidth: 25, onStartResize: function (e) {                view.children("div.datagrid-resize-proxy").css({ left: e.pageX - $(pnl).offset().left - 1, display: "block" });            }, onResize: function (e) {                view.children("div.datagrid-resize-proxy").css({ display: "block", left: e.pageX - $(pnl).offset().left - 1 });                return false;            }, onStopResize: function (e) {                var field = $(this).parent().attr("field");                var col = getColOptions(target, field);                col.width = $(this).outerWidth();                col.boxWidth = $.boxModel == true ? $(this).width() : $(this).outerWidth();                fixColumnSize(target, field);                fixColumnWidth(target);                var tmpView = pnl.find("div.datagrid-view2");                tmpView.find("div.datagrid-header").scrollLeft(tmpView.find("div.datagrid-body").scrollLeft());                view.children("div.datagrid-resize-proxy").css("display", "none");                opts.onResizeColumn.call(target, field, col.width);            }            });        });        view1.children("div.datagrid-header").find("div.datagrid-cell").resizable({ onStopResize: function (e) {            var filed = $(this).parent().attr("field");            var col = getColOptions(target, filed);            col.width = $(this).outerWidth();            col.boxWidth = $.boxModel == true ? $(this).width() : $(this).outerWidth();            fixColumnSize(target, filed);            var tmpView = pnl.find("div.datagrid-view2");            tmpView.find("div.datagrid-header").scrollLeft(tmpView.find("div.datagrid-body").scrollLeft());            view.children("div.datagrid-resize-proxy").css("display", "none");            fixDataGridHeight(target);            fixColumnWidth(target);            opts.onResizeColumn.call(target, filed, col.width);        }        });    };    function fixColumnWidth(target) {        var opts = $.data(target, "datagrid").options;        if (!opts.fitColumns) {            return;        }        var pnl = $.data(target, "datagrid").panel;        var view2Header = pnl.find("div.datagrid-view2 div.datagrid-header");        var tmpWidth = 0;        var tmpCol;        var coFields = getColumnFiles(target, false);        for (var i = 0; i < coFields.length; i++) {            var col = getColOptions(target, coFields[i]);            if (!col.hidden && !col.checkbox) {                tmpWidth += col.width;                tmpCol = col;            }        }        var view2HeaderInner = view2Header.children("div.datagrid-header-inner").show();        var jzWidth = view2Header.width() - view2Header.find("table").width() - opts.scrollbarSize;        var ratio = jzWidth / tmpWidth;        if (!opts.showHeader) {            view2HeaderInner.hide();        }        for (var i = 0; i < coFields.length; i++) {            var col = getColOptions(target, coFields[i]);            if (!col.hidden && !col.checkbox) {                var floorWidth = Math.floor(col.width * ratio);                setCellWidth(col, floorWidth);                jzWidth -= floorWidth;            }        }        fixColumnSize(target);        if (jzWidth) {            setCellWidth(tmpCol, jzWidth);            fixColumnSize(target, tmpCol.field);        }        function setCellWidth(col, width) {            col.width += width;            col.boxWidth += width;            view2Header.find("td[field=" + col.field + "] div.datagrid-cell").width(col.boxWidth);        };    };    function fixColumnSize(target, filed) {        var pnl = $.data(target, "datagrid").panel;        var bf = pnl.find("div.datagrid-body,div.datagrid-footer");        if (filed) {            fix(filed);        } else {            pnl.find("div.datagrid-header td[field]").each(function () {                fix($(this).attr("field"));            });        }        fixCellWidth(target);        setTimeout(function () {            fixRowHeight(target);            resizeEditor(target);        }, 0);        function fix(_88) {            var col = getColOptions(target, _88);            bf.find("td[field=" + _88 + "]").each(function () {                var td = $(this);                var _89 = td.attr("colspan") || 1;                if (_89 == 1) {                    td.find("div.datagrid-cell").width(col.boxWidth);                    td.find("div.datagrid-editable").width(col.width);                }            });        };    };    function fixCellWidth(target) {        var pnl = $.data(target, "datagrid").panel;        var pnlHeader = pnl.find("div.datagrid-header");        pnl.find("div.datagrid-body td.datagrid-td-merged").each(function () {            var td = $(this);            var colspan = td.attr("colspan") || 1;            var tdFiled = td.attr("field");            var findTd = pnlHeader.find("td[field=" + tdFiled + "]");            var findTdWidth = findTd.width();            for (var i = 1; i < colspan; i++) {                findTd = findTd.next();                findTdWidth += findTd.outerWidth();            }            var tdCell = td.children("div.datagrid-cell");            if ($.boxModel == true) {                tdCell.width(findTdWidth - (tdCell.outerWidth() - tdCell.width()));            } else {                tdCell.width(findTdWidth);            }        });    };    function resizeEditor(target) {        var pnl = $.data(target, "datagrid").panel;        pnl.find("div.datagrid-editable").each(function () {            var ed = $.data(this, "datagrid.editor");            if (ed.actions.resize) {                ed.actions.resize(ed.target, $(this).width());            }        });    };    function getColOptions(target, filed) {        var opts = $.data(target, "datagrid").options;        if (opts.columns) {            for (var i = 0; i < opts.columns.length; i++) {                var colOpts = opts.columns[i];                for (var j = 0; j < colOpts.length; j++) {                    var col = colOpts[j];                    if (col.field == filed) {                        return col;                    }                }            }        }        if (opts.frozenColumns) {            for (var i = 0; i < opts.frozenColumns.length; i++) {                var colOpts = opts.frozenColumns[i];                for (var j = 0; j < colOpts.length; j++) {                    var col = colOpts[j];                    if (col.field == filed) {                        return col;                    }                }            }        }        return null;    };    function getColumnFiles(target, frozen) {        var opts = $.data(target, "datagrid").options;        var cols = (frozen == true) ? (opts.frozenColumns || [[]]) : opts.columns;        if (cols.length == 0) {            return [];        }        var columnFileds = [];        function findLocation(index) {            var c = 0;            var i = 0;            while (true) {                if (columnFileds[i] == undefined) {                    if (c == index) {                        return i;                    }                    c++;                }                i++;            }        };        function getColumnFileds(r) {            var ff = [];            var c = 0;            for (var i = 0; i < cols[r].length; i++) {                var col = cols[r][i];                if (col.field) {                    ff.push([c, col.field]);                }                c += parseInt(col.colspan || "1");            }            for (var i = 0; i < ff.length; i++) {                ff[i][0] = findLocation(ff[i][0]);            }            for (var i = 0; i < ff.length; i++) {                var f = ff[i];                columnFileds[f[0]] = f[1];            }        };        for (var i = 0; i < cols.length; i++) {            getColumnFileds(i);        }        return columnFileds;    };    function loadData(target, data) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var selectRows = $.data(target, "datagrid").selectedRows;        data = opts.loadFilter.call(target, data);        var dataRows = data.rows;        $.data(target, "datagrid").data = data;        if (data.footer) {            $.data(target, "datagrid").footer = data.footer;        }        if (!opts.remoteSort) {            var opt = getColOptions(target, opts.sortName);            if (opt) {                var _a9 = opt.sorter || function (a, b) {                    return (a > b ? 1 : -1);                };                data.rows.sort(function (r1, r2) {                    return _a9(r1[opts.sortName], r2[opts.sortName]) * (opts.sortOrder == "asc" ? 1 : -1);                });            }        }        var view = pnl.children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        if (opts.view.onBeforeRender) {            opts.view.onBeforeRender.call(opts.view, target, dataRows);        }        opts.view.render.call(opts.view, target, view2.children("div.datagrid-body"), false);        opts.view.render.call(opts.view, target, view1.children("div.datagrid-body").children("div.datagrid-body-inner"), true);        if (opts.showFooter) {            opts.view.renderFooter.call(opts.view, target, view2.find("div.datagrid-footer-inner"), false);            opts.view.renderFooter.call(opts.view, target, view1.find("div.datagrid-footer-inner"), true);        }        if (opts.view.onAfterRender) {            opts.view.onAfterRender.call(opts.view, target);        }        opts.onLoadSuccess.call(target, data);        var pager = pnl.children("div.datagrid-pager");        if (pager.length) {            if (pager.pagination("options").total != data.total) {                pager.pagination({ total: data.total });            }        }        fixRowHeight(target);        bindRowEvents(target);        view2.children("div.datagrid-body").triggerHandler("scroll");        if (opts.idField) {            for (var i = 0; i < dataRows.length; i++) {                if (isExistsRow(dataRows[i])) {                    selectRecord(target, dataRows[i][opts.idField]);                }            }        }        function isExistsRow(row) {            for (var i = 0; i < selectRows.length; i++) {                if (selectRows[i][opts.idField] == row[opts.idField]) {                    selectRows[i] = row;                    return true;                }            }            return false;        };    };    function getRowIndex(target, row) {        var opts = $.data(target, "datagrid").options;        var rows = $.data(target, "datagrid").data.rows;        if (typeof row == "object") {            return rows.indexOf(row);        } else {            for (var i = 0; i < rows.length; i++) {                if (rows[i][opts.idField] == row) {                    return i;                }            }            return -1;        }    };    function getSelectRows(target) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var data = $.data(target, "datagrid").data;        if (opts.idField) {            return $.data(target, "datagrid").selectedRows;        } else {            var rowAry = [];            $("div.datagrid-view2 div.datagrid-body tr.datagrid-row-selected", pnl).each(function () {                var row_index = parseInt($(this).attr("datagrid-row-index"));                rowAry.push(data.rows[row_index]);            });            return rowAry;        }    };    function clearSelections(target) {        clearSelectRows(target);        var selectRows = $.data(target, "datagrid").selectedRows;        selectRows.splice(0, selectRows.length);    };    function selectAll(target) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var data = $.data(target, "datagrid").data;        var selectRows = $.data(target, "datagrid").selectedRows;        var rows = data.rows;        var pnlBody = pnl.find("div.datagrid-body");        $("tr", pnlBody).addClass("datagrid-row-selected");        $("div.datagrid-cell-check input[type=checkbox]", pnlBody).attr("checked", true);        for (var i = 0; i < rows.length; i++) {            if (opts.idField) {                (function () {                    var row = rows[i];                    for (var i = 0; i < selectRows.length; i++) {                        if (selectRows[i][opts.idField] == row[opts.idField]) {                            return;                        }                    }                    selectRows.push(row);                })();            }        }        opts.onSelectAll.call(target, rows);    };    function clearSelectRows(target) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var data = $.data(target, "datagrid").data;        var selectRows = $.data(target, "datagrid").selectedRows;        $("div.datagrid-body tr.datagrid-row-selected", pnl).removeClass("datagrid-row-selected");        $("div.datagrid-body div.datagrid-cell-check input[type=checkbox]", pnl).attr("checked", false);        if (opts.idField) {            for (var i = 0; i < data.rows.length; i++) {                selectRows.removeById(opts.idField, data.rows[i][opts.idField]);            }        }        opts.onUnselectAll.call(target, data.rows);    };    function selectRow(target, index) {        var pnl = $.data(target, "datagrid").panel;        var opts = $.data(target, "datagrid").options;        var data = $.data(target, "datagrid").data;        var selectRows = $.data(target, "datagrid").selectedRows;        if (index < 0 || index >= data.rows.length) {            return;        }        if (opts.singleSelect == true) {            clearSelections(target);        }        var tr = $("div.datagrid-body tr[datagrid-row-index=" + index + "]", pnl);        if (!tr.hasClass("datagrid-row-selected")) {            tr.addClass("datagrid-row-selected");            var ck = $("div.datagrid-cell-check input[type=checkbox]", tr);            ck.attr("checked", true);            if (opts.idField) {                var row = data.rows[index];                (function () {                    for (var i = 0; i < selectRows.length; i++) {                        if (selectRows[i][opts.idField] == row[opts.idField]) {                            return;                        }                    }                    selectRows.push(row);                })();            }        }        opts.onSelect.call(target, index, data.rows[index]);        var view2 = pnl.find("div.datagrid-view2");        var view2Header = view2.find("div.datagrid-header").outerHeight();        var view2Body = view2.find("div.datagrid-body");        var top = tr.position().top - view2Header;        if (top <= 0) {            view2Body.scrollTop(view2Body.scrollTop() + top);        } else {            if (top + tr.outerHeight() > view2Body.height() - 18) {                view2Body.scrollTop(view2Body.scrollTop() + top + tr.outerHeight() - view2Body.height() + 18);            }        }    };    function selectRecord(target, id) {        var opts = $.data(target, "datagrid").options;        var data = $.data(target, "datagrid").data;        if (opts.idField) {            var _da = -1;            for (var i = 0; i < data.rows.length; i++) {                if (data.rows[i][opts.idField] == id) {                    _da = i;                    break;                }            }            if (_da >= 0) {                selectRow(target, _da);            }        }    };    function unSelectRow(target, index) {        var opts = $.data(target, "datagrid").options;        var pnl = $.data(target, "datagrid").panel;        var data = $.data(target, "datagrid").data;        var selectRows = $.data(target, "datagrid").selectedRows;        if (index < 0 || index >= data.rows.length) {            return;        }        var pnlBody = pnl.find("div.datagrid-body");        var tr = $("tr[datagrid-row-index=" + index + "]", pnlBody);        var ck = $("tr[datagrid-row-index=" + index + "] div.datagrid-cell-check input[type=checkbox]", pnlBody);        tr.removeClass("datagrid-row-selected");        ck.attr("checked", false);        var row = data.rows[index];        if (opts.idField) {            selectRows.removeById(opts.idField, row[opts.idField]);        }        opts.onUnselect.call(target, index, row);    };    function beginEdit(target, index) {        var opts = $.data(target, "datagrid").options;        var tr = opts.editConfig.getTr(target, index);        var row = opts.editConfig.getRow(target, index);        if (tr.hasClass("datagrid-row-editing")) {            return;        }        if (opts.onBeforeEdit.call(target, index, row) == false) {            return;        }        tr.addClass("datagrid-row-editing");        beginEditRow(target, index);        resizeEditor(target);        tr.find("div.datagrid-editable").each(function () {            var filed = $(this).parent().attr("field");            var ed = $.data(this, "datagrid.editor");            ed.actions.setValue(ed.target, row[filed]);        });        validateRow(target, index);    };    function endEdit(target, index, canceld) {        var opts = $.data(target, "datagrid").options;        var updatedRows = $.data(target, "datagrid").updatedRows;        var insertedRows = $.data(target, "datagrid").insertedRows;        var tr = opts.editConfig.getTr(target, index);        var row = opts.editConfig.getRow(target, index);        if (!tr.hasClass("datagrid-row-editing")) {            return;        }        if (!canceld) {            if (!validateRow(target, index)) {                return;            }            var flag = false;            var tmpObj = {};            tr.find("div.datagrid-editable").each(function () {                var field = $(this).parent().attr("field");                var ed = $.data(this, "datagrid.editor");                var editValue = ed.actions.getValue(ed.target);                if (row[field] != editValue) {                    row[field] = editValue;                    flag = true;                    tmpObj[field] = editValue;                }            });            if (flag) {                if (insertedRows.indexOf(row) == -1) {                    if (updatedRows.indexOf(row) == -1) {                        updatedRows.push(row);                    }                }            }        }        tr.removeClass("datagrid-row-editing");        destroyEdit(target, index);        $(target).datagrid("refreshRow", index);        if (!canceld) {            opts.onAfterEdit.call(target, index, row, tmpObj);        } else {            opts.onCancelEdit.call(target, index, row);        }    };    function getEditors(target, index) {        var editors = [];        var pnl = $.data(target, "datagrid").panel;        var tr = $("div.datagrid-body tr[datagrid-row-index=" + index + "]", pnl);        tr.children("td").each(function () {            var editorsAry = $(this).find("div.datagrid-editable");            if (editorsAry.length) {                var ed = $.data(editorsAry[0], "datagrid.editor");                editors.push(ed);            }        });        return editors;    };    function getEditor(target, options) {        var editors = getEditors(target, options.index);        for (var i = 0; i < editors.length; i++) {            if (editors[i].field == options.field) {                return editors[i];            }        }        return null;    };    function beginEditRow(target, index) {        var opts = $.data(target, "datagrid").options;        var tr = opts.editConfig.getTr(target, index);        tr.children("td").each(function () {            var cell = $(this).find("div.datagrid-cell");            var thisFiled = $(this).attr("field");            var col = getColOptions(target, thisFiled);            if (col && col.editor) {                var tmpType, tmpOpts;                if (typeof col.editor == "string") {                    tmpType = col.editor;                } else {                    tmpType = col.editor.type;                    tmpOpts = col.editor.options;                }                var tmpEditor = opts.editors[tmpType];                if (tmpEditor) {                    var cellHtml = cell.html();                    var cellOutWidth = cell.outerWidth();                    cell.addClass("datagrid-editable");                    if ($.boxModel == true) {                        cell.width(cellOutWidth - (cell.outerWidth() - cell.width()));                    }                    cell.html("<table border=\"0\" cellspacing=\"0\" cellpadding=\"1\"><tr><td></td></tr></table>");                    cell.children("table").attr("align", col.align);                    cell.children("table").bind("click dblclick contextmenu", function (e) {                        e.stopPropagation();                    });                    $.data(cell[0], "datagrid.editor", { actions: tmpEditor, target: tmpEditor.init(cell.find("td"), tmpOpts), field: thisFiled, type: tmpType, oldHtml: cellHtml });                }            }        });        fixRowHeight(target, index);    };    function destroyEdit(target, index) {        var opts = $.data(target, "datagrid").options;        var tr = opts.editConfig.getTr(target, index);        tr.children("td").each(function () {            var cell = $(this).find("div.datagrid-editable");            if (cell.length) {                var ed = $.data(cell[0], "datagrid.editor");                if (ed.actions.destroy) {                    ed.actions.destroy(ed.target);                }                cell.html(ed.oldHtml);                $.removeData(cell[0], "datagrid.editor");                var cellOuterWidth = cell.outerWidth();                cell.removeClass("datagrid-editable");                if ($.boxModel == true) {                    cell.width(cellOuterWidth - (cell.outerWidth() - cell.width()));                }            }        });    };    function validateRow(target, index) {        var tr = $.data(target, "datagrid").options.editConfig.getTr(target, index);        if (!tr.hasClass("datagrid-row-editing")) {            return true;        }        var vbox = tr.find(".validatebox-text");        vbox.validatebox("validate");        vbox.trigger("mouseleave");        var trAry = tr.find(".validatebox-invalid");        return trAry.length == 0;    };    function getChanges(target, type) {        var insertedRows = $.data(target, "datagrid").insertedRows;        var deletedRows = $.data(target, "datagrid").deletedRows;        var updatedRows = $.data(target, "datagrid").updatedRows;        if (!type) {            var rows = [];            rows = rows.concat(insertedRows);            rows = rows.concat(deletedRows);            rows = rows.concat(updatedRows);            return rows;        } else {            if (type == "inserted") {                return insertedRows;            } else {                if (type == "deleted") {                    return deletedRows;                } else {                    if (type == "updated") {                        return updatedRows;                    }                }            }        }        return [];    };    function deleteRow(taget, index) {        var opts = $.data(taget, "datagrid").options;        var data = $.data(taget, "datagrid").data;        var insertedRows = $.data(taget, "datagrid").insertedRows;        var deletedRows = $.data(taget, "datagrid").deletedRows;        var selectedRows = $.data(taget, "datagrid").selectedRows;        $(taget).datagrid("cancelEdit", index);        var row = data.rows[index];        if (insertedRows.indexOf(row) >= 0) {            insertedRows.remove(row);        } else {            deletedRows.push(row);        }        selectedRows.removeById(opts.idField, data.rows[index][opts.idField]);        opts.view.deleteRow.call(opts.view, taget, index);        if (opts.height == "auto") {            fixRowHeight(taget);        }    };    function insertRow(target, param) {        var view = $.data(target, "datagrid").options.view;        var insertedRows = $.data(target, "datagrid").insertedRows;        view.insertRow.call(view, target, param.index, param.row);        bindRowEvents(target);        insertedRows.push(param.row);    };    function appendRow(target, row) {        var view = $.data(target, "datagrid").options.view;        var insertedRows = $.data(target, "datagrid").insertedRows;        view.insertRow.call(view, target, null, row);        bindRowEvents(target);        insertedRows.push(row);    };    function cacheRows(target) {        var data = $.data(target, "datagrid").data;        var rows = data.rows;        var rowAry = [];        for (var i = 0; i < rows.length; i++) {            rowAry.push($.extend({}, rows[i]));        }        $.data(target, "datagrid").originalRows = rowAry;        $.data(target, "datagrid").updatedRows = [];        $.data(target, "datagrid").insertedRows = [];        $.data(target, "datagrid").deletedRows = [];    };    function acceptChanges(target) {        var data = $.data(target, "datagrid").data;        var ok = true;        for (var i = 0, len = data.rows.length; i < len; i++) {            if (validateRow(target, i)) {                endEdit(target, i, false);            } else {                ok = false;            }        }        if (ok) {            cacheRows(target);        }    };    function rejectChanges(target) {        var opts = $.data(target, "datagrid").options;        var originalRows = $.data(target, "datagrid").originalRows;        var insertedRows = $.data(target, "datagrid").insertedRows;        var deletedRows = $.data(target, "datagrid").deletedRows;        var selectedRows = $.data(target, "datagrid").selectedRows;        var data = $.data(target, "datagrid").data;        for (var i = 0; i < data.rows.length; i++) {            endEdit(target, i, true);        }        var rowAry = [];        for (var i = 0; i < selectedRows.length; i++) {            rowAry.push(selectedRows[i][opts.idField]);        }        selectedRows.splice(0, selectedRows.length);        data.total += deletedRows.length - insertedRows.length;        data.rows = originalRows;        loadData(target, data);        for (var i = 0; i < rowAry.length; i++) {            selectRecord(target, rowAry[i]);        }        cacheRows(target);    };    function request(target, param) {        var pnl = $.data(target, "datagrid").panel;        var opts = $.data(target, "datagrid").options;        if (param) {            opts.queryParams = param;        }        if (!opts.url) {            return;        }        var queryObj = $.extend({}, opts.queryParams);        if (opts.pagination) {            $.extend(queryObj, { page: opts.pageNumber, rows: opts.pageSize });        }        if (opts.sortName) {            $.extend(queryObj, { sort: opts.sortName, order: opts.sortOrder });        }        if (opts.onBeforeLoad.call(target, queryObj) == false) {            return;        }        $(target).datagrid("loading");        setTimeout(function () {            ajaxRequest();        }, 0);        function ajaxRequest() {            $.ajax({ type: opts.method, url: opts.url, data: queryObj, dataType: "json", success: function (data) {                setTimeout(function () {                    $(target).datagrid("loaded");                }, 0);                parent.closeLoadinglayer();                 loadData(target, data);                setTimeout(function () {                    cacheRows(target);                }, 0);            }, error: function () {                setTimeout(function () {                    $(target).datagrid("loaded");                }, 0);                if (opts.onLoadError) {                    opts.onLoadError.apply(target, arguments);                }            }            });        };    };    function mergeCells(target, options) {        var rows = $.data(target, "datagrid").data.rows;        var pnl = $.data(target, "datagrid").panel;        options.rowspan = options.rowspan || 1;        options.colspan = options.colspan || 1;        if (options.index < 0 || options.index >= rows.length) {            return;        }        if (options.rowspan == 1 && options.colspan == 1) {            return;        }        var findRow = rows[options.index][options.field];        var tr = pnl.find("div.datagrid-body tr[datagrid-row-index=" + options.index + "]");        var td = tr.find("td[field=" + options.field + "]");        td.attr("rowspan", options.rowspan).attr("colspan", options.colspan);        td.addClass("datagrid-td-merged");        for (var i = 1; i < options.colspan; i++) {            td = td.next();            td.hide();            rows[options.index][td.attr("field")] = findRow;        }        for (var i = 1; i < options.rowspan; i++) {            tr = tr.next();            var td = tr.find("td[field=" + options.field + "]").hide();            rows[options.index + i][td.attr("field")] = findRow;            for (var j = 1; j < options.colspan; j++) {                td = td.next();                td.hide();                rows[options.index + i][td.attr("field")] = findRow;            }        }        setTimeout(function () {            fixCellWidth(target);        }, 0);    };    $.fn.datagrid = function (options, param) {        if (typeof options == "string") {            return $.fn.datagrid.methods[options](this, param);        }        options = options || {};        return this.each(function () {            var state = $.data(this, "datagrid");            var opts;            if (state) {                opts = $.extend(state.options, options);                state.options = opts;            } else {                opts = $.extend({}, $.fn.datagrid.defaults, $.fn.datagrid.parseOptions(this), options);                $(this).css("width", "").css("height", "");                var wrapResult = wrapGrid(this, opts.rownumbers);                if (!opts.columns) {                    opts.columns = wrapResult.columns;                }                if (!opts.frozenColumns) {                    opts.frozenColumns = wrapResult.frozenColumns;                }                $.data(this, "datagrid", { options: opts, panel: wrapResult.panel, selectedRows: [], data: { total: 0, rows: [] }, originalRows: [], updatedRows: [], insertedRows: [], deletedRows: [] });            }            initDatagrid(this);            if (!state) {                var data = getData(this);                if (data.total > 0) {                    loadData(this, data);                    cacheRows(this);                }            }            setSize(this);            if (opts.url) {                request(this);            }            bindCellsEvents(this);        });    };    var editorsObj = { text: { init: function (container, options) {        var gridInput = $("<input type=\"text\" class=\"datagrid-editable-input\">").appendTo(container);        return gridInput;    }, getValue: function (target) {        return $(target).val();    }, setValue: function (target, value) {        $(target).val(value);    }, resize: function (target, width) {        var targetObj = $(target);        if ($.boxModel == true) {            targetObj.width(width - (targetObj.outerWidth() - targetObj.width()));        } else {            targetObj.width(width);        }    }    }, textarea: { init: function (container, options) {        var gridTextAreaObj = $("<textarea class=\"datagrid-editable-input\"></textarea>").appendTo(container);        return gridTextAreaObj;    }, getValue: function (target) {        return $(target).val();    }, setValue: function (target, value) {        $(target).val(value);    }, resize: function (target, width) {        var targetObj = $(target);        if ($.boxModel == true) {            targetObj.width(width - (targetObj.outerWidth() - targetObj.width()));        } else {            targetObj.width(width);        }    }    }, checkbox: { init: function (container, options) {        var gridCheckBoxObj = $("<input type=\"checkbox\">").appendTo(container);        gridCheckBoxObj.val(options.on);        gridCheckBoxObj.attr("offval", options.off);        return gridCheckBoxObj;    }, getValue: function (target) {        if ($(target).attr("checked")) {            return $(target).val();        } else {            return $(target).attr("offval");        }    }, setValue: function (target, value) {        if ($(target).val() == value) {            $(target).attr("checked", true);        } else {            $(target).attr("checked", false);        }    }    }, numberbox: { init: function (container, options) {        var gridNumBoxObj = $("<input type=\"text\" class=\"datagrid-editable-input\">").appendTo(container);        gridNumBoxObj.numberbox(options);        return gridNumBoxObj;    }, destroy: function (target) {        $(target).numberbox("destroy");    }, getValue: function (target) {        return $(target).val();    }, setValue: function (target, value) {        $(target).val(value);    }, resize: function (target, width) {        var targetObj = $(target);        if ($.boxModel == true) {            targetObj.width(width - (targetObj.outerWidth() - targetObj.width()));        } else {            targetObj.width(width);        }    }    }, validatebox: { init: function (container, options) {        var gridvalidateBoxObj = $("<input type=\"text\" class=\"datagrid-editable-input\">").appendTo(container);        gridvalidateBoxObj.validatebox(options);        return gridvalidateBoxObj;    }, destroy: function (target) {        $(target).validatebox("destroy");    }, getValue: function (target) {        return $(target).val();    }, setValue: function (target, value) {        $(target).val(value);    }, resize: function (taget, width) {        var targetObj = $(taget);        if ($.boxModel == true) {            targetObj.width(width - (targetObj.outerWidth() - targetObj.width()));        } else {            targetObj.width(width);        }    }    }, datebox: { init: function (container, options) {        var gridDateBoxObj = $("<input type=\"text\">").appendTo(container);        gridDateBoxObj.datebox(options);        return gridDateBoxObj;    }, destroy: function (target) {        $(target).datebox("destroy");    }, getValue: function (target) {        return $(target).datebox("getValue");    }, setValue: function (target, value) {        $(target).datebox("setValue", value);    }, resize: function (target, width) {        $(target).datebox("resize", width);    }    }, combobox: { init: function (container, options) {        var gridcomboxObj = $("<input type=\"text\">").appendTo(container);        gridcomboxObj.combobox(options || {});        return gridcomboxObj;    }, destroy: function (target) {        $(target).combobox("destroy");    }, getValue: function (target) {        return $(target).combobox("getValue");    }, setValue: function (target, value) {        $(target).combobox("setValue", value);    }, resize: function (target, width) {        $(target).combobox("resize", width);    }    }, combotree: { init: function (container, options) {        var gridcombotreeObj = $("<input type=\"text\">").appendTo(container);        gridcombotreeObj.combotree(options);        return gridcombotreeObj;    }, destroy: function (target) {        $(target).combotree("destroy");    }, getValue: function (target) {        return $(target).combotree("getValue");    }, setValue: function (target, value) {        $(target).combotree("setValue", value);    }, resize: function (target, width) {        $(target).combotree("resize", width);    }    }    };    $.fn.datagrid.methods = { options: function (jq) {        var opts = $.data(jq[0], "datagrid").options;        var pnlOpts = $.data(jq[0], "datagrid").panel.panel("options");        var opts = $.extend(opts, { width: pnlOpts.width, height: pnlOpts.height, closed: pnlOpts.closed, collapsed: pnlOpts.collapsed, minimized: pnlOpts.minimized, maximized: pnlOpts.maximized });        var pager = jq.datagrid("getPager");        if (pager.length) {            var pagerOpts = pager.pagination("options");            $.extend(opts, { pageNumber: pagerOpts.pageNumber, pageSize: pagerOpts.pageSize });        }        return opts;    }, getPanel: function (jq) {        return $.data(jq[0], "datagrid").panel;    }, getPager: function (jq) {        return $.data(jq[0], "datagrid").panel.find("div.datagrid-pager");    }, getColumnFields: function (jq, frozen) {        return getColumnFiles(jq[0], frozen);    }, getColumnOption: function (jq, filed) {        return getColOptions(jq[0], filed);    }, resize: function (jq, params) {        return jq.each(function () {            setSize(this, params);        });    }, load: function (jq, param) {        return jq.each(function () {            var opts = $(this).datagrid("options");            opts.pageNumber = 1;            var pager = $(this).datagrid("getPager");            pager.pagination({ pageNumber: 1 });            request(this, param);        });    }, reload: function (jq, param) {        return jq.each(function () {            request(this, param);        });    }, reloadFooter: function (jq, footer) {        return jq.each(function () {            var opts = $.data(this, "datagrid").options;            var view = $(this).datagrid("getPanel").children("div.datagrid-view");            var view1 = view.children("div.datagrid-view1");            var view2 = view.children("div.datagrid-view2");            if (footer) {                $.data(this, "datagrid").footer = footer;            }            if (opts.showFooter) {                opts.view.renderFooter.call(opts.view, this, view2.find("div.datagrid-footer-inner"), false);                opts.view.renderFooter.call(opts.view, this, view1.find("div.datagrid-footer-inner"), true);                if (opts.view.onAfterRender) {                    opts.view.onAfterRender.call(opts.view, this);                }                $(this).datagrid("fixRowHeight");            }        });    }, loading: function (jq) {        return jq.each(function () {            var opts = $.data(this, "datagrid").options;            $(this).datagrid("getPager").pagination("loading");            if (opts.loadMsg) {                var wrap = $(this).datagrid("getPanel");                $("<div class=\"datagrid-mask\"></div>").css({ display: "block", width: wrap.width(), height: wrap.height() }).appendTo(wrap);                $("<div class=\"datagrid-mask-msg\"></div>").html(opts.loadMsg).appendTo(wrap).css({ display: "block", left: (wrap.width() - $("div.datagrid-mask-msg", wrap).outerWidth()) / 2, top: (wrap.height() - $("div.datagrid-mask-msg", wrap).outerHeight()) / 2 });            }        });    }, loaded: function (jq) {        return jq.each(function () {            $(this).datagrid("getPager").pagination("loaded");            var pnl = $(this).datagrid("getPanel");            pnl.children("div.datagrid-mask-msg").remove();            pnl.children("div.datagrid-mask").remove();        });    }, fitColumns: function (jq) {        return jq.each(function () {            fixColumnWidth(this);        });    }, fixColumnSize: function (jq) {        return jq.each(function () {            fixColumnSize(this);        });    }, fixRowHeight: function (jq, index) {        return jq.each(function () {            fixRowHeight(this, index);        });    }, loadData: function (jq, data) {        return jq.each(function () {            loadData(this, data);            cacheRows(this);        });    }, getData: function (jq) {        return $.data(jq[0], "datagrid").data;    }, getRows: function (jq) {        return $.data(jq[0], "datagrid").data.rows;    }, getFooterRows: function (jq) {        return $.data(jq[0], "datagrid").footer;    }, getRowIndex: function (jq, id) {        return getRowIndex(jq[0], id);    }, getSelected: function (jq) {        var rows = getSelectRows(jq[0]);        return rows.length > 0 ? rows[0] : null;    }, getSelections: function (jq) {        return getSelectRows(jq[0]);    }, clearSelections: function (jq) {        return jq.each(function () {            clearSelections(this);        });    }, selectAll: function (jq) {        return jq.each(function () {            selectAll(this);        });    }, unselectAll: function (jq) {        return jq.each(function () {            clearSelectRows(this);        });    }, selectRow: function (jq, index) {        return jq.each(function () {            selectRow(this, index);        });    }, selectRecord: function (jq, id) {        return jq.each(function () {            selectRecord(this, id);        });    }, unselectRow: function (jq, index) {        return jq.each(function () {            unSelectRow(this, index);        });    }, beginEdit: function (jq, index) {        return jq.each(function () {            beginEdit(this, index);        });    }, endEdit: function (jq, index) {        return jq.each(function () {            endEdit(this, index, false);        });    }, cancelEdit: function (jq, index) {        return jq.each(function () {            endEdit(this, index, true);        });    }, getEditors: function (jq, index) {        return getEditors(jq[0], index);    }, getEditor: function (jq, options) {        return getEditor(jq[0], options);    }, refreshRow: function (jq, index) {        return jq.each(function () {            var opts = $.data(this, "datagrid").options;            opts.view.refreshRow.call(opts.view, this, index);        });    }, validateRow: function (jq, index) {        return validateRow(jq[0], index);    }, updateRow: function (jq, param) {        return jq.each(function () {            var opts = $.data(this, "datagrid").options;            opts.view.updateRow.call(opts.view, this, param.index, param.row);        });    }, appendRow: function (jq, row) {        return jq.each(function () {            appendRow(this, row);        });    }, insertRow: function (jq, param) {        return jq.each(function () {            insertRow(this, param);        });    }, deleteRow: function (jq, index) {        return jq.each(function () {            deleteRow(this, index);        });    }, getChanges: function (jq, type) {        return getChanges(jq[0], type);    }, acceptChanges: function (jq) {        return jq.each(function () {            acceptChanges(this);        });    }, rejectChanges: function (jq) {        return jq.each(function () {            rejectChanges(this);        });    }, mergeCells: function (jq, options) {        return jq.each(function () {            mergeCells(this, options);        });    }, showColumn: function (jq, filed) {        return jq.each(function () {            var pnl = $(this).datagrid("getPanel");            pnl.find("td[field=" + filed + "]").show();            $(this).datagrid("getColumnOption", filed).hidden = false;            $(this).datagrid("fitColumns");        });    }, hideColumn: function (jq, filed) {        return jq.each(function () {            var pnl = $(this).datagrid("getPanel");            pnl.find("td[field=" + filed + "]").hide();            $(this).datagrid("getColumnOption", filed).hidden = true;            $(this).datagrid("fitColumns");        });    }    };    $.fn.datagrid.parseOptions = function (target) {        var t = $(target);        return $.extend({}, $.fn.panel.parseOptions(target), { fitColumns: (t.attr("fitColumns") ? t.attr("fitColumns") == "true" : undefined), striped: (t.attr("striped") ? t.attr("striped") == "true" : undefined), nowrap: (t.attr("nowrap") ? t.attr("nowrap") == "true" : undefined), rownumbers: (t.attr("rownumbers") ? t.attr("rownumbers") == "true" : undefined), singleSelect: (t.attr("singleSelect") ? t.attr("singleSelect") == "true" : undefined), pagination: (t.attr("pagination") ? t.attr("pagination") == "true" : undefined), pageSize: (t.attr("pageSize") ? parseInt(t.attr("pageSize")) : undefined), pageList: (t.attr("pageList") ? eval(t.attr("pageList")) : undefined), remoteSort: (t.attr("remoteSort") ? t.attr("remoteSort") == "true" : undefined), showHeader: (t.attr("showHeader") ? t.attr("showHeader") == "true" : undefined), showFooter: (t.attr("showFooter") ? t.attr("showFooter") == "true" : undefined), scrollbarSize: (t.attr("scrollbarSize") ? parseInt(t.attr("scrollbarSize")) : undefined), loadMsg: (t.attr("loadMsg") != undefined ? t.attr("loadMsg") : undefined), idField: t.attr("idField"), toolbar: t.attr("toolbar"), url: t.attr("url") });    };    var renderView = { render: function (target, container, frozen) {        var opts = $.data(target, "datagrid").options;        var rows = $.data(target, "datagrid").data.rows;        var closFileds = $(target).datagrid("getColumnFields", frozen);        if (frozen) {            if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))) {                return;            }        }        var htmlAry = ["<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>"];        for (var i = 0; i < rows.length; i++) {            var cls = (i % 2 && opts.striped) ? "class=\"datagrid-row-alt\"" : "";            var rowStyle = opts.rowStyler ? opts.rowStyler.call(target, i, rows[i]) : "";            var strStyle = rowStyle ? "style=\"" + rowStyle + "\"" : "";            htmlAry.push("<tr datagrid-row-index=\"" + i + "\" " + cls + " " + strStyle + ">");            htmlAry.push(this.renderRow.call(this, target, closFileds, frozen, i, rows[i]));            htmlAry.push("</tr>");        }        htmlAry.push("</tbody></table>");        $(container).html(htmlAry.join(""));    }, renderFooter: function (target, container, frozen) {        var opts = $.data(target, "datagrid").options;        var rows = $.data(target, "datagrid").footer || [];        var cols = $(target).datagrid("getColumnFields", frozen);        var htmlAry = ["<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>"];        for (var i = 0; i < rows.length; i++) {            htmlAry.push("<tr datagrid-row-index=\"" + i + "\">");            htmlAry.push(this.renderRow.call(this, target, cols, frozen, i, rows[i]));            htmlAry.push("</tr>");        }        htmlAry.push("</tbody></table>");        $(container).html(htmlAry.join(""));    }, renderRow: function (target, fileds, frozen, rowIndex, rowData) {        var opts = $.data(target, "datagrid").options;        var cc = [];        if (frozen && opts.rownumbers) {            var tmpIndex = rowIndex + 1;            if (opts.pagination) {                tmpIndex += (opts.pageNumber - 1) * opts.pageSize;            }            cc.push("<td class=\"datagrid-td-rownumber\"><div class=\"datagrid-cell-rownumber\">" + tmpIndex + "</div></td>");        }        for (var i = 0; i < fileds.length; i++) {            var findFiled = fileds[i];            var col = $(target).datagrid("getColumnOption", findFiled);            if (col) {                var findStyler = col.styler ? (col.styler(rowData[findFiled], rowData, rowIndex) || "") : "";                var strFindStyler = col.hidden ? "style=\"display:none;" + findStyler + "\"" : (findStyler ? "style=\"" + findStyler + "\"" : "");                cc.push("<td field=\"" + findFiled + "\" " + strFindStyler + ">");                var strFindStyler = "width:" + (col.boxWidth) + "px;";                strFindStyler += "text-align:" + (col.align || "left") + ";";                strFindStyler += opts.nowrap == false ? "white-space:normal;" : "";                cc.push("<div style=\"" + strFindStyler + "\" ");                if (col.checkbox) {                    cc.push("class=\"datagrid-cell-check ");                } else {                    cc.push("class=\"datagrid-cell ");                }                cc.push("\">");                if (col.checkbox) {                    cc.push("<input type=\"checkbox\"/>");                } else {                    if (col.formatter) {                        cc.push(col.formatter(rowData[findFiled], rowData, rowIndex));                    } else {                        cc.push(rowData[findFiled]);                    }                }                cc.push("</div>");                cc.push("</td>");            }        }        return cc.join("");    }, refreshRow: function (target, rowIndex) {        var rows = $(target).datagrid("getRows");        this.updateRow.call(this, target, rowIndex, rows[rowIndex]);    }, updateRow: function (target, rowIndex, row) {        var opts = $.data(target, "datagrid").options;        var pnl = $(target).datagrid("getPanel");        var rows = $(target).datagrid("getRows");        var tr = pnl.find("div.datagrid-body tr[datagrid-row-index=" + rowIndex + "]");        for (var tmpfiled in row) {            rows[rowIndex][tmpfiled] = row[tmpfiled];            var td = tr.children("td[field=" + tmpfiled + "]");            var cell = td.find("div.datagrid-cell");            var col = $(target).datagrid("getColumnOption", tmpfiled);            if (col) {                var findStyler = col.styler ? col.styler(rows[rowIndex][tmpfiled], rows[rowIndex], rowIndex) : "";                td.attr("style", findStyler || "");                if (col.hidden) {                    td.hide();                }                if (col.formatter) {                    cell.html(col.formatter(rows[rowIndex][tmpfiled], rows[rowIndex], rowIndex));                } else {                    cell.html(rows[rowIndex][tmpfiled]);                }            }        }        var findStyler = opts.rowStyler ? opts.rowStyler.call(target, rowIndex, rows[rowIndex]) : "";        tr.attr("style", findStyler || "");        $(target).datagrid("fixRowHeight", rowIndex);    }, insertRow: function (target, rowIndex, row) {        var opts = $.data(target, "datagrid").options;        var data = $.data(target, "datagrid").data;        var view = $(target).datagrid("getPanel").children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        if (rowIndex == undefined || rowIndex == null) {            rowIndex = data.rows.length;        }        if (rowIndex > data.rows.length) {            rowIndex = data.rows.length;        }        for (var i = data.rows.length - 1; i >= rowIndex; i--) {            view2.children("div.datagrid-body").find("tr[datagrid-row-index=" + i + "]").attr("datagrid-row-index", i + 1);            var tr = view1.children("div.datagrid-body").find("tr[datagrid-row-index=" + i + "]").attr("datagrid-row-index", i + 1);            if (opts.rownumbers) {                tr.find("div.datagrid-cell-rownumber").html(i + 2);            }        }        var frozenCols = $(target).datagrid("getColumnFields", true);        var fitCols = $(target).datagrid("getColumnFields", false);        var tr1 = "<tr datagrid-row-index=\"" + rowIndex + "\">" + this.renderRow.call(this, target, frozenCols, true, rowIndex, row) + "</tr>";        var tr2 = "<tr datagrid-row-index=\"" + rowIndex + "\">" + this.renderRow.call(this, target, fitCols, false, rowIndex, row) + "</tr>";        if (rowIndex >= data.rows.length) {            var view1BodyInner = view1.children("div.datagrid-body").children("div.datagrid-body-inner");            var view2Body = view2.children("div.datagrid-body");            if (data.rows.length) {                view1BodyInner.find("tr:last[datagrid-row-index]").after(tr1);                view2Body.find("tr:last[datagrid-row-index]").after(tr2);            } else {                view1BodyInner.html("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>" + tr1 + "</tbody></table>");                view2Body.html("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>" + tr2 + "</tbody></table>");            }        } else {            view1.children("div.datagrid-body").find("tr[datagrid-row-index=" + (rowIndex + 1) + "]").before(tr1);            view2.children("div.datagrid-body").find("tr[datagrid-row-index=" + (rowIndex + 1) + "]").before(tr2);        }        data.total += 1;        data.rows.splice(rowIndex, 0, row);        this.refreshRow.call(this, target, rowIndex);    }, deleteRow: function (target, rowIndex) {        var opts = $.data(target, "datagrid").options;        var data = $.data(target, "datagrid").data;        var view = $(target).datagrid("getPanel").children("div.datagrid-view");        var view1 = view.children("div.datagrid-view1");        var view2 = view.children("div.datagrid-view2");        view1.children("div.datagrid-body").find("tr[datagrid-row-index=" + rowIndex + "]").remove();        view2.children("div.datagrid-body").find("tr[datagrid-row-index=" + rowIndex + "]").remove();        for (var i = rowIndex + 1; i < data.rows.length; i++) {            view2.children("div.datagrid-body").find("tr[datagrid-row-index=" + i + "]").attr("datagrid-row-index", i - 1);            var tr = view1.children("div.datagrid-body").find("tr[datagrid-row-index=" + i + "]").attr("datagrid-row-index", i - 1);            if (opts.rownumbers) {                tr.find("div.datagrid-cell-rownumber").html(i);            }        }        data.total -= 1;        data.rows.splice(rowIndex, 1);    }, onBeforeRender: function (target, rows) {    }, onAfterRender: function (target) {        var opts = $.data(target, "datagrid").options;        if (opts.showFooter) {            var footer = $(target).datagrid("getPanel").find("div.datagrid-footer");            footer.find("div.datagrid-cell-rownumber,div.datagrid-cell-check").css("visibility", "hidden");        }    }    };    $.fn.datagrid.defaults = $.extend({}, $.fn.panel.defaults, { frozenColumns: null, columns: null, fitColumns: false, toolbar: null, striped: false, method: "post", nowrap: true, idField: null, url: null, loadMsg: "Processing, please wait ...", rownumbers: false, singleSelect: false, pagination: false, pageNumber: 1, pageSize: 10, pageList: [10, 20, 30, 40, 50], queryParams: {}, sortName: null, sortOrder: "asc", remoteSort: true, showHeader: true, showFooter: false, scrollbarSize: 18, rowStyler: function (_1d1, _1d2) {    }, loadFilter: function (data) {        if (typeof data.length == "number" && typeof data.splice == "function") {            return { total: data.length, rows: data };        } else {            return data;        }    }, editors: editorsObj, editConfig: { getTr: function (target, index) {        return $(target).datagrid("getPanel").find("div.datagrid-body tr[datagrid-row-index=" + index + "]");    }, getRow: function (target, rowIndex) {        return $.data(target, "datagrid").data.rows[rowIndex];    }    }, view: renderView, onBeforeLoad: function (param) {    }, onLoadSuccess: function () {    }, onLoadError: function () {    }, onClickRow: function (rowIndex, rowData) {    }, onDblClickRow: function (rowIndex, rowData) {    }, onClickCell: function (rowIndex, filed, value) {    }, onDblClickCell: function (rowIndex, filed, value) {    }, onSortColumn: function (sort, order) {    }, onResizeColumn: function (filed, width) {    }, onSelect: function (rowIndex, rowData) {    }, onUnselect: function (rowIndex, rowData) {    }, onSelectAll: function (rows) {    }, onUnselectAll: function (rows) {    }, onBeforeEdit: function (rowIndex, rowData) {    }, onAfterEdit: function (rowIndex, rowData, changes) {    }, onCancelEdit: function (rowIndex, rowData) {    }, onHeaderContextMenu: function (e, filed) {    }, onRowContextMenu: function (e, rowIndex, rowData) {    }    });})(jQuery);


0 0
原创粉丝点击