/** * jQuery ligerUI 1.1.9 * * http://ligerui.com * * Author daomi 2012 [ gd_star@163.com ] * */ (function ($) { var l = $.ligerui; $.fn.ligerGrid = function (options) { return $.ligerui.run.call(this, "ligerGrid", arguments); }; $.fn.ligerGetGridManager = function () { return $.ligerui.run.call(this, "ligerGetGridManager", arguments); }; $.ligerDefaults.Grid = { title: null, width: 'auto', //宽度值 height: 'auto', //宽度值 columnWidth: null, //默认列宽度 resizable: true, //table是否可伸缩 url: false, //ajax url usePager: true, //是否分页 page: 1, //默认当前页 pageSize: 10, //每页默认的结果数 pageSizeOptions: [10, 20, 30, 40, 50], //可选择设定的每页结果数 parms: [], //提交到服务器的参数 columns: [], //数据源 minColToggle: 1, //最小显示的列 dataType: 'server', //数据源:本地(local)或(server),本地是将读取p.data。不需要配置,取决于设置了data或是url dataAction: 'server', //提交数据的方式:本地(local)或(server),选择本地方式时将在客服端分页、排序。 showTableToggleBtn: false, //是否显示'显示隐藏Grid'按钮 switchPageSizeApplyComboBox: false, //切换每页记录数是否应用ligerComboBox allowAdjustColWidth: true, //是否允许调整列宽 checkbox: false, //是否显示复选框 allowHideColumn: true, //是否显示'切换列层'按钮 enabledEdit: false, //是否允许编辑 isScroll: true, //是否滚动 onDragCol: null, //拖动列事件 onToggleCol: null, //切换列事件 onChangeSort: null, //改变排序事件 onSuccess: null, //成功获取服务器数据的事件 onDblClickRow: null, //双击行事件 onSelectRow: null, //选择行事件 onUnSelectRow: null, //取消选择行事件 onBeforeCheckRow: null, //选择前事件,可以通过return false阻止操作(复选框) onCheckRow: null, //选择事件(复选框) onBeforeCheckAllRow: null, //选择前事件,可以通过return false阻止操作(复选框 全选/全不选) onCheckAllRow: null, //选择事件(复选框 全选/全不选) onBeforeShowData: null, //显示数据前事件,可以通过reutrn false阻止操作 onAfterShowData: null, //显示完数据事件 onError: null, //错误事件 onSubmit: null, //提交前事件 dateFormat: 'yyyy-MM-dd', //默认时间显示格式 InWindow: true, //是否以窗口的高度为准 height设置为百分比时可用 statusName: '__status', //状态名 method: 'post', //提交方式 async: true, fixedCellHeight: true, //是否固定单元格的高度 heightDiff: 0, //高度补差,当设置height:100%时,可能会有高度的误差,可以通过这个属性调整 cssClass: null, //类名 root: 'Rows', //数据源字段名 record: 'Total', //数据源记录数字段名 pageParmName: 'page', //页索引参数名,(提交给服务器) pagesizeParmName: 'pagesize', //页记录数参数名,(提交给服务器) sortnameParmName: 'sortname', //页排序列名(提交给服务器) sortorderParmName: 'sortorder', //页排序方向(提交给服务器) onReload: null, //刷新事件,可以通过return false来阻止操作 onToFirst: null, //第一页,可以通过return false来阻止操作 onToPrev: null, //上一页,可以通过return false来阻止操作 onToNext: null, //下一页,可以通过return false来阻止操作 onToLast: null, //最后一页,可以通过return false来阻止操作 allowUnSelectRow: false, //是否允许反选行 alternatingRow: true, //奇偶行效果 mouseoverRowCssClass: 'l-grid-row-over', enabledSort: true, //是否允许排序 rowAttrRender: null, //行自定义属性渲染器(包括style,也可以定义) groupColumnName: null, //分组 - 列名 groupColumnDisplay: '分组', //分组 - 列显示名字 groupRender: null, //分组 - 渲染器 totalRender: null, //统计行(全部数据) delayLoad: false, //初始化时是否不加载 where: null, //数据过滤查询函数,(参数一 data item,参数二 data item index) selectRowButtonOnly: false, //复选框模式时,是否只允许点击复选框才能选择行 onAfterAddRow: null, //增加行后事件 onBeforeEdit: null, //编辑前事件 onBeforeSubmitEdit: null, //验证编辑器结果是否通过 onAfterEdit: null, //结束编辑后事件 onLoading: null, //加载时函数 onLoaded: null, //加载完函数 onContextmenu: null, //右击事件 whenRClickToSelect: false, //右击行时是否选中 contentType: null, //Ajax contentType参数 checkboxColWidth: 27, //复选框列宽度 detailColWidth: 29, //明细列宽度 clickToEdit: true, //是否点击单元格的时候就编辑 detailToEdit: false, //是否点击明细的时候进入编辑 onEndEdit: null, minColumnWidth: 80, tree: null, //treeGrid模式 isChecked: null, //复选框 初始化函数 frozen: true, //是否固定列 frozenDetail: false, //明细按钮是否在固定列中 frozenCheckbox: true, //复选框按钮是否在固定列中 detailHeight: 260, rownumbers: false, //是否显示行序号 frozenRownumbers: true, //行序号是否在固定列中 rownumbersColWidth: 26, colDraggable: false, //是否允许表头拖拽 rowDraggable: false, //是否允许行拖拽 rowDraggingRender: null, autoCheckChildren: true, //是否自动选中子节点 onRowDragDrop: null, //行拖拽事件 rowHeight: 22, //行默认的高度 headerRowHeight: 23, //表头行的高度 toolbar: null, //工具条,参数同 ligerToolbar的 headerImg: null //表格头部图标 }; $.ligerDefaults.GridString = { errorMessage: '发生错误', pageStatMessage: '显示从{from}到{to},总 {total} 条 。每页显示:{pagesize}', pageTextMessage: 'Page', loadingMessage: '加载中...', findTextMessage: '查找', noRecordMessage: '没有符合条件的记录存在', isContinueByDataChanged: '数据已经改变,如果继续将丢失数据,是否继续?', cancelMessage: '取消', saveMessage: '保存', applyMessage: '应用', draggingMessage: '{count}行' }; //接口方法扩展 $.ligerMethos.Grid = $.ligerMethos.Grid || {}; //排序器扩展 $.ligerDefaults.Grid.sorters = $.ligerDefaults.Grid.sorters || {}; //格式化器扩展 $.ligerDefaults.Grid.formatters = $.ligerDefaults.Grid.formatters || {}; //编辑器扩展 $.ligerDefaults.Grid.editors = $.ligerDefaults.Grid.editors || {}; $.ligerDefaults.Grid.sorters['date'] = function (val1, val2) { return val1 < val2 ? -1 : val1 > val2 ? 1 : 0; }; $.ligerDefaults.Grid.sorters['int'] = function (val1, val2) { return parseInt(val1) < parseInt(val2) ? -1 : parseInt(val1) > parseInt(val2) ? 1 : 0; }; $.ligerDefaults.Grid.sorters['float'] = function (val1, val2) { return parseFloat(val1) < parseFloat(val2) ? -1 : parseFloat(val1) > parseFloat(val2) ? 1 : 0; }; $.ligerDefaults.Grid.sorters['string'] = function (val1, val2) { return val1.localeCompare(val2); }; $.ligerDefaults.Grid.formatters['date'] = function (value, column) { function getFormatDate(date, dateformat) { var g = this, p = this.options; if (isNaN(date)) return null; var format = dateformat; var o = { "M+": date.getMonth() + 1, "d+": date.getDate(), "h+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), "S": date.getMilliseconds() } if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + "") .substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); } } return format; } if (!value) return ""; // /Date(1328423451489)/ if (typeof (value) == "string" && /^\/Date/.test(value)) { value = value.replace(/^\//, "new ").replace(/\/$/, ""); eval("value = " + value); } if (value instanceof Date) { var format = column.format || this.options.dateFormat || "yyyy-MM-dd"; return getFormatDate(value, format); } else { return value.toString(); } } $.ligerDefaults.Grid.editors['date'] = { create: function (container, editParm) { var column = editParm.column; var input = $(""); container.append(input); var options = {}; var ext = column.editor.p || column.editor.ext; if (ext) { var tmp = typeof (ext) == 'function' ? ext(editParm.record, editParm.rowindex, editParm.value, column) : ext; $.extend(options, tmp); } input.ligerDateEditor(options); return input; }, getValue: function (input, editParm) { return input.liger('option', 'value'); }, setValue: function (input, value, editParm) { input.liger('option', 'value', value); }, resize: function (input, width, height, editParm) { input.liger('option', 'width', width); input.liger('option', 'height', height); }, destroy: function (input, editParm) { input.liger('destroy'); } }; $.ligerDefaults.Grid.editors['select'] = $.ligerDefaults.Grid.editors['combobox'] = { create: function (container, editParm) { var column = editParm.column; var input = $(""); container.append(input); var options = { data: column.editor.data, slide: false, valueField: column.editor.valueField || column.editor.valueColumnName, textField: column.editor.textField || column.editor.displayColumnName }; var ext = column.editor.p || column.editor.ext; if (ext) { var tmp = typeof (ext) == 'function' ? ext(editParm.record, editParm.rowindex, editParm.value, column) : ext; $.extend(options, tmp); } input.ligerComboBox(options); return input; }, getValue: function (input, editParm) { return input.liger('option', 'value'); }, setValue: function (input, value, editParm) { input.liger('option', 'value', value); }, resize: function (input, width, height, editParm) { input.liger('option', 'width', width); input.liger('option', 'height', height); }, destroy: function (input, editParm) { input.liger('destroy'); } }; $.ligerDefaults.Grid.editors['int'] = $.ligerDefaults.Grid.editors['float'] = $.ligerDefaults.Grid.editors['spinner'] = { create: function (container, editParm) { var column = editParm.column; var input = $(""); container.append(input); input.css({ border: '#6E90BE' }) var options = { type: column.editor.type == 'float' ? 'float' : 'int' }; if (column.editor.minValue != undefined) options.minValue = column.editor.minValue; if (column.editor.maxValue != undefined) options.maxValue = column.editor.maxValue; input.ligerSpinner(options); return input; }, getValue: function (input, editParm) { var column = editParm.column; var isInt = column.editor.type == "int"; if (isInt) return parseInt(input.val(), 10); else return parseFloat(input.val()); }, setValue: function (input, value, editParm) { input.val(value); }, resize: function (input, width, height, editParm) { input.liger('option', 'width', width); input.liger('option', 'height', height); }, destroy: function (input, editParm) { input.liger('destroy'); } }; $.ligerDefaults.Grid.editors['string'] = $.ligerDefaults.Grid.editors['text'] = { create: function (container, editParm) { var input = $(""); container.append(input); input.ligerTextBox(); return input; }, getValue: function (input, editParm) { return input.val(); }, setValue: function (input, value, editParm) { input.val(value); }, resize: function (input, width, height, editParm) { input.liger('option', 'width', width); input.liger('option', 'height', height); }, destroy: function (input, editParm) { input.liger('destroy'); } }; $.ligerDefaults.Grid.editors['chk'] = $.ligerDefaults.Grid.editors['checkbox'] = { create: function (container, editParm) { var input = $(""); container.append(input); input.ligerCheckBox(); return input; }, getValue: function (input, editParm) { return input[0].checked ? 1 : 0; }, setValue: function (input, value, editParm) { input.val(value ? true : false); }, resize: function (input, width, height, editParm) { input.liger('option', 'width', width); input.liger('option', 'height', height); }, destroy: function (input, editParm) { input.liger('destroy'); } }; $.ligerui.controls.Grid = function (element, options) { $.ligerui.controls.Grid.base.constructor.call(this, element, options); }; $.ligerui.controls.Grid.ligerExtend($.ligerui.core.UIComponent, { __getType: function () { return '$.ligerui.controls.Grid'; }, __idPrev: function () { return 'grid'; }, _extendMethods: function () { return $.ligerMethos.Grid; }, _init: function () { $.ligerui.controls.Grid.base._init.call(this); var g = this, p = this.options; p.dataType = p.url ? "server" : "local"; if (p.dataType == "local") { p.data = p.data || []; p.dataAction = "local"; } if (p.isScroll == false) { p.height = 'auto'; } if (!p.frozen) { p.frozenCheckbox = false; p.frozenDetail = false; p.frozenRownumbers = false; } if (p.detailToEdit) { p.enabledEdit = true; p.clickToEdit = false; p.detail = { height: 'auto', onShowDetail: function (record, container, callback) { $(container).addClass("l-grid-detailpanel-edit"); g.beginEdit(record, function (rowdata, column) { var editContainer = $("
"); editContainer.width(120).height(p.rowHeight + 1); editContainer.appendTo(container); return editContainer; }); function removeRow() { $(container).parent().parent().remove(); g.collapseDetail(record); } $("
").appendTo(container); $("
" + p.saveMessage + "
").appendTo(container).click(function () { g.endEdit(record); removeRow(); }); $("
" + p.applyMessage + "
").appendTo(container).click(function () { g.submitEdit(record); }); $("
" + p.cancelMessage + "
").appendTo(container).click(function () { g.cancelEdit(record); removeRow(); }); } }; } if (p.tree)//启用分页模式 { p.tree.childrenName = p.tree.childrenName || "children"; p.tree.isParent = p.tree.isParent || function (rowData) { var exist = p.tree.childrenName in rowData; return exist; }; p.tree.isExtend = p.tree.isExtend || function (rowData) { if ('isextend' in rowData && rowData['isextend'] == false) return false; return true; }; } }, _render: function () { var g = this, p = this.options; g.grid = $(g.element); g.grid.addClass("l-panel"); var gridhtmlarr = []; gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
/
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); g.grid.html(gridhtmlarr.join('')); //头部 g.header = $(".l-panel-header:first", g.grid); //主体 g.body = $(".l-panel-body:first", g.grid); //底部工具条 g.toolbar = $(".l-panel-bar:first", g.grid); //显示/隐藏列 g.popup = $(".l-grid-popup:first", g.grid); //加载中 g.gridloading = $(".l-grid-loading:first", g.grid); //调整列宽层 g.draggingline = $(".l-grid-dragging-line", g.grid); //顶部工具栏 g.topbar = $(".l-panel-topbar:first", g.grid); g.gridview = $(".l-grid:first", g.grid); g.gridview.attr("id", g.id + "grid"); g.gridview1 = $(".l-grid1:first", g.gridview); g.gridview2 = $(".l-grid2:first", g.gridview); //表头 g.gridheader = $(".l-grid-header:first", g.gridview2); //表主体 g.gridbody = $(".l-grid-body:first", g.gridview2); //frozen g.f = {}; //表头 g.f.gridheader = $(".l-grid-header:first", g.gridview1); //表主体 g.f.gridbody = $(".l-grid-body:first", g.gridview1); g.currentData = null; g.changedCells = {}; g.editors = {}; //多编辑器同时存在 g.editor = { editing: false }; //单编辑器,配置clickToEdit if (p.height == "auto") { g.bind("SysGridHeightChanged", function () { if (g.enabledFrozen()) g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height())); }); } var pc = $.extend({}, p); this._bulid(); this._setColumns(p.columns); delete pc['columns']; delete pc['data']; delete pc['url']; g.set(pc); if (!p.delayLoad) { if (p.url) g.set({ url: p.url }); else if (p.data) g.set({ data: p.data }); } }, _setFrozen: function (frozen) { if (frozen) this.grid.addClass("l-frozen"); else this.grid.removeClass("l-frozen"); }, _setCssClass: function (value) { this.grid.addClass(value); }, _setLoadingMessage: function (value) { this.gridloading.html(value); }, _setHeight: function (h) { var g = this, p = this.options; g.unbind("SysGridHeightChanged"); if (h == "auto") { g.bind("SysGridHeightChanged", function () { if (g.enabledFrozen()) g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height())); }); return; } if (typeof h == "string" && h.indexOf('%') > 0) { if (p.inWindow) h = $(window).height() * parseFloat(h) * 0.01; else h = g.grid.parent().height() * parseFloat(h) * 0.01; } if (p.title) h -= 24; if (p.usePager) h -= 32; if (p.totalRender) h -= 25; if (p.toolbar) h -= g.topbar.outerHeight(); var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1; h -= gridHeaderHeight; if (h > 0) { g.gridbody.height(h); if (h > 18) g.f.gridbody.height(h - 18); g.gridview.height(h + gridHeaderHeight); } }, _updateFrozenWidth: function () { var g = this, p = this.options; if (g.enabledFrozen()) { g.gridview1.width(g.f.gridtablewidth); var view2width = g.gridview.width() - g.f.gridtablewidth; g.gridview2.css({ left: g.f.gridtablewidth }); if (view2width > 0) g.gridview2.css({ width: view2width }); } }, _setWidth: function (value) { var g = this, p = this.options; if (g.enabledFrozen()) g._onResize(); }, _setUrl: function (value) { this.options.url = value; if (value) { this.options.dataType = "server"; this.loadData(true); } else { this.options.dataType = "local"; } }, _setData: function (value) { this.loadData(this.options.data); }, //刷新数据 loadData: function (loadDataParm) { var g = this, p = this.options; g.loading = true; var clause = null; var loadServer = true; if (typeof (loadDataParm) == "function") { clause = loadDataParm; loadServer = false; } else if (typeof (loadDataParm) == "boolean") { loadServer = loadDataParm; } else if (typeof (loadDataParm) == "object" && loadDataParm) { loadServer = false; p.dataType = "local"; p.data = loadDataParm; } //参数初始化 if (!p.newPage) p.newPage = 1; if (p.dataAction == "server") { if (!p.sortOrder) p.sortOrder = "asc"; } var param = []; if (p.parms) { if (p.parms.length) { $(p.parms).each(function () { param.push({ name: this.name, value: this.value }); }); } else if (typeof p.parms == "object") { for (var name in p.parms) { param.push({ name: name, value: p.parms[name] }); } } } if (p.dataAction == "server") { if (p.usePager) { param.push({ name: p.pageParmName, value: p.newPage }); param.push({ name: p.pagesizeParmName, value: p.pageSize }); } if (p.sortName) { param.push({ name: p.sortnameParmName, value: p.sortName }); param.push({ name: p.sortorderParmName, value: p.sortOrder }); } }; $(".l-bar-btnload span", g.toolbar).addClass("l-disabled"); if (p.dataType == "local") { g.filteredData = g.data = p.data; if (clause) g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause); if (p.usePager) g.currentData = g._getCurrentPageData(g.filteredData); else { g.currentData = g.filteredData; } g._showData(); } else if (p.dataAction == "local" && !loadServer) { if (g.data && g.data[p.root]) { g.filteredData = g.data; if (clause) g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause); g.currentData = g._getCurrentPageData(g.filteredData); g._showData(); } } else { g.loadServerData(param, clause); //g.loadServerData.ligerDefer(g, 10, [param, clause]); } g.loading = false; }, loadServerData: function (param, clause) { var g = this, p = this.options; var ajaxOptions = { type: p.method, url: p.url, data: param, async: p.async, dataType: 'json', beforeSend: function () { if (g.hasBind('loading')) { g.trigger('loading'); } else { g.toggleLoading(true); } }, success: function (data) { g.trigger('success', [data, g]); if (!data || !data[p.root] || !data[p.root].length) { g.currentData = g.data = {}; g.currentData[p.root] = g.data[p.root] = []; g.currentData[p.record] = g.data[p.record] = 0; g._showData(); return; } g.data = data; if (p.dataAction == "server") { g.currentData = g.data; } else { g.filteredData = g.data; if (clause) g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause); if (p.usePager) g.currentData = g._getCurrentPageData(g.filteredData); else g.currentData = g.filteredData; } g._showData.ligerDefer(g, 10, [g.currentData]); }, complete: function () { g.trigger('complete', [g]); if (g.hasBind('loaded')) { g.trigger('loaded', [g]); } else { g.toggleLoading.ligerDefer(g, 10, [false]); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { g.currentData = g.data = {}; g.currentData[p.root] = g.data[p.root] = []; g.currentData[p.record] = g.data[p.record] = 0; g.toggleLoading.ligerDefer(g, 10, [false]); $(".l-bar-btnload span", g.toolbar).removeClass("l-disabled"); g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]); } }; if (p.contentType) ajaxOptions.contentType = p.contentType; $.ajax(ajaxOptions); }, toggleLoading: function (show) { this.gridloading[show ? 'show' : 'hide'](); }, _createEditor: function (editor, container, editParm, width, height) { var editorInput = editor.create(container, editParm); if (editor.setValue) editor.setValue(editorInput, editParm.value, editParm); if (editor.resize) editor.resize(editorInput, width, height, editParm); return editorInput; }, /* @description 使一行进入编辑状态 @param {rowParm} rowindex或者rowdata @param {containerBulider} 编辑器填充层构造器 */ beginEdit: function (rowParm, containerBulider) { var g = this, p = this.options; if (!p.enabledEdit || p.clickToEdit) return; var rowdata = g.getRow(rowParm); if (rowdata._editing) return; if (g.trigger('beginEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return; g.editors[rowdata['__id']] = {}; rowdata._editing = true; g.reRender({ rowdata: rowdata }); containerBulider = containerBulider || function (rowdata, column) { var cellobj = g.getCellObj(rowdata, column); var container = $(cellobj).html(""); g.setCellEditing(rowdata, column, true); return container; }; for (var i = 0, l = g.columns.length; i < l; i++) { var column = g.columns[i]; if (!column.name || !column.editor || !column.editor.type || !p.editors[column.editor.type]) continue; var editor = p.editors[column.editor.type]; var editParm = { record: rowdata, value: rowdata[column.name], column: column, rowindex: rowdata['__index'], grid: g }; var container = containerBulider(rowdata, column); var width = container.width(), height = container.height(); var editorInput = g._createEditor(editor, container, editParm, width, height); g.editors[rowdata['__id']][column['__id']] = { editor: editor, input: editorInput, editParm: editParm, container: container }; } g.trigger('afterBeginEdit', { record: rowdata, rowindex: rowdata['__index'] }); }, cancelEdit: function (rowParm) { var g = this; if (rowParm == undefined) { for (var rowid in g.editors) { g.cancelEdit(rowid); } } else { var rowdata = g.getRow(rowParm); if (!g.editors[rowdata['__id']]) return; if (g.trigger('cancelEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return; for (var columnid in g.editors[rowdata['__id']]) { var o = g.editors[rowdata['__id']][columnid]; if (o.editor.destroy) o.editor.destroy(o.input, o.editParm); } delete g.editors[rowdata['__id']]; delete rowdata['_editing']; g.reRender({ rowdata: rowdata }); } }, addEditRow: function (rowdata) { this.submitEdit(); rowdata = this.add(rowdata); this.beginEdit(rowdata); }, submitEdit: function (rowParm) { var g = this, p = this.options; if (rowParm == undefined) { for (var rowid in g.editors) { g.submitEdit(rowid); } } else { var rowdata = g.getRow(rowParm); var newdata = {}; if (!g.editors[rowdata['__id']]) return; for (var columnid in g.editors[rowdata['__id']]) { var o = g.editors[rowdata['__id']][columnid]; var column = o.editParm.column; if (column.name) newdata[column.name] = o.editor.getValue(o.input, o.editParm); } if (g.trigger('beforeSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata }) == false) return false; g.updateRow(rowdata, newdata); g.trigger('afterSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata }); } }, endEdit: function (rowParm) { var g = this, p = this.options; if (g.editor.editing) { var o = g.editor; g.trigger('sysEndEdit', [g.editor.editParm]); g.trigger('endEdit', [g.editor.editParm]); if (o.editor.destroy) o.editor.destroy(o.input, o.editParm); g.editor.container.remove(); g.reRender({ rowdata: g.editor.editParm.record, column: g.editor.editParm.column }); g.trigger('afterEdit', [g.editor.editParm]); g.editor = { editing: false }; } else if (rowParm != undefined) { var rowdata = g.getRow(rowParm); if (!g.editors[rowdata['__id']]) return; if (g.submitEdit(rowParm) == false) return false; for (var columnid in g.editors[rowdata['__id']]) { var o = g.editors[rowdata['__id']][columnid]; if (o.editor.destroy) o.editor.destroy(o.input, o.editParm); } delete g.editors[rowdata['__id']]; delete rowdata['_editing']; g.trigger('afterEdit', { record: rowdata, rowindex: rowdata['__index'] }); } else { for (var rowid in g.editors) { g.endEdit(rowid); } } }, setWidth: function (w) { return this._setWidth(w); }, setHeight: function (h) { return this._setHeight(h); }, //是否启用复选框列 enabledCheckbox: function () { return this.options.checkbox ? true : false; }, //是否固定列 enabledFrozen: function () { var g = this, p = this.options; if (!p.frozen) return false; var cols = g.columns || []; if (g.enabledDetail() && p.frozenDetail || g.enabledCheckbox() && p.frozenCheckbox || p.frozenRownumbers && p.rownumbers) return true; for (var i = 0, l = cols.length; i < l; i++) { if (cols[i].frozen) { return true; } } this._setFrozen(false); return false; }, //是否启用明细编辑 enabledDetailEdit: function () { if (!this.enabledDetail()) return false; return this.options.detailToEdit ? true : false; }, //是否启用明细列 enabledDetail: function () { if (this.options.detail && this.options.detail.onShowDetail) return true; return false; }, //是否启用分组 enabledGroup: function () { return this.options.groupColumnName ? true : false; }, deleteSelectedRow: function () { if (!this.selected) return; for (var i in this.selected) { var o = this.selected[i]; if (o['__id'] in this.records) this._deleteData.ligerDefer(this, 10, [o]); } this.reRender.ligerDefer(this, 20); }, removeRange: function (rowArr) { var g = this, p = this.options; $.each(rowArr, function () { g._removeData(this); }); g.reRender(); }, remove: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); g._removeData(rowParm); g.reRender(); }, deleteRange: function (rowArr) { var g = this, p = this.options; $.each(rowArr, function () { g._deleteData(this); }); g.reRender(); }, deleteRow: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); if (!rowdata) return; g._deleteData(rowdata); g.reRender(); g.isDataChanged = true; }, _deleteData: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); rowdata[p.statusName] = 'delete'; if (p.tree) { var children = g.getChildren(rowdata, true); if (children) { for (var i = 0, l = children.length; i < l; i++) { children[i][p.statusName] = 'delete'; } } } g.deletedRows = g.deletedRows || []; g.deletedRows.push(rowdata); g._removeSelected(rowdata); }, /* @param {arg} column index、column name、column、单元格 @param {value} 值 @param {rowParm} rowindex或者rowdata */ updateCell: function (arg, value, rowParm) { var g = this, p = this.options; var column, cellObj, rowdata; if (typeof (arg) == "string") //column name { for (var i = 0, l = g.columns.length; i < l; i++) { if (g.columns[i].name == arg) { g.updateCell(i, value, rowParm); } } return; } if (typeof (arg) == "number") { column = g.columns[arg]; rowdata = g.getRow(rowParm); cellObj = g.getCellObj(rowdata, column); } else if (typeof (arg) == "object" && arg['__id']) { column = arg; rowdata = g.getRow(rowParm); cellObj = g.getCellObj(rowdata, column); } else { cellObj = arg; var ids = cellObj.id.split('|'); var columnid = ids[ids.length - 1]; column = g._columns[columnid]; var row = $(cellObj).parent(); rowdata = rowdata || g.getRow(row[0]); } if (value != null && column.name) { rowdata[column.name] = value; if (rowdata[p.statusName] != 'add') rowdata[p.statusName] = 'update'; g.isDataChanged = true; } g.reRender({ rowdata: rowdata, column: column }); }, addRows: function (rowdataArr, neardata, isBefore, parentRowData) { var g = this, p = this.options; $(rowdataArr).each(function () { g.addRow(this, neardata, isBefore, parentRowData); }); }, _createRowid: function () { return "r" + (1000 + this.recordNumber); }, _isRowId: function (str) { return (str in this.records); }, _addNewRecord: function (o, previd, pid) { var g = this, p = this.options; g.recordNumber++; o['__id'] = g._createRowid(); o['__previd'] = previd; if (previd && previd != -1) { var prev = g.records[previd]; if (prev['__nextid'] && prev['__nextid'] != -1) { var prevOldNext = g.records[prev['__nextid']]; if (prevOldNext) prevOldNext['__previd'] = o['__id']; } prev['__nextid'] = o['__id']; o['__index'] = prev['__index'] + 1; } else { o['__index'] = 0; } if (p.tree) { if (pid && pid != -1) { var parent = g.records[pid]; o['__pid'] = pid; o['__level'] = parent['__level'] + 1; } else { o['__pid'] = -1; o['__level'] = 1; } o['__hasChildren'] = o[p.tree.childrenName] ? true : false; } if (o[p.statusName] != "add") o[p.statusName] = "nochanged"; g.rows[o['__index']] = o; g.records[o['__id']] = o; return o; }, //将原始的数据转换成适合 grid的行数据 _getRows: function (data) { var g = this, p = this.options; var targetData = []; function load(data) { if (!data || !data.length) return; for (var i = 0, l = data.length; i < l; i++) { var o = data[i]; targetData.push(o); if (o[p.tree.childrenName]) { load(o[p.tree.childrenName]); } } } load(data); return targetData; }, _updateGridData: function () { var g = this, p = this.options; g.recordNumber = 0; g.rows = []; g.records = {}; var previd = -1; function load(data, pid) { if (!data || !data.length) return; for (var i = 0, l = data.length; i < l; i++) { var o = data[i]; g.formatRecord(o); if (o[p.statusName] == "delete") continue; g._addNewRecord(o, previd, pid); previd = o['__id']; if (o['__hasChildren']) { load(o[p.tree.childrenName], o['__id']); } } } load(g.currentData[p.root], -1); return g.rows; }, _moveData: function (from, to, isAfter) { var g = this, p = this.options; var fromRow = g.getRow(from); var toRow = g.getRow(to); var fromIndex, toIndex; var listdata = g._getParentChildren(fromRow); fromIndex = $.inArray(fromRow, listdata); listdata.splice(fromIndex, 1); listdata = g._getParentChildren(toRow); toIndex = $.inArray(toRow, listdata); listdata.splice(toIndex + (isAfter ? 1 : 0), 0, fromRow); }, move: function (from, to, isAfter) { this._moveData(from, to, isAfter); this.reRender(); }, moveRange: function (rows, to, isAfter) { for (var i in rows) { this._moveData(rows[i], to, isAfter); } this.reRender(); }, up: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); var listdata = g._getParentChildren(rowdata); var index = $.inArray(rowdata, listdata); if (index == -1 || index == 0) return; var selected = g.getSelected(); g.move(rowdata, listdata[index - 1], false); g.select(selected); }, down: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); var listdata = g._getParentChildren(rowdata); var index = $.inArray(rowdata, listdata); if (index == -1 || index == listdata.length - 1) return; var selected = g.getSelected(); g.move(rowdata, listdata[index + 1], true); g.select(selected); }, addRow: function (rowdata, neardata, isBefore, parentRowData) { var g = this, p = this.options; rowdata = rowdata || {}; g._addData(rowdata, parentRowData, neardata, isBefore); g.reRender(); //标识状态 rowdata[p.statusName] = 'add'; if (p.tree) { var children = g.getChildren(rowdata, true); if (children) { for (var i = 0, l = children.length; i < l; i++) { children[i][p.statusName] = 'add'; } } } g.isDataChanged = true; p.total = p.total ? (p.total + 1) : 1; p.pageCount = Math.ceil(p.total / p.pageSize); g._buildPager(); g.trigger('SysGridHeightChanged'); g.trigger('afterAddRow', [rowdata]); return rowdata; }, updateRow: function (rowDom, newRowData) { var g = this, p = this.options; var rowdata = g.getRow(rowDom); //标识状态 g.isDataChanged = true; $.extend(rowdata, newRowData || {}); if (rowdata[p.statusName] != 'add') rowdata[p.statusName] = 'update'; g.reRender.ligerDefer(g, 10, [{ rowdata: rowdata}]); return rowdata; }, setCellEditing: function (rowdata, column, editing) { var g = this, p = this.options; var cell = g.getCellObj(rowdata, column); var methodName = editing ? 'addClass' : 'removeClass'; $(cell)[methodName]("l-grid-row-cell-editing"); if (rowdata['__id'] != 0) { var prevrowobj = $(g.getRowObj(rowdata['__id'])).prev(); if (!prevrowobj.length) return; var prevrow = g.getRow(prevrowobj[0]); var cellprev = g.getCellObj(prevrow, column); if (!cellprev) return; $(cellprev)[methodName]("l-grid-row-cell-editing-topcell"); } if (column['__previd'] != -1 && column['__previd'] != null) { var cellprev = $(g.getCellObj(rowdata, column)).prev(); $(cellprev)[methodName]("l-grid-row-cell-editing-leftcell"); } }, reRender: function (e) { var g = this, p = this.options; e = e || {}; var rowdata = e.rowdata, column = e.column; if (column && (column.isdetail || column.ischeckbox)) return; if (rowdata && rowdata[p.statusName] == "delete") return; if (rowdata && column) { var cell = g.getCellObj(rowdata, column); $(cell).html(g._getCellHtml(rowdata, column)); if (!column.issystem) g.setCellEditing(rowdata, column, false); } else if (rowdata) { $(g.columns).each(function () { g.reRender({ rowdata: rowdata, column: this }); }); } else if (column) { for (var rowid in g.records) { g.reRender({ rowdata: g.records[rowid], column: column }); } for (var i = 0; i < g.totalNumber; i++) { var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']); $("div:first", tobj).html(g._getTotalCellContent(column, g.groups && g.groups[i] ? g.groups[i] : g.currentData[p.root])); } } else { g._showData(); } }, getData: function (status, removeStatus) { var g = this, p = this.options; var data = []; for (var rowid in g.records) { var o = $.extend(true, {}, g.records[rowid]); if (o[p.statusName] == status || status == undefined) { data.push(g.formatRecord(o, removeStatus)); } } return data; }, //格式化数据 formatRecord: function (o, removeStatus) { delete o['__id']; delete o['__previd']; delete o['__nextid']; delete o['__index']; if (this.options.tree) { delete o['__pid']; delete o['__level']; delete o['__hasChildren']; } if (removeStatus) delete o[this.options.statusName]; return o; }, getUpdated: function () { return this.getData('update', true); }, getDeleted: function () { return this.deletedRows; }, getAdded: function () { return this.getData('add', true); }, getColumn: function (columnParm) { var g = this, p = this.options; if (typeof columnParm == "string") // column id { if (g._isColumnId(columnParm)) return g._columns[columnParm]; else return g.columns[parseInt(columnParm)]; } else if (typeof (columnParm) == "number") //column index { return g.columns[columnParm]; } else if (typeof columnParm == "object" && columnParm.nodeType == 1) //column header cell { var ids = columnParm.id.split('|'); var columnid = ids[ids.length - 1]; return g._columns[columnid]; } return columnParm; }, getColumnType: function (columnname) { var g = this, p = this.options; for (i = 0; i < g.columns.length; i++) { if (g.columns[i].name == columnname) { if (g.columns[i].type) return g.columns[i].type; return "string"; } } return null; }, //是否包含汇总 isTotalSummary: function () { var g = this, p = this.options; for (var i = 0; i < g.columns.length; i++) { if (g.columns[i].totalSummary) return true; } return false; }, //根据层次获取列集合 //如果columnLevel为空,获取叶节点集合 getColumns: function (columnLevel) { var g = this, p = this.options; var columns = []; for (var id in g._columns) { var col = g._columns[id]; if (columnLevel != undefined) { if (col['__level'] == columnLevel) columns.push(col); } else { if (col['__leaf']) columns.push(col); } } return columns; }, //改变排序 changeSort: function (columnName, sortOrder) { var g = this, p = this.options; if (g.loading) return true; if (p.dataAction == "local") { var columnType = g.getColumnType(columnName); if (!g.sortedData) g.sortedData = g.filteredData; if (p.sortName == columnName) { g.sortedData[p.root].reverse(); } else { g.sortedData[p.root].sort(function (data1, data2) { return g._compareData(data1, data2, columnName, columnType); }); } if (p.usePager) g.currentData = g._getCurrentPageData(g.sortedData); else g.currentData = g.sortedData; g._showData(); } p.sortName = columnName; p.sortOrder = sortOrder; if (p.dataAction == "server") { g.loadData(p.where); } }, //改变分页 changePage: function (ctype) { var g = this, p = this.options; if (g.loading) return true; if (p.dataAction != "local" && g.isDataChanged && !confirm(p.isContinueByDataChanged)) return false; p.pageCount = parseInt($(".pcontrol span", g.toolbar).html()); switch (ctype) { case 'first': if (p.page == 1) return; p.newPage = 1; break; case 'prev': if (p.page == 1) return; if (p.page > 1) p.newPage = parseInt(p.page) - 1; break; case 'next': if (p.page >= p.pageCount) return; p.newPage = parseInt(p.page) + 1; break; case 'last': if (p.page >= p.pageCount) return; p.newPage = p.pageCount; break; case 'input': var nv = parseInt($('.pcontrol input', g.toolbar).val()); if (isNaN(nv)) nv = 1; if (nv < 1) nv = 1; else if (nv > p.pageCount) nv = p.pageCount; $('.pcontrol input', g.toolbar).val(nv); p.newPage = nv; break; } if (p.newPage == p.page) return false; if (p.newPage == 1) { $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled"); $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled"); } else { $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled"); $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled"); } if (p.newPage == p.pageCount) { $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled"); $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled"); } else { $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled"); $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled"); } g.trigger('changePage', [p.newPage]); if (p.dataAction == "server") { g.loadData(p.where); } else { g.currentData = g._getCurrentPageData(g.filteredData); g._showData(); } }, getSelectedRow: function () { for (var i in this.selected) { var o = this.selected[i]; if (o['__id'] in this.records) return o; } return null; }, getSelectedRows: function () { var arr = []; for (var i in this.selected) { var o = this.selected[i]; if (o['__id'] in this.records) arr.push(o); } return arr; }, getSelectedRowObj: function () { for (var i in this.selected) { var o = this.selected[i]; if (o['__id'] in this.records) return this.getRowObj(o); } return null; }, getSelectedRowObjs: function () { var arr = []; for (var i in this.selected) { var o = this.selected[i]; if (o['__id'] in this.records) arr.push(this.getRowObj(o)); } return arr; }, getCellObj: function (rowParm, column) { var rowdata = this.getRow(rowParm); column = this.getColumn(column); return document.getElementById(this._getCellDomId(rowdata, column)); }, getRowObj: function (rowParm, frozen) { var g = this, p = this.options; if (rowParm == null) return null; if (typeof (rowParm) == "string") { if (g._isRowId(rowParm)) return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + rowParm); else return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[parseInt(rowParm)]['__id']); } else if (typeof (rowParm) == "number") { return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[rowParm]['__id']); } else if (typeof (rowParm) == "object" && rowParm['__id']) //rowdata { return g.getRowObj(rowParm['__id'], frozen); } return rowParm; }, getRow: function (rowParm) { var g = this, p = this.options; if (rowParm == null) return null; if (typeof (rowParm) == "string") { if (g._isRowId(rowParm)) return g.records[rowParm]; else return g.rows[parseInt(rowParm)]; } else if (typeof (rowParm) == "number") { return g.rows[parseInt(rowParm)]; } else if (typeof (rowParm) == "object" && rowParm.nodeType == 1 && !rowParm['__id']) //dom对象 { return g._getRowByDomId(rowParm.id); } return rowParm; }, _setColumnVisible: function (column, hide) { var g = this, p = this.options; if (!hide) //显示 { column._hide = false; document.getElementById(column['__domid']).style.display = ""; //判断分组列是否隐藏,如果隐藏了则显示出来 if (column['__pid'] != -1) { var pcol = g._columns[column['__pid']]; if (pcol._hide) { document.getElementById(pcol['__domid']).style.display = ""; this._setColumnVisible(pcol, hide); } } } else //隐藏 { column._hide = true; document.getElementById(column['__domid']).style.display = "none"; //判断同分组的列是否都隐藏,如果是则隐藏分组列 if (column['__pid'] != -1) { var hideall = true; var pcol = this._columns[column['__pid']]; for (var i = 0; pcol && i < pcol.columns.length; i++) { if (!pcol.columns[i]._hide) { hideall = false; break; } } if (hideall) { pcol._hide = true; document.getElementById(pcol['__domid']).style.display = "none"; this._setColumnVisible(pcol, hide); } } } }, //显示隐藏列 toggleCol: function (columnparm, visible, toggleByPopup) { var g = this, p = this.options; var column; if (typeof (columnparm) == "number") { column = g.columns[columnparm]; } else if (typeof (columnparm) == "object" && columnparm['__id']) { column = columnparm; } else if (typeof (columnparm) == "string") { if (g._isColumnId(columnparm)) // column id { column = g._columns[columnparm]; } else // column name { $(g.columns).each(function () { if (this.name == columnparm) g.toggleCol(this, visible, toggleByPopup); }); return; } } if (!column) return; var columnindex = column['__leafindex']; var headercell = document.getElementById(column['__domid']); if (!headercell) return; headercell = $(headercell); var cells = []; for (var i in g.rows) { var obj = g.getCellObj(g.rows[i], column); if (obj) cells.push(obj); } for (var i = 0; i < g.totalNumber; i++) { var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']); if (tobj) cells.push(tobj); } var colwidth = column._width; //显示列 if (visible && column._hide) { if (column.frozen) g.f.gridtablewidth += (parseInt(colwidth) + 1); else g.gridtablewidth += (parseInt(colwidth) + 1); g._setColumnVisible(column, false); $(cells).show(); } //隐藏列 else if (!visible && !column._hide) { if (column.frozen) g.f.gridtablewidth -= (parseInt(colwidth) + 1); else g.gridtablewidth -= (parseInt(colwidth) + 1); g._setColumnVisible(column, true); $(cells).hide(); } if (column.frozen) { $("div:first", g.f.gridheader).width(g.f.gridtablewidth); $("div:first", g.f.gridbody).width(g.f.gridtablewidth); } else { $("div:first", g.gridheader).width(g.gridtablewidth + 40); $("div:first", g.gridbody).width(g.gridtablewidth); } g._updateFrozenWidth(); if (!toggleByPopup) { $(':checkbox[columnindex=' + columnindex + "]", g.popup).each(function () { this.checked = visible; if ($.fn.ligerCheckBox) { var checkboxmanager = $(this).ligerGetCheckBoxManager(); if (checkboxmanager) checkboxmanager.updateStyle(); } }); } }, //设置列宽 setColumnWidth: function (columnparm, newwidth) { var g = this, p = this.options; if (!newwidth) return; newwidth = parseInt(newwidth, 10); var column; if (typeof (columnparm) == "number") { column = g.columns[columnparm]; } else if (typeof (columnparm) == "object" && columnparm['__id']) { column = columnparm; } else if (typeof (columnparm) == "string") { if (g._isColumnId(columnparm)) // column id { column = g._columns[columnparm]; } else // column name { $(g.columns).each(function () { if (this.name == columnparm) g.setColumnWidth(this, newwidth); }); return; } } if (!column) return; var mincolumnwidth = p.minColumnWidth; if (column.minWidth) mincolumnwidth = column.minWidth; newwidth = newwidth < mincolumnwidth ? mincolumnwidth : newwidth; var diff = newwidth - column._width; if (g.trigger('beforeChangeColumnWidth', [column, newwidth]) == false) return; column._width = newwidth; if (column.frozen) { g.f.gridtablewidth += diff; $("div:first", g.f.gridheader).width(g.f.gridtablewidth); $("div:first", g.f.gridbody).width(g.f.gridtablewidth); } else { g.gridtablewidth += diff; $("div:first", g.gridheader).width(g.gridtablewidth + 40); $("div:first", g.gridbody).width(g.gridtablewidth); } $(document.getElementById(column['__domid'])).css('width', newwidth); var cells = []; for (var rowid in g.records) { var obj = g.getCellObj(g.records[rowid], column); if (obj) cells.push(obj); if (!g.enabledDetailEdit() && g.editors[rowid] && g.editors[rowid][column['__id']]) { var o = g.editors[rowid][column['__id']]; if (o.editor.resize) o.editor.resize(o.input, newwidth, o.container.height(), o.editParm); } } for (var i = 0; i < g.totalNumber; i++) { var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']); if (tobj) cells.push(tobj); } $(cells).css('width', newwidth).find("> div.l-grid-row-cell-inner:first").css('width', newwidth - 8); g._updateFrozenWidth(); g.trigger('afterChangeColumnWidth', [column, newwidth]); }, //改变列表头内容 changeHeaderText: function (columnparm, headerText) { var g = this, p = this.options; var column; if (typeof (columnparm) == "number") { column = g.columns[columnparm]; } else if (typeof (columnparm) == "object" && columnparm['__id']) { column = columnparm; } else if (typeof (columnparm) == "string") { if (g._isColumnId(columnparm)) // column id { column = g._columns[columnparm]; } else // column name { $(g.columns).each(function () { if (this.name == columnparm) g.changeHeaderText(this, headerText); }); return; } } if (!column) return; var columnindex = column['__leafindex']; var headercell = document.getElementById(column['__domid']); $(".l-grid-hd-cell-text", headercell).html(headerText); if (p.allowHideColumn) { $(':checkbox[columnindex=' + columnindex + "]", g.popup).parent().next().html(headerText); } }, //改变列的位置 changeCol: function (from, to, isAfter) { var g = this, p = this.options; if (!from || !to) return; var fromCol = g.getColumn(from); var toCol = g.getColumn(to); fromCol.frozen = toCol.frozen; var fromColIndex, toColIndex; var fromColumns = fromCol['__pid'] == -1 ? p.columns : g._columns[fromCol['__pid']].columns; var toColumns = toCol['__pid'] == -1 ? p.columns : g._columns[toCol['__pid']].columns; fromColIndex = $.inArray(fromCol, fromColumns); toColIndex = $.inArray(toCol, toColumns); var sameParent = fromColumns == toColumns; var sameLevel = fromCol['__level'] == toCol['__level']; toColumns.splice(toColIndex + (isAfter ? 1 : 0), 0, fromCol); if (!sameParent) { fromColumns.splice(fromColIndex, 1); } else { if (isAfter) fromColumns.splice(fromColIndex, 1); else fromColumns.splice(fromColIndex + 1, 1); } g._setColumns(p.columns); g.reRender(); }, collapseDetail: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); if (!rowdata) return; for (var i = 0, l = g.columns.length; i < l; i++) { if (g.columns[i].isdetail) { var row = g.getRowObj(rowdata); var cell = g.getCellObj(rowdata, g.columns[i]); $(row).next("tr.l-grid-detailpanel").hide(); $(".l-grid-row-cell-detailbtn:first", cell).removeClass("l-open"); g.trigger('SysGridHeightChanged'); return; } } }, extendDetail: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); if (!rowdata) return; for (var i = 0, l = g.columns; i < l; i++) { if (g.columns[i].isdetail) { var row = g.getRowObj(rowdata); var cell = g.getCellObj(rowdata, g.columns[i]); $(row).next("tr.l-grid-detailpanel").show(); $(".l-grid-row-cell-detailbtn:first", cell).addClass("l-open"); g.trigger('SysGridHeightChanged'); return; } } }, getParent: function (rowParm) { var g = this, p = this.options; if (!p.tree) return null; var rowdata = g.getRow(rowParm); if (!rowdata) return null; if (rowdata['__pid'] in g.records) return g.records[rowdata['__pid']]; else return null; }, getChildren: function (rowParm, deep) { var g = this, p = this.options; if (!p.tree) return null; var rowData = g.getRow(rowParm); if (!rowData) return null; var arr = []; function loadChildren(data) { if (data[p.tree.childrenName]) { for (var i = 0, l = data[p.tree.childrenName].length; i < l; i++) { var o = data[p.tree.childrenName][i]; if (o['__status'] == 'delete') continue; arr.push(o); if (deep) loadChildren(o); } } } loadChildren(rowData); return arr; }, isLeaf: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); if (!rowdata) return; return rowdata['__hasChildren'] ? false : true; }, hasChildren: function (rowParm) { var g = this, p = this.options; var rowdata = this.getRow(rowParm); if (!rowdata) return; return (rowdata[p.tree.childrenName] && rowdata[p.tree.childrenName].length) ? true : false; }, existRecord: function (record) { for (var rowid in this.records) { if (this.records[rowid] == record) return true; } return false; }, _removeSelected: function (rowdata) { var g = this, p = this.options; if (p.tree) { var children = g.getChildren(rowdata, true); if (children) { for (var i = 0, l = children.length; i < l; i++) { var index2 = $.inArray(children[i], g.selected); if (index2 != -1) g.selected.splice(index2, 1); } } } var index = $.inArray(rowdata, g.selected); if (index != -1) g.selected.splice(index, 1); }, _getParentChildren: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); var listdata; if (p.tree && g.existRecord(rowdata) && rowdata['__pid'] in g.records) { listdata = g.records[rowdata['__pid']][p.tree.childrenName]; } else { listdata = g.currentData[p.root]; } return listdata; }, _removeData: function (rowdata) { var g = this, p = this.options; var listdata = g._getParentChildren(rowdata); var index = $.inArray(rowdata, listdata); if (index != -1) { listdata.splice(index, 1); } g._removeSelected(rowdata); }, _addData: function (rowdata, parentdata, neardata, isBefore) { var g = this, p = this.options; var listdata = g.currentData[p.root]; if (neardata) { if (p.tree) { if (parentdata) listdata = parentdata[p.tree.childrenName]; else if (neardata['__pid'] in g.records) listdata = g.records[neardata['__pid']][p.tree.childrenName]; } var index = $.inArray(neardata, listdata); listdata.splice(index == -1 ? -1 : index + (isBefore ? 0 : 1), 0, rowdata); } else { if (p.tree && parentdata) { listdata = parentdata[p.tree.childrenName]; } listdata.push(rowdata); } }, //移动数据(树) //@parm [parentdata] 附加到哪一个节点下级 //@parm [neardata] 附加到哪一个节点的上方/下方 //@parm [isBefore] 是否附加到上方 _appendData: function (rowdata, parentdata, neardata, isBefore) { var g = this, p = this.options; rowdata[p.statusName] = "update"; g._removeData(rowdata); g._addData(rowdata, parentdata, neardata, isBefore); }, appendRange: function (rows, parentdata, neardata, isBefore) { var g = this, p = this.options; var toRender = false; $.each(rows, function (i, item) { if (item['__id'] && g.existRecord(item)) { if (g.isLeaf(parentdata)) g.upgrade(parentdata); g._appendData(item, parentdata, neardata, isBefore); toRender = true; } else { g.appendRow(item, parentdata, neardata, isBefore); } }); if (toRender) g.reRender(); }, appendRow: function (rowdata, parentdata, neardata, isBefore) { var g = this, p = this.options; if ($.isArray(rowdata)) { g.appendRange(rowdata, parentdata, neardata, isBefore); return; } if (rowdata['__id'] && g.existRecord(rowdata)) { g._appendData(rowdata, parentdata, neardata, isBefore); g.reRender(); return; } if (parentdata && g.isLeaf(parentdata)) g.upgrade(parentdata); g.addRow(rowdata, neardata, isBefore ? true : false, parentdata); }, upgrade: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); if (!rowdata || !p.tree) return; rowdata[p.tree.childrenName] = rowdata[p.tree.childrenName] || []; rowdata['__hasChildren'] = true; var rowobjs = [g.getRowObj(rowdata)]; if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true)); $("> td > div > .l-grid-tree-space:last", rowobjs).addClass("l-grid-tree-link l-grid-tree-link-open"); }, demotion: function (rowParm) { var g = this, p = this.options; var rowdata = g.getRow(rowParm); if (!rowdata || !p.tree) return; var rowobjs = [g.getRowObj(rowdata)]; if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true)); $("> td > div > .l-grid-tree-space:last", rowobjs).removeClass("l-grid-tree-link l-grid-tree-link-open l-grid-tree-link-close"); if (g.hasChildren(rowdata)) { var children = g.getChildren(rowdata); for (var i = 0, l = children.length; i < l; i++) { g.deleteRow(children[i]); } } rowdata['__hasChildren'] = false; }, collapse: function (rowParm) { var g = this, p = this.options; var targetRowObj = g.getRowObj(rowParm); var linkbtn = $(".l-grid-tree-link", targetRowObj); if (linkbtn.hasClass("l-grid-tree-link-close")) return; g.toggle(rowParm); }, expand: function (rowParm) { var g = this, p = this.options; var targetRowObj = g.getRowObj(rowParm); var linkbtn = $(".l-grid-tree-link", targetRowObj); if (linkbtn.hasClass("l-grid-tree-link-open")) return; g.toggle(rowParm); }, toggle: function (rowParm) { if (!rowParm) return; var g = this, p = this.options; var rowdata = g.getRow(rowParm); var targetRowObj = [g.getRowObj(rowdata)]; if (g.enabledFrozen()) targetRowObj.push(g.getRowObj(rowdata, true)); var level = rowdata['__level'], indexInCollapsedRows; var linkbtn = $(".l-grid-tree-link:first", targetRowObj); var opening = true; g.collapsedRows = g.collapsedRows || []; if (linkbtn.hasClass("l-grid-tree-link-close")) //收缩 { linkbtn.removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open"); indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows); if (indexInCollapsedRows != -1) g.collapsedRows.splice(indexInCollapsedRows, 1); } else //折叠 { opening = false; linkbtn.addClass("l-grid-tree-link-close").removeClass("l-grid-tree-link-open"); indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows); if (indexInCollapsedRows == -1) g.collapsedRows.push(rowdata); } var children = g.getChildren(rowdata, true); for (var i = 0, l = children.length; i < l; i++) { var o = children[i]; var currentRow = $([g.getRowObj(o['__id'])]); if (g.enabledFrozen()) currentRow = currentRow.add(g.getRowObj(o['__id'], true)); if (opening) { $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open"); currentRow.show(); } else { $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-open").addClass("l-grid-tree-link-close"); currentRow.hide(); } } }, _bulid: function () { var g = this; g._clearGrid(); //创建头部 g._initBuildHeader(); //宽度高度初始化 g._initHeight(); //创建底部工具条 g._initFootbar(); //创建分页 g._buildPager(); //创建事件 g._setEvent(); }, _setColumns: function (columns) { var g = this; //初始化列 g._initColumns(); //创建表头 g._initBuildGridHeader(); //创建 显示/隐藏 列 列表 g._initBuildPopup(); }, _initBuildHeader: function () { var g = this, p = this.options; if (p.title) { $(".l-panel-header-text", g.header).html(p.title); if (p.headerImg) g.header.append("").addClass("l-panel-header-hasicon"); } else { g.header.hide(); } if (p.toolbar) { if ($.fn.ligerToolBar) g.toolbarManager = g.topbar.ligerToolBar(p.toolbar); } else { g.topbar.remove(); } }, _createColumnId: function (column) { if (column.id != null) return column.id.toString(); return "c" + (100 + this._columnCount); }, _isColumnId: function (str) { return (str in this._columns); }, _initColumns: function () { var g = this, p = this.options; g._columns = {}; //全部列的信息 g._columnCount = 0; g._columnLeafCount = 0; g._columnMaxLevel = 1; if (!p.columns) return; function removeProp(column, props) { for (var i in props) { if (props[i] in column) delete column[props[i]]; } } //设置id、pid、level、leaf,返回叶节点数,如果是叶节点,返回1 function setColumn(column, level, pid, previd) { removeProp(column, ['__id', '__pid', '__previd', '__nextid', '__domid', '__leaf', '__leafindex', '__level', '__colSpan', '__rowSpan']); if (level > g._columnMaxLevel) g._columnMaxLevel = level; g._columnCount++; column['__id'] = g._createColumnId(column); column['__domid'] = g.id + "|hcell|" + column['__id']; g._columns[column['__id']] = column; if (!column.columns || !column.columns.length) column['__leafindex'] = g._columnLeafCount++; column['__level'] = level; column['__pid'] = pid; column['__previd'] = previd; if (!column.columns || !column.columns.length) { column['__leaf'] = true; return 1; } var leafcount = 0; var newid = -1; for (var i = 0, l = column.columns.length; i < l; i++) { var col = column.columns[i]; leafcount += setColumn(col, level + 1, column['__id'], newid); newid = col['__id']; } column['__leafcount'] = leafcount; return leafcount; } var lastid = -1; //行序号 if (p.rownumbers) { var frozenRownumbers = g.enabledGroup() ? false : p.frozen && p.frozenRownumbers; var col = { isrownumber: true, issystem: true, width: p.rownumbersColWidth, frozen: frozenRownumbers }; setColumn(col, 1, -1, lastid); lastid = col['__id']; } //明细列 if (g.enabledDetail()) { var frozenDetail = g.enabledGroup() ? false : p.frozen && p.frozenDetail; var col = { isdetail: true, issystem: true, width: p.detailColWidth, frozen: frozenDetail }; setColumn(col, 1, -1, lastid); lastid = col['__id']; } //复选框列 if (g.enabledCheckbox()) { var frozenCheckbox = g.enabledGroup() ? false : p.frozen && p.frozenCheckbox; var col = { ischeckbox: true, issystem: true, width: p.detailColWidth, frozen: frozenCheckbox }; setColumn(col, 1, -1, lastid); lastid = col['__id']; } for (var i = 0, l = p.columns.length; i < l; i++) { var col = p.columns[i]; setColumn(col, 1, -1, lastid); lastid = col['__id']; } //设置colSpan和rowSpan for (var id in g._columns) { var col = g._columns[id]; if (col['__leafcount'] > 1) { col['__colSpan'] = col['__leafcount']; } if (col['__leaf'] && col['__level'] != g._columnMaxLevel) { col['__rowSpan'] = g._columnMaxLevel - col['__level'] + 1; } } //叶级别列的信息 g.columns = g.getColumns(); $(g.columns).each(function (i, column) { column.columnname = column.name; column.columnindex = i; column.type = column.type || "string"; column.islast = i == g.columns.length - 1; column.isSort = column.isSort == false ? false : true; column.frozen = column.frozen ? true : false; column._width = g._getColumnWidth(column); column._hide = column.hide ? true : false; }); }, _getColumnWidth: function (column) { var g = this, p = this.options; if (column._width) return column._width; var colwidth; if (column.width) { colwidth = column.width; } else if (p.columnWidth) { colwidth = p.columnWidth; } if (!colwidth) { var lwidth = 4; if (g.enabledCheckbox()) lwidth += p.checkboxColWidth; if (g.enabledDetail()) lwidth += p.detailColWidth; colwidth = parseInt((g.grid.width() - lwidth) / g.columns.length); } if (typeof (colwidth) == "string" && colwidth.indexOf('%') > 0) { column._width = colwidth = parseInt(parseInt(colwidth) * 0.01 * (g.grid.width() - g.columns.length)); } if (column.minWidth && colwidth < column.minWidth) colwidth = column.minWidth; if (column.maxWidth && colwidth > column.maxWidth) colwidth = column.maxWidth; column._width = colwidth; return colwidth; }, _createHeaderCell: function (column) { var g = this, p = this.options; var jcell = $("
"); jcell.attr("id", column['__domid']); if (!column['__leaf']) jcell.addClass("l-grid-hd-cell-mul"); if (column.columnindex == g.columns.length - 1) { jcell.addClass("l-grid-hd-cell-last"); } if (column.isrownumber) { jcell.addClass("l-grid-hd-cell-rownumbers"); jcell.html("
"); } if (column.ischeckbox) { jcell.addClass("l-grid-hd-cell-checkbox"); jcell.html("
"); } if (column.isdetail) { jcell.addClass("l-grid-hd-cell-detail"); jcell.html("
"); } if (column.heightAlign) { $(".l-grid-hd-cell-inner:first", jcell).css("textAlign", column.heightAlign); } if (column['__colSpan']) jcell.attr("colSpan", column['__colSpan']); if (column['__rowSpan']) { jcell.attr("rowSpan", column['__rowSpan']); jcell.height(p.headerRowHeight * column['__rowSpan']); } else { jcell.height(p.headerRowHeight); } if (column['__leaf']) { jcell.width(column['_width']); jcell.attr("columnindex", column['__leafindex']); } if (column._hide) jcell.hide(); if (column.name) jcell.attr({ columnname: column.name }); var headerText = ""; if (column.display && column.display != "") headerText = column.display; else if (column.headerRender) headerText = column.headerRender(column); else headerText = " "; $(".l-grid-hd-cell-text:first", jcell).html(headerText); if (!column.issystem && column['__leaf'] && column.resizable !== false && $.fn.ligerResizable) { g.colResizable[column['__id']] = jcell.ligerResizable({ handles: 'e', onStartResize: function (e, ev) { this.proxy.hide(); g.draggingline.css({ height: g.body.height(), top: 0, left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) }).show(); }, onResize: function (e, ev) { g.colresizing = true; g.draggingline.css({ left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) }); $('body').add(jcell).css('cursor', 'e-resize'); }, onStopResize: function (e) { g.colresizing = false; $('body').add(jcell).css('cursor', 'default'); g.draggingline.hide(); g.setColumnWidth(column, column._width + e.diffX); return false; } }); } return jcell; }, _initBuildGridHeader: function () { var g = this, p = this.options; g.gridtablewidth = 0; g.f.gridtablewidth = 0; if (g.colResizable) { for (var i in g.colResizable) { g.colResizable[i].destroy(); } g.colResizable = null; } g.colResizable = {}; $("tbody:first", g.gridheader).html(""); $("tbody:first", g.f.gridheader).html(""); for (var level = 1; level <= g._columnMaxLevel; level++) { var columns = g.getColumns(level); //获取level层次的列集合 var islast = level == g._columnMaxLevel; //是否最末级 var tr = $(""); var trf = $(""); if (!islast) tr.add(trf).addClass("l-grid-hd-mul"); $("tbody:first", g.gridheader).append(tr); $("tbody:first", g.f.gridheader).append(trf); $(columns).each(function (i, column) { (column.frozen ? trf : tr).append(g._createHeaderCell(column)); if (column['__leaf']) { var colwidth = column['_width']; if (!column.frozen) g.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1; else g.f.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1; } }); } if (g._columnMaxLevel > 0) { var h = p.headerRowHeight * g._columnMaxLevel; g.gridheader.add(g.f.gridheader).height(h); if (p.rownumbers && p.frozenRownumbers) g.f.gridheader.find("td:first").height(h); } g._updateFrozenWidth(); $("div:first", g.gridheader).width(g.gridtablewidth + 40); }, _initBuildPopup: function () { var g = this, p = this.options; $(':checkbox', g.popup).unbind(); $('tbody tr', g.popup).remove(); $(g.columns).each(function (i, column) { if (column.issystem) return; if (column.isAllowHide == false) return; var chk = 'checked="checked"'; if (column._hide) chk = ''; var header = column.display; $('tbody', g.popup).append('' + header + ''); }); if ($.fn.ligerCheckBox) { $('input:checkbox', g.popup).ligerCheckBox( { onBeforeClick: function (obj) { if (!obj.checked) return true; if ($('input:checked', g.popup).length <= p.minColToggle) return false; return true; } }); } //表头 - 显示/隐藏'列控制'按钮事件 if (p.allowHideColumn) { $('tr', g.popup).hover(function () { $(this).addClass('l-popup-row-over'); }, function () { $(this).removeClass('l-popup-row-over'); }); var onPopupCheckboxChange = function () { if ($('input:checked', g.popup).length + 1 <= p.minColToggle) { return false; } g.toggleCol(parseInt($(this).attr("columnindex")), this.checked, true); }; if ($.fn.ligerCheckBox) $(':checkbox', g.popup).bind('change', onPopupCheckboxChange); else $(':checkbox', g.popup).bind('click', onPopupCheckboxChange); } }, _initHeight: function () { var g = this, p = this.options; if (p.height == 'auto') { g.gridbody.height('auto'); g.f.gridbody.height('auto'); } if (p.width) { g.grid.width(p.width); } g._onResize.call(g); }, _initFootbar: function () { var g = this, p = this.options; if (p.usePager) { //创建底部工具条 - 选择每页显示记录数 var optStr = ""; var selectedIndex = -1; $(p.pageSizeOptions).each(function (i, item) { var selectedStr = ""; if (p.pageSize == item) selectedIndex = i; optStr += ""; }); $('.l-bar-selectpagesize', g.toolbar).append(""); if (selectedIndex != -1) $('.l-bar-selectpagesize select', g.toolbar)[0].selectedIndex = selectedIndex; if (p.switchPageSizeApplyComboBox && $.fn.ligerComboBox) { $(".l-bar-selectpagesize select", g.toolbar).ligerComboBox( { onBeforeSelect: function () { if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged)) return false; return true; }, width: 45 }); } } else { g.toolbar.hide(); } }, _searchData: function (data, clause) { var g = this, p = this.options; var newData = new Array(); for (var i = 0; i < data.length; i++) { if (clause(data[i], i)) { newData[newData.length] = data[i]; } } return newData; }, _clearGrid: function () { var g = this, p = this.options; for (var i in g.rows) { var rowobj = $(g.getRowObj(g.rows[i])); if (g.enabledFrozen()) rowobj = rowobj.add(g.getRowObj(g.rows[i], true)); rowobj.unbind(); } //清空数据 g.gridbody.html(""); g.f.gridbody.html(""); g.recordNumber = 0; g.records = {}; g.rows = []; //清空选择的行 g.selected = []; g.totalNumber = 0; //编辑器计算器 g.editorcounter = 0; }, _fillGridBody: function (data, frozen) { var g = this, p = this.options; //加载数据 var gridhtmlarr = ['
']; if (g.enabledGroup()) //启用分组模式 { var groups = []; //分组列名数组 var groupsdata = []; //切成几块后的数据 g.groups = groupsdata; for (var rowparm in data) { var item = data[rowparm]; var groupColumnValue = item[p.groupColumnName]; var valueIndex = $.inArray(groupColumnValue, groups); if (valueIndex == -1) { groups.push(groupColumnValue); valueIndex = groups.length - 1; groupsdata.push([]); } groupsdata[valueIndex].push(item); } $(groupsdata).each(function (i, item) { if (groupsdata.length == 1) gridhtmlarr.push(''); gridhtmlarr.push(''); gridhtmlarr.push(''); gridhtmlarr.push(g._getHtmlFromData(item, frozen)); //汇总 if (g.isTotalSummary()) gridhtmlarr.push(g._getTotalSummaryHtml(item, "l-grid-totalsummary-group", frozen)); }); } else { gridhtmlarr.push(g._getHtmlFromData(data, frozen)); } gridhtmlarr.push('
'); gridhtmlarr.push('    '); if (p.groupRender) gridhtmlarr.push(p.groupRender(groups[i], item, p.groupColumnDisplay)); else gridhtmlarr.push(p.groupColumnDisplay + ':' + groups[i]); gridhtmlarr.push('
'); (frozen ? g.f.gridbody : g.gridbody).html(gridhtmlarr.join('')); //分组时不需要 if (!g.enabledGroup()) { //创建汇总行 g._bulidTotalSummary(frozen); } $("> div:first", g.gridbody).width(g.gridtablewidth); g._onResize(); }, _showData: function () { var g = this, p = this.options; var data = g.currentData[p.root]; if (p.usePager) { //更新总记录数 if (p.dataAction == "server" && g.data && g.data[p.record]) p.total = g.data[p.record]; else if (g.filteredData && g.filteredData[p.root]) p.total = g.filteredData[p.root].length; else if (g.data && g.data[p.root]) p.total = g.data[p.root].length; else if (data) p.total = data.length; p.page = p.newPage; if (!p.total) p.total = 0; if (!p.page) p.page = 1; p.pageCount = Math.ceil(p.total / p.pageSize); if (!p.pageCount) p.pageCount = 1; //更新分页 g._buildPager(); } //加载中 $('.l-bar-btnloading:first', g.toolbar).removeClass('l-bar-btnloading'); if (g.trigger('beforeShowData', [g.currentData]) == false) return; g._clearGrid(); g.isDataChanged = false; if (!data) return; $(".l-bar-btnload:first span", g.toolbar).removeClass("l-disabled"); g._updateGridData(); if (g.enabledFrozen()) g._fillGridBody(g.rows, true); g._fillGridBody(g.rows, false); g.trigger('SysGridHeightChanged'); if (p.totalRender) { $(".l-panel-bar-total", g.element).remove(); $(".l-panel-bar", g.element).before('
' + p.totalRender(g.data, g.filteredData) + '
'); } if (p.mouseoverRowCssClass) { for (var i in g.rows) { var rowobj = $(g.getRowObj(g.rows[i])); if (g.enabledFrozen()) rowobj = rowobj.add(g.getRowObj(g.rows[i], true)); rowobj.bind('mouseover.gridrow', function () { g._onRowOver(this, true); }).bind('mouseout.gridrow', function () { g._onRowOver(this, false); }); } } g.gridbody.trigger('scroll.grid'); g.trigger('afterShowData', [g.currentData]); }, _getRowDomId: function (rowdata, frozen) { return this.id + "|" + (frozen ? "1" : "2") + "|" + rowdata['__id']; }, _getCellDomId: function (rowdata, column) { return this._getRowDomId(rowdata, column.frozen) + "|" + column['__id']; }, _getHtmlFromData: function (data, frozen) { if (!data) return ""; var g = this, p = this.options; var gridhtmlarr = []; for (var rowparm in data) { var item = data[rowparm]; var rowid = item['__id']; if (!item) continue; gridhtmlarr.push('