/** * jQuery webUI 1.1.0 * * */ if (typeof (WebUIManagers) == "undefined") WebUIManagers = {}; (function($) { $.fn.webGetGridManager = function() { return WebUIManagers[this[0].id + "_Grid"]; }; $.webDefaults = $.webDefaults || {}; $.webDefaults.Grid = { title: null, width: 'auto', //宽度值 columnWidth: 120, //默认列宽度 resizable: true, //table是否可伸缩 url: false, //ajax url usePager: true, //是否分页 page: 1, //默认当前页 total: 1, //总页面数 pageSize: 10, //每页默认的结果数 pageSizeOptions: [10, 20, 30, 40, 50], //可选择设定的每页结果数 parms: [], //提交到服务器的参数 columns: [], //数据源 minColToggle: 1, //最小显示的列 dataType: 'server', //数据源:本地(local)或(server),本地是将读取p.data dataAction: 'server', //提交数据的方式:本地(local)或(server),选择本地方式时将在客服端分页、排序 showTableToggleBtn: false, //是否显示'显示隐藏Grid'按钮 switchPageSizeApplyComboBox: true, //切换每页记录数是否应用webComboBox 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', //提交方式 fixedCellHeight: true, //是否固定单元格的高度 heightDiff: 0, //高度补差,当设置height:100%时,可能会有高度的误差,可以通过这个属性调整 cssClass: null, //类名 root: 'items', //数据源字段名 record: 'totalCount', //数据源记录数字段名 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, //是否允许反选行 dblClickToEdit: false, //是否双击的时候才编辑 alternatingRow: true, mouseoverRowCssClass: 'n-grid-row-over', enabledSort: true, //是否允许排序 rowAttrRender: null, //行自定义属性渲染器(包括style,也可以定义) groupColumnName: null, //分组列名 groupColumnDisplay: '分组', //分组列显示名字 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, //右击事件 onRClickToSelect: true, //右击行时是否选中 /* treeGrid模式 例子:tree:{ columnName :'name', //如果不指定。将不会出现 可折叠的+/-。例子给出的是默认参数 childrenName : 'children', //children的字段名。例子给出的是默认参数 isParent : function(rowData){ //判断是否为父节点的(即显示-)判断函数。例子给出的是默认参数 var exist = 'children' in rowData; return exist; }, isExtend : function(rowData){ //判断是否张开。例子给出的是默认参数 if('isextend' in rowData && rowData['isextend'] == false) return false; return true; } } json格式: Rows:[{tite:'11.11',chidren:[...] }] */ tree: null, //treeGrid模式 isChecked: null, //复选框 初始化函数 //获取时间 renderDate: function(value) { var da; if (!value) return null; if (typeof value == 'object') { return value; } if (value.indexOf('Date') > -1) { da = eval('new ' + value.replace('/', '', 'g').replace('/', '', 'g')); } else { da = eval('new Date("' + value + '");'); if (window.navigator.userAgent.indexOf("MSIE")>=1){ if(value.indexOf("-") != -1) da = new Date(Date.parse(value.replace(/-/g, "/"))); } } return da; } }; $.webDefaults.GridString = { errorMessage: '发生错误', pageStatMessage: '记录:{from}-{to}/总数 :{total}条/每页记录数:{pagesize}', pageTextMessage: 'Page', loadingMessage: '加载中...', findTextMessage: '查找', noRecordMessage: '没有符合条件的记录存在', isContinueByDataChanged: '数据已经改变,如果继续将丢失数据,是否保存?' }; /// $.webAddGrid = function(grid, p) { if (grid.usedGrid) return; /*---------------------------------- -------- web grid 初始化------------ ----------------------------------*/ p.cssClass && $(grid).addClass(p.cssClass); $(grid).addClass("n-panel"); // var table_css = ""; // if($(grid).children().attr("tagName") == 'TABLE'){ // table_css = $(grid).children().attr("class"); // } 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("
"); if(p.server){ gridhtmlarr.push("
"); gridhtmlarr.push("
"); if(p.usePager){ gridhtmlarr.push("
"); if(p.page == "page"){ 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("
"); }else if(p.page == "page2"){ gridhtmlarr.push("
"); gridhtmlarr.push(" "); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); } } gridhtmlarr.push("
"); if(p.btnColumn){ for(var i = 0;i < p.btnColumn.length; i++){ if(p.btnColumn[i] == "c"){ gridhtmlarr.push("
"+p.table+"添加
"); }else if(p.btnColumn[i] == "s"){ gridhtmlarr.push("
"+p.table+"更新
"); }else if(p.btnColumn[i] == "u"){ gridhtmlarr.push("
"+p.table+"修改
"); }else if(p.btnColumn[i] == "d"){ gridhtmlarr.push("
"+p.table+"删除
"); } } } for(var i = 0 ;i < p.gridBtns.length; i++){ var id = ""; if(p.gridBtns[i]["id"]) id = p.gridBtns[i]["id"]; var value = ""; if(p.gridBtns[i]["value"]) value = p.gridBtns[i]["value"]; var clazz = ""; if(p.gridBtns[i]["class"]) clazz = p.gridBtns[i]["class"]; var type = p.gridBtns[i]["type"]; var style = ""; if(p.gridBtns[i]["style"]) style = p.gridBtns[i]["style"]; if(type == "button") gridhtmlarr.push("
"+ value+"
"); else gridhtmlarr.push(" "); } gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); }else{ 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("
"); if(p.btnColumn){ for(var i = 0;i < p.btnColumn.length; i++){ if(p.btnColumn[i] == "c"){ gridhtmlarr.push("
"+p.table+"添加
"); }else if(p.btnColumn[i] == "s"){ gridhtmlarr.push("
"+p.table+"更新
"); }else if(p.btnColumn[i] == "u"){ gridhtmlarr.push("
"+p.table+"修改
"); }else if(p.btnColumn[i] == "d"){ gridhtmlarr.push("
"+p.table+"删除
"); } } } for(var i = 0 ;i < p.gridBtns.length; i++){ var id = ""; if(p.gridBtns[i]["id"]) id = p.gridBtns[i]["id"]; var value = ""; if(p.gridBtns[i]["value"]) value = p.gridBtns[i]["value"]; var clazz = ""; if(p.gridBtns[i]["class"]) clazz = p.gridBtns[i]["class"]; var type = p.gridBtns[i]["type"]; var style = ""; if(p.gridBtns[i]["style"]) style = p.gridBtns[i]["style"]; if(type == "button") gridhtmlarr.push("
"+ value+"
"); else gridhtmlarr.push(" "); } gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); gridhtmlarr.push("
"); } $(grid).html(gridhtmlarr.join('')); /*---------------------------------- ------ web grid maanger 初始化------ ----------------------------------*/ var g = { //刷新数据 loadData: function(loadDataParm) { if(p.server){ if(loadDataParm){ p.data = loadDataParm; if(p.usePager){ p.pageSize = loadDataParm.pageSize; g.sortedData = loadDataParm; g.currentData = loadDataParm; po.showData(p.data); }else{ po.showData({items:p.data}); g.sortedData = {items:p.data}; g.currentData = {items:p.data}; } } }else{ 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 && p.parms.length) { $(p.parms).each(function() { param.push({ name: this.name, value: this.value }); }); } 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 }); } }; $(".n-bar-btnload span", g.toolbar).addClass("n-disabled"); g.loading = true; if (p.dataType == "local") { g.data = $.extend({}, p.data); g.filteredData = $.extend({}, g.data); if (clause) g.filteredData[p.root] = po.searchData(g.filteredData[p.root], clause); if (p.usePager) g.currentData = po.getCurrentPageData(g.filteredData); else { g.currentData = $.extend({}, g.filteredData); } po.showData(g.currentData); } else if (p.dataAction == "local" && !loadServer) { if (g.data && g.data[p.root]) { g.filteredData = $.extend({}, g.data); if (clause) g.filteredData[p.root] = po.searchData(g.filteredData[p.root], clause); g.currentData = po.getCurrentPageData(g.filteredData); po.showData(g.currentData); } } else { if (p.onLoading) p.onLoading(g); else g.gridloading.show(); setTimeout(function() { g.loadServerData(param, clause); }, 10); } } }, loadServerData: function(param, clause) { $.ajax({ type: p.method, url: p.url, data: param, async: false, dataType: 'json', beforeSend: function() { }, success: function(data) { if (p.onSuccess) p.onSuccess(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; return; } g.data = $.extend({}, data); for (var rowindex in g.data[p.root]) { if (g.data[p.root][rowindex][p.statusName] == undefined) g.data[p.root][rowindex][p.statusName] = ''; } if (p.dataAction == "server") { g.currentData = g.data; } else { g.filteredData = $.extend({}, g.data); if (clause) g.filteredData[p.root] = po.searchData(g.filteredData[p.root], clause); g.currentData = po.getCurrentPageData(g.filteredData); } setTimeout(function() { po.showData(g.currentData); }, 10); }, complete: function() { if (p.onLoaded) { p.onLoaded(g); } else { setTimeout(function() { g.gridloading.hide(); }, 10); } }, 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.gridloading.hide(); $(".n-bar-btnload span", g.toolbar).removeClass("n-disabled"); try { if (p.onError) p.onError(XMLHttpRequest, textStatus, errorThrown); } catch (e) { } } }); }, setOptions: function(parms) { $.extend(p, parms); if (parms.data) { g.data = parms.data; p.dataType = "local"; } }, stringToDate: function(obj) { if (obj instanceof Date) return obj; var myDate = new Date(); try { myDate.setYear(parseInt(obj.substring(0, 4), 10)); myDate.setMonth(parseInt(obj.substring(5, 7) - 1, 10)); myDate.setDate(parseInt(obj.substring(8, 10), 10)); if (obj.length > 10) { myDate.setHours(parseInt(obj.substring(11, 13), 10)); myDate.setMinutes(parseInt(obj.substring(14, 16), 10)); } if (obj.length > 16) { myDate.setSeconds(parseInt(obj.substring(17, 19), 10)); } } catch (e) { } return myDate; }, getFormatDate: function(date, dateformat) { 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; }, endEdit: function() { var check = $(".grid-validate").validate().form(); if(!check) return; if (!g.grideditor.editingCell) return; var cell = g.grideditor.editingCell; var value = g.grideditor.editingValue; g.grideditor.html("").hide(); var row = $(cell).parent(); var rowindex = row.attr("rowindex"); var rowid = row.attr("rowid"); var columnindex = $(cell).attr("columnindex"); var columnname = $(cell).attr("columnname"); var column = g.columns[columnindex]; var rowdata = g.getRow(rowid); var editParm = { record: rowdata, value: value, column: column, columnname: columnname, columnindex: columnindex, rowindex: rowindex, rowObj: row[0], cellObj: cell }; if (p.onAfterEdit) p.onAfterEdit(editParm); g.grideditor.editingCell = null; g.grideditor.editingValue = null; }, deleteSelectedRow: function() { if (p.checkbox) { $("tbody:first > tr.n-checked", g.gridbody).each(function() { g.deleteRow(this); }); } else { var row = $("tbody:first > tr.n-selected", g.gridbody); if (row.length == 0) return; g.deleteRow(row[0]); } }, deleteRow: function(rowParm) { var rowObj = g.getRowObj(rowParm); if (!rowObj) return; g.popup.hide(); g.endEdit(); var rowid = $(rowObj).attr("rowid"); if (p.tree && g.hasChildren(rowObj)) { $("tbody:first > tr[parentrowid=" + rowid + "]", g.gridbody).each(function() { g.deleteRow(this); }); } $(rowObj).remove(); g.deleteData(rowid); g.isDataChanged = true; }, deleteData: function(rowid) { g.records[rowid][p.statusName] = 'delete'; }, updateCell: function(cell, value, rowParm) { var columnindex; var column; var cellObj; if (typeof (cell) == "number") { columnindex = cell; column = g.columns[columnindex]; cellObj = $("td[columnindex=" + columnindex + "]", rowObj)[0]; } else if (typeof (cell) == "string") { var rowObj = g.getRowObj(rowParm); cellObj = $("td[columnname=" + cell + "]", rowObj)[0]; columnindex = $(cellObj).attr("columnindex"); column = g.columns[columnindex]; } else { cellObj = cell; columnindex = $(cellObj).attr("columnindex"); column = g.columns[columnindex]; } var row = $(cellObj).parent(); var rowindex = row.attr("rowindex"); var rowid = row.attr("rowid"); var rowData = g.getRow(rowid); g.updateData(cellObj, value); var cellContent = po.getCellContent(rowData, rowindex, value, column, p.tree, row.attr("treelevel")); $(".n-grid-row-cell-inner:first", cellObj).html(cellContent); }, updateData: function(cell, value, rowObj) { if (typeof (cell) == "string") { var rowindex = $(rowObj).attr("rowindex"); var rowid = $(rowObj).attr("rowid"); var rowdata = g.getRow(rowid); rowdata[cell] = value; if (rowdata[p.statusName] != 'add') rowdata[p.statusName] = 'update'; g.isDataChanged = true; return; } var columnindex = $(cell).attr("columnindex"); var column = g.columns[columnindex]; if (!column) return; var columnname = column.name; if (!columnname) return; var row = $(cell).parents(".n-grid-row:eq(0)"); var rowindex = row.attr("rowindex"); var rowdata = g.currentData[p.root][rowindex]; if (column.type == 'int') rowdata[columnname] = parseInt(value); else if (column.type == 'float') rowdata[columnname] = parseFloat(value); else if (column.type == 'date') { var dv = p.renderDate(value); console.log("dv:"+dv); if (!dv || isNaN(dv)) dv = g.stringToDate(value); rowdata[columnname] = dv; } else rowdata[columnname] = value; if (rowdata[p.statusName] != 'add') rowdata[p.statusName] = 'update'; g.isDataChanged = true; }, addRow: function(rowdata, rowParm, isBefore, parentRow) { if (!rowdata) rowdata = {}; var treelevel, parentrowid, parentRowObj, parentRowData, parentRowIsOpened; if (parentRow) { parentRowObj = g.getRowObj(parentRow); treelevel = parseInt($(parentRowObj).attr("treelevel")) + 1; parentrowid = $(parentRowObj).attr("rowid"); parentRowData = g.getRow(parentrowid); parentRowIsOpened = $(".n-grid-tree-link:first", parentRowObj).hasClass("n-grid-tree-link-open"); } var olddatanumber = parentRowData ? parentRowData[p.tree.childrenName].length : g.currentData[p.root].length; var rowObj = g.getRowObj(rowParm); var rowindex = rowObj ? (parseInt($(rowObj).attr("rowindex")) + (isBefore ? 0 : 1)) : olddatanumber; var rowHTML = po.getHtmlFromData([rowdata], p.tree, treelevel ? treelevel : 1, parentrowid); var row = $(rowHTML); row.attr("rowindex", rowindex).removeClass("n-grid-row-last"); if (parentRow && !parentRowIsOpened) row.hide(); if (rowindex == olddatanumber) { if (parentRowData) parentRowData[p.tree.childrenName][rowindex] = rowdata; else g.currentData[p.root][rowindex] = rowdata; if (!p.usePager && !g.isTotalSummary()) { $("tbody:first > .n-grid-row:last", g.gridbody).removeClass("n-grid-row-last"); row.addClass("n-grid-row-last"); } } else { if (parentRowData) parentRowData[p.tree.childrenName].splice(rowindex, 0, rowdata); else g.currentData[p.root].splice(rowindex, 0, rowdata); var selectexpr = p.tree ? "tr[parentrowid=" + parentrowid + "][treelevel=" + treelevel + "]" : "tr"; $(rowObj).nextAll(selectexpr).add(rowObj).each(function() { var ri = $(this).attr("rowindex"); if (ri >= rowindex) $(this).attr("rowindex", parseInt(ri) + 1); }); } if ($("tbody", g.gridbody).length == 0) { g.gridbody.html('
'); } if (rowObj != undefined) { if (isBefore) $(rowObj).before(row); else $(rowObj).after(row); } else { $("tbody:first", g.gridbody).append(row); } rowdata[p.statusName] = 'add'; //添加事件 po.setRowEven(row[0]); //标识状态 g.isDataChanged = true; p.total = p.total ? (p.total + 1) : 1; p.pageCount = Math.ceil(p.total / p.pageSize); po.buildPager(); if (p.onAfterAddRow) p.onAfterAddRow(row, rowdata); return row; }, updateRow: function(rowDom, newRowData) { var rowdata = g.getRow(rowDom); //标识状态 g.isDataChanged = true; if (newRowData) { for (var columnname in newRowData) { if (columnname == p.statusName) continue; rowdata[columnname] = newRowData[columnname]; var cellobj = $("> .n-grid-row-cell[columnname=" + columnname + "]", rowDom); if (cellobj.length == 0) continue; var columnindex = cellobj.attr("columnindex"); var column = g.columns[columnindex]; g.updateCell(cellobj, newRowData[columnname]); } rowdata[p.statusName] = 'update'; } return rowdata; }, getData: function() { if (g.currentData == null) return null; return g.currentData[p.root]; }, getColumn: function(columnname) { for (i = 0; i < g.columns.length; i++) { if (g.columns[i].name == columnname) { return g.columns[i]; } } return null; }, getColumnType: function(columnname) { 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() { for (var i = 0; i < g.columns.length; i++) { if (g.columns[i].totalSummary) return true; } return false; }, getMulHeaderLevel: function() { if (!p.columns.length) return 1; var level = 0; var currentColumn = p.columns[0]; while (currentColumn) { level++; if (!currentColumn.columns || !currentColumn.columns.length) break; currentColumn = currentColumn.columns[0]; } return level; }, getColumns: function(columnLevel) { if (columnLevel <= 1) return p.columns; return g.getLevelColumns({ columns: p.columns }, 0, columnLevel); }, getLevelColumns: function(column, level, columnLevel) { if (level == columnLevel) return [column]; var columns = []; for (var i = 0; column.columns && i < column.columns.length; i++) { var currentColumns = g.getLevelColumns(column.columns[i], level + 1, columnLevel); $(currentColumns).each(function() { columns.push(this); }); } return columns; }, getMulHeaders: function(columnLevel) { var getColumnNumber = function(column) { if (!column.columns || !column.columns.length) return 1; var number = 0; for (var i = 0; i < column.columns.length; i++) { number += getColumnNumber(column.columns[i]); } return number; }; var currentLevelColumns = g.getColumns(columnLevel); var mulHeaders = []; for (var i = 0; i < currentLevelColumns.length; i++) { mulHeaders.push({ display: currentLevelColumns[i]['display'], number: getColumnNumber(currentLevelColumns[i]) }); } return mulHeaders; }, //改变排序 changeSort: function(columnName, sortOrder) { if (g.loading) return true; if (p.dataAction == "local") { var columnType = g.getColumnType(columnName); if (!g.sortedData) g.sortedData = $.extend({}, g.filteredData); if (p.sortName == columnName) { g.sortedData[p.root].reverse(); } else { g.sortedData[p.root].sort(function(data1, data2) { return po.compareData(data1, data2, columnName, columnType); }); } if (p.usePager) g.currentData = po.getCurrentPageData(g.sortedData); else g.currentData = g.sortedData; po.showData(g.currentData); } p.sortName = columnName; p.sortOrder = sortOrder; if (p.dataAction == "server") { g.loadData(p.where); } }, //改变分页 changePage: function(ctype) { if (g.loading) return true; if (g.isDataChanged && confirm(p.isContinueByDataChanged)){ $("#"+p.table).updateGrid(); } //计算新page 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) { $(".n-bar-btnfirst span", g.toolbar).addClass("n-disabled"); $(".n-bar-btnprev span", g.toolbar).addClass("n-disabled"); } else { $(".n-bar-btnfirst span", g.toolbar).removeClass("n-disabled"); $(".n-bar-btnprev span", g.toolbar).removeClass("n-disabled"); } if (p.newPage == p.pageCount) { $(".n-bar-btnlast span", g.toolbar).addClass("n-disabled"); $(".n-bar-btnnext span", g.toolbar).addClass("n-disabled"); } else { $(".n-bar-btnlast span", g.toolbar).removeClass("n-disabled"); $(".n-bar-btnnext span", g.toolbar).removeClass("n-disabled"); } if (p.onChangePage) p.onChangePage(p.newPage); if (p.dataAction == "server") { g.loadData(p.where); } else { g.currentData = po.getCurrentPageData(g.filteredData); po.showData(g.currentData); } }, getCheckedRows: function() { var rows = $("tbody:first > .n-checked", g.gridbody); var rowdata = []; $("tbody:first > .n-checked", g.gridbody).each(function(i, row) { var rowid = $(row).attr("rowid"); rowdata.push(g.getRow(rowid)); }); return rowdata; }, getSelectedRow: function() { var row = $("tbody:first > .n-selected", g.gridbody); var rowid = row.attr("rowid"); return g.getRow(rowid); }, getCheckedRowObjs: function() { return $("tbody:first > .n-checked", g.gridbody).get(); }, getSelectedRowObj: function() { var row = $("tbody:first > .n-selected", g.gridbody); if (row.length == 0) return null; return row[0]; }, getRowObj: function(rowParm) { if (typeof (rowParm) == "string" || typeof (rowParm) == "number") { return $("tbody:first > .n-grid-row[rowid=" + rowParm + "]", g.gridbody).get(0); } else if (typeof (rowParm) == "object") { if (!rowParm) return null; if (typeof (rowParm.nodeType) != "undefined" && rowParm.nodeType == 1) return rowParm; else { for (var p in g.records) { if (g.records[p] == rowParm) return $("tbody:first > .n-grid-row[rowid=" + p + "]", g.gridbody).get(0); } } } return null; }, getRow: function(rowParm) { if (typeof (rowParm) == "string" || typeof (rowParm) == "number") { return g.records[parseInt(rowParm)]; } else if (typeof (rowParm) == "object") { if (!rowParm) return null; if (typeof (rowParm.nodeType) != "undefined" && rowParm.nodeType == 1) return g.records[$(rowParm).attr("rowid")]; else return rowParm; } return null; }, toggleCol: function(columnparm, visible) { var headercell = null; var columnindex = -1; if (typeof (columnparm) == "number") { columnindex = columnparm; headercell = $(".n-grid-hd-cell[columnindex='" + columnparm + "']", g.gridheader); } else if (typeof (columnparm) == "string") { headercell = $(".n-grid-hd-cell[columnname='" + columnparm + "']", g.gridheader); if (!headercell) return; columnindex = headercell.attr("columnindex"); } if (!headercell) return; if (visible) { headercell.show(); $(".n-grid-row-cell[columnindex='" + columnindex + "']", g.gridbody).show(); } else { headercell.hide(); $(".n-grid-row-cell[columnindex='" + columnindex + "']", g.gridbody).hide(); } }, changeHeaderText: function(columnparm, headerText) { var headercell = null; var columnindex = -1; if (typeof (columnparm) == "number") { columnindex = columnparm; headercell = $(".n-grid-hd-cell[columnindex='" + columnparm + "']", g.gridheader); } else if (typeof (columnparm) == "string") { headercell = $(".n-grid-hd-cell[columnname='" + columnparm + "']", g.gridheader); if (!headercell) return; columnindex = headercell.attr("columnindex"); } if (!headercell) return; $(".n-grid-hd-cell-text", headercell).html(headerText); if (p.allowHideColumn) { $(':checkbox[columnindex=' + columnindex + "]", g.popup).parent().next().html(headerText); } }, getParent: function(rowParm) { var rowObj = g.getRowObj(rowParm); if (!rowObj) return; var parentrowid = $(rowObj).attr("parentrowid"); if (parentrowid == undefined) return null; return g.getRow(parentrowid); }, getChidren: function(rowParm) { if (!p.tree) return null; var rowData = g.getRow(rowParm); if (!rowData) return null; return rowData[p.tree.childrenName]; }, isLeaf: function(rowParm) { var rowObj = g.getRowObj(rowParm); if (!rowObj) return; return !$("> td > div > .n-grid-tree-space:last", rowObj).hasClass("n-grid-tree-link"); }, hasChildren: function(rowParm) { var rowObj = g.getRowObj(rowParm); if (!rowObj) return; var treelevel = $(rowObj).attr("treelevel"); var nextRow = $(rowObj).next(".n-grid-row"); if (nextRow.length == 0) return false; var nextRowTreelevel = nextRow.attr("treelevel"); return parseInt(treelevel) < parseInt(nextRowTreelevel); }, appendRow: function(rowData, targetRow, nearRow, isBefore) { var targetRowObj = g.getRowObj(targetRow); if (!targetRow) { g.addRow(rowData); return; } if (nearRow) { g.addRow(rowData, nearRow, isBefore ? true : false, targetRowObj); return; } var rowid = $(targetRowObj).attr("rowid"); var children = $(targetRowObj).nextAll("tr[parentrowid=" + rowid + "]").get(); if (!children) return; if (children.length == 0) g.addRow(rowData, targetRowObj, false, targetRowObj); else g.addRow(rowData, children[children.length - 1], false, targetRowObj); }, upgrade: function(targetRow) { if (!targetRow || !p.tree) return; var targetRowData = g.getRow(targetRow); var targetRowObj = g.getRowObj(targetRow); if (!targetRowData[p.tree.childrenName]) targetRowData[p.tree.childrenName] = []; $("> td > div > .n-grid-tree-space:last", targetRow).addClass("n-grid-tree-link n-grid-tree-link-open"); }, demotion: function(targetRow) { if (!targetRow || !p.tree) return; var targetRowData = g.getRow(targetRow); var targetRowObj = g.getRowObj(targetRow); var rowid = $(targetRowObj).attr("rowid"); $("> td > div > .n-grid-tree-space:last", targetRow).removeClass("n-grid-tree-link n-grid-tree-link-open n-grid-tree-link-close"); if (g.hasChildren(targetRowObj)) { $("tbody:first > tr[parentrowid=" + rowid + "]", g.gridbody).each(function() { g.deleteRow(this); }); } }, collapse: function(targetRow) { var targetRowObj = g.getRowObj(targetRow); var linkbtn = $(".n-grid-tree-link", targetRowObj); if (linkbtn.hasClass("n-grid-tree-link-close")) return; g.toggle(targetRow); }, expand: function(targetRow) { var targetRowObj = g.getRowObj(targetRow); var linkbtn = $(".n-grid-tree-link", targetRowObj); if (linkbtn.hasClass("n-grid-tree-link-open")) return; g.toggle(targetRow); }, toggle: function(targetRow) { var targetRowObj = g.getRowObj(targetRow); var treerow = $(targetRowObj); var level = treerow.attr("treelevel"); var linkbtn = $(".n-grid-tree-link", treerow); var opening = true; if (linkbtn.hasClass("n-grid-tree-link-close")) { linkbtn.removeClass("n-grid-tree-link-close").addClass("n-grid-tree-link-open"); } else { opening = false; linkbtn.addClass("n-grid-tree-link-close").removeClass("n-grid-tree-link-open"); } var currentRow = treerow.next(".n-grid-treerow"); while (true) { if (currentRow.length == 0) break; var treelevel = currentRow.attr("treelevel"); if (treelevel <= level) break; if (opening) { $(".n-grid-tree-link", currentRow).removeClass("n-grid-tree-link-close").addClass("n-grid-tree-link-open"); currentRow.show(); } else { $(".n-grid-tree-link", currentRow).removeClass("n-grid-tree-link-open").addClass("n-grid-tree-link-close"); currentRow.hide(); } currentRow = currentRow.next(".n-grid-treerow"); } } }; var po = { init: function() { //创建头部 po.initBuildHeader(); //创建表头 po.initBuildGridHeader(); //创建 显示/隐藏 列 列表 po.initBuildPopup(); //宽度高度初始化 po.initHeight(); //创建表体 p.delayLoad || g.loadData(p.where); //创建底部工具条 po.initFootbar(); //创建Loading g.gridloading.html(p.loadingMessage); //创建事件 po.initEven(); }, initBuildHeader: function() { if (p.title) $(".n-panel-header-text", g.header).html(p.title); else g.header.hide(); }, initBuildGridHeader: function() { var maxLevel = g.getMulHeaderLevel(); for (var level = 1; level <= maxLevel - 1; level++) { var mulHeaders = g.getMulHeaders(level); var tr = $(""); $("tr:last", g.gridheader).before(tr); //如果有复选框列 if (p.checkbox) { var headerCell = $(""); tr.append(headerCell); } //如果有明细,创建列 if (p.detail && p.detail.onShowDetail) { var detailHeaderCell = $(""); tr.append(detailHeaderCell); } $(mulHeaders).each(function(i, item) { var $headerCell = $("
"); $headerCell.attr("colSpan", item.number); $(".n-grid-hd-cell-text", $headerCell).html(item.display); tr.append($headerCell); }); } g.columns = g.getColumns(maxLevel); if (maxLevel > 1) g.gridheader.height(g.gridheader.height() * maxLevel); g.headers = []; g.gridtablewidth = 0; //如果有复选框列 if (p.checkbox) { var headerCell = $("
"); headerCell.css({ width: 27 }); $("tr:last", g.gridheader).append(headerCell); g.headers.push({ width: 27, ischeckbox: true }); g.gridtablewidth += 28; } //如果有明细,创建列 if (p.detail && p.detail.onShowDetail) { var detailHeaderCell = $("
"); detailHeaderCell.css({ width: 29 }); $("tr:last", g.gridheader).append(detailHeaderCell); g.headers.push({ width: 29, isdetail: true }); g.gridtablewidth += 30; } $(g.columns).each(function(i, item) { var $headerCell = $("
"); if (i == g.columns.length - 1) { //$(".n-grid-hd-cell-drophandle", $headerCell).remove(); $headerCell.addClass("n-grid-hd-cell-last"); } if (item.name) $headerCell.attr({ columnname: item.name }); if (item.isSort != undefined) $headerCell.attr({ isSort: item.isSort }); if (item.isAllowHide != undefined) $headerCell.attr({ isAllowHide: item.isAllowHide }); var headerText = ""; if (item.display && item.display != "") headerText = item.display; else if (item.headerRender) headerText = item.headerRender(item); else headerText = " "; $(".n-grid-hd-cell-text", $headerCell).html(headerText); //$headerCell.prepend(headerText); $("tr:last", g.gridheader).append($headerCell); var colwidth = item.width; if (item.width) { colwidth = item.width; } else if (item.minWidth) { colwidth = item.minWidth; } // else if (p.columnWidth) // { // colwidth = p.columnWidth; // } if (!colwidth){ colwidth = parseInt((g.gridbody.width() - 47 )/g.columns.length); //colwidth = 120; } if(p.colWidth[i] && p.colWidth[i] != "null"){ if (typeof (p.colWidth[i]) == "string" && p.colWidth[i].indexOf('%') > 0){ item.width = colwidth = parseInt(parseInt(p.colWidth[i]) * 0.01 * (g.gridbody.width() - g.columns.length)); } } else if (typeof (colwidth) == "string" && colwidth.indexOf('%') > 0) { item.width = colwidth = parseInt(parseInt(colwidth) * 0.01 * (g.gridbody.width() - g.columns.length)); } $headerCell.width(colwidth); g.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1; g.headers.push({ width: colwidth, columnname: item.name, columnindex: i, islast: i == g.columns.length - 1, isdetail: false }); }); $("div:first", g.gridheader).width(g.gridtablewidth + 40); }, initBuildPopup: function() { $("tr:last .n-grid-hd-cell", g.gridheader).each(function(i, td) { if ($(this).hasClass("n-grid-hd-cell-detail")) return; var isAllowHide = $(this).attr("isAllowHide"); if (isAllowHide != undefined && isAllowHide.toLowerCase() == "false") return; var chk = 'checked="checked"'; var columnindex = $(this).attr("columnindex"); var columnname = $(this).attr("columnname"); if (!columnindex || !columnname) return; var header = $(".n-grid-hd-cell-text", this).html(); if (this.style.display == 'none') chk = ''; $('tbody', g.popup).append('' + header + ''); }); $.fn.webCheckBox && $('input:checkbox', g.popup).webCheckBox( { onBeforeClick: function(obj) { if (!obj.checked) return true; if ($('input:checked', g.popup).length <= p.minColToggle) return false; return true; } }); //创建 显示/隐藏 列 $(".n-grid-hd-cell", g.gridheader).bind("contextmenu", function(e) { if (g.colresize) return true; if (!p.allowHideColumn) return true; var columnindex = $(this).attr("columnindex"); if (columnindex == undefined) return true; var left = (e.pageX - g.body.offset().left + parseInt(g.body[0].scrollLeft)); if (columnindex == g.columns.length - 1) left -= 80; g.popup.css({ left: left, top: g.gridheader.height() + 1 }); g.popup.toggle(); return false; } ); }, initHeight: function() { if(p.height && p.height != ""){ g.gridbody.css("height",p.height); }else{ if (p.isScroll == false) p.height = 'auto'; } if (p.height == 'auto') { g.gridbody.height('auto'); } if (p.width) { $(grid).width(p.width); }else{ $(grid).width(g.gridtablewidth); } po.onResize(); }, initFootbar: function() { if(!p.server){ if (p.usePager) { //创建底部工具条 - 选择每页显示记录数 var optStr = ""; var selectedIndex = -1; $(p.pageSizeOptions).each(function(i, item) { var selectedStr = ""; if (p.pageSize == item) selectedIndex = i; optStr += ""; }); $('.n-bar-selectpagesize', g.toolbar).append(""); if (selectedIndex != -1) $('.n-bar-selectpagesize select', g.toolbar)[0].selectedIndex = selectedIndex; if (p.switchPageSizeApplyComboBox && $.fn.webComboBox) { $(".n-bar-selectpagesize select", g.toolbar).webComboBox( { onBeforeSelect: function() { if (g.isDataChanged && confirm(p.isContinueByDataChanged)){ $("#"+p.table).updateGrid(); } // return false; return true; }, width: 45 }); } } else { g.toolbar.hide(); } } }, initEven: function() { g.header.click(function() { g.popup.hide(); g.endEdit(); }); //表头 - 经过和点击事件 $(".n-grid-hd-cell", g.gridheader).hover(function() { }, function() { }).mousedown(function(e) { if (g.colresize) return false; //如果正在调整列宽 }); $(".n-grid-hd-cell-text", g.gridheader).click(function(e) { var obj = (e.target || e.srcElement); var row = $(this).parent().parent(); if (!row.attr("columnname")) return; if(jQuery.inArray($(row).attr("columnname"),p.sortColumns) == -1) return; if (g.colresize) return false; //如果正在调整列宽 if (!p.enabledSort) return; if (row.attr("isSort") != undefined && row.attr("isSort").toLowerCase() == "false") return; if (g.isDataChanged && confirm(p.isContinueByDataChanged)){ $("#"+p.table).updateGrid(); } // return false; var sort = $(".n-grid-hd-cell-sort", row); var columnName = $(row).attr("columnname"); if (sort.length > 0) { if (sort.hasClass("n-grid-hd-cell-sort-asc")) { sort.removeClass("n-grid-hd-cell-sort-asc").addClass("n-grid-hd-cell-sort-desc"); row.removeClass("n-grid-hd-cell-asc").addClass("n-grid-hd-cell-desc"); g.changeSort(columnName, 'desc'); } else if (sort.hasClass("n-grid-hd-cell-sort-desc")) { sort.removeClass("n-grid-hd-cell-sort-desc").addClass("n-grid-hd-cell-sort-asc"); row.removeClass("n-grid-hd-cell-desc").addClass("n-grid-hd-cell-asc"); g.changeSort(columnName, 'asc'); } } else { row.removeClass("n-grid-hd-cell-desc").addClass("n-grid-hd-cell-asc"); $(this).after("  "); g.changeSort(columnName, 'asc'); } $(".n-grid-hd-cell-sort", row.siblings()).remove(); return false; }); g.gridheader.click(function() { g.endEdit(); }); //调整列宽 if (p.allowAdjustColWidth) { g.gridheader.mousemove(function(e) { if (g.colresize) return; //如果正在调整列宽 var posLeft = e.pageX - $(grid).offset().left; //当前鼠标位置 var currentLeft = 0; for (var i = 0; i < g.headers.length; i++) { if (g.headers[i].width) currentLeft += g.headers[i].width + 1; if (g.headers[i].isdetail || g.headers[i].ischeckbox) continue; if (posLeft >= currentLeft - 2 - g.gridbody[0].scrollLeft && posLeft <= currentLeft + 2 - g.gridbody[0].scrollLeft) { $('body').css({ cursor: 'e-resize' }); g.toDragHeaderIndex = i; return; } } $('body').css({ cursor: 'default' }); g.toDragHeaderIndex = null; }).mouseout(function(e) { if (g.colresize) return; //如果正在调整列宽 $('body').css({ cursor: 'default' }); }).mousedown(function(e) { if (g.colresize) return; //如果正在调整列宽 if (g.toDragHeaderIndex == null) return; //如果不在位置上 po.dragStart('colresize', e, g.toDragHeaderIndex); }); } //表头 - 显示/隐藏'列控制'按钮事件 if (p.allowHideColumn) { $('tr', g.popup).hover(function() { $(this).addClass('n-popup-row-over'); }, function() { $(this).removeClass('n-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); }; if ($.fn.webCheckBox) $(':checkbox', g.popup).change(onPopupCheckboxChange); else $(':checkbox', g.popup).click(onPopupCheckboxChange); } //表头 - 调整列宽层事件 //表体 - 滚动联动事件 g.gridbody.scroll(function() { var scrollLeft = g.gridbody.scrollLeft(); if (scrollLeft == undefined) return; g.gridheader[0].scrollLeft = scrollLeft; }); //表体 - 数据 单元格事件 $(grid).click(function(e) { var obj = (e.target || e.srcElement); //明细 if (obj.tagName.toLowerCase() == "span" && $(obj).hasClass("n-grid-row-cell-detailbtn")) { var row = $(obj).parent().parent().parent(); //确保不是在内嵌表格点击的 if (row.parent().parent()[0] != $("table:first", g.gridbody)[0]) return; var rowindex = parseInt($(row).attr("rowindex")); var item = g.currentData[p.root][rowindex]; if ($(obj).hasClass("n-open")) { row.next(".n-grid-detailpanel").hide(); $(obj).removeClass("n-open"); } else { var nextrow = row.next(".n-grid-detailpanel"); if (nextrow.length > 0) { nextrow.show(); $(obj).addClass("n-open"); return; } var detailRow = $(""); var detailRowInner = $("div:first", detailRow); detailRowInner.width(g.gridtablewidth - 1); detailRowInner.parent().attr("colSpan", g.headers.length).width(g.gridtablewidth - 1); row.after(detailRow); if (p.detail.onShowDetail) { p.detail.onShowDetail(item, detailRowInner[0]); detailRowInner.show(); } else if (p.detail.render) { detailRowInner.append(p.detail.render()); detailRowInner.show(); } $(obj).addClass("n-open"); } return; } //树 - 伸展/收缩节点 if ($(obj).hasClass("n-grid-tree-link")) { var rowObj = $(obj).parent().parent().parent().get(0); g.toggle(rowObj); return; } //全选 if (obj.tagName.toLowerCase() == "div" && $(obj).hasClass("n-grid-hd-cell-btn-checkbox")) { var row = $(obj).parent().parent().parent(); var uncheck = row.hasClass("n-checked"); if (p.onBeforeCheckAllRow) { if (p.onBeforeCheckAllRow(!uncheck, grid) == false) return false; } if (uncheck) { row.removeClass("n-checked"); $("tbody:first > tr.n-grid-row", g.gridbody).removeClass("n-checked"); } else { row.addClass("n-checked"); $("tbody:first > tr.n-grid-row", g.gridbody).addClass("n-checked"); } p.onCheckAllRow && p.onCheckAllRow(!uncheck, grid); } if (obj.tagName.toLowerCase() == "div" || $(obj).hasClass("n-grid-row-cell-inner") || $(obj).hasClass("n-grid-row-cell")) { if (p.enabledEdit && !p.dblClickToEdit) { var row = null; if ($(obj).hasClass("n-grid-row-cell")) row = $(obj).parent(); else row = $(obj).parent().parent(); //第一次选择的时候不允许编辑,第二次才允许 if (p.allowUnSelectRow || row.hasClass("n-selected-again")) po.applyEditor(obj); } } }); //工具条 - 切换每页记录数事件 if(!p.server){ $('select', g.toolbar).change(function() { if (g.isDataChanged && confirm(p.isContinueByDataChanged)){ $("#"+p.table).updateGrid(); } // return false; p.newPage = 1; p.pageSize = this.value; g.loadData(p.where); }); } //工具条 - 切换当前页事件 $('.pcontrol input', g.toolbar).keydown(function(e) { if (e.keyCode == 13) g.changePage('input') }); //工具条 - 按钮事件 $(".n-bar-button", g.toolbar).hover(function() { $(this).addClass("n-bar-button-over"); }, function() { $(this).removeClass("n-bar-button-over"); }).click(function() { if ($(this).hasClass("n-bar-btnfirst")) { if (p.onToFirst && p.onToFirst(grid) == false) return false; g.changePage('first'); } else if ($(this).hasClass("n-bar-btnprev")) { if (p.onToPrev && p.onToPrev(grid) == false) return false; g.changePage('prev'); } else if ($(this).hasClass("n-bar-btnnext")) { if (p.onToNext && p.onToNext(grid) == false) return false; g.changePage('next'); } else if ($(this).hasClass("n-bar-btnlast")) { if (p.onToLast && p.onToLast(grid) == false) return false; g.changePage('last'); } else if ($(this).hasClass("n-bar-btnload")) { if ($("span", this).hasClass("n-disabled")) return false; if (p.onReload && p.onReload(grid) == false) return false; if (g.isDataChanged && confirm(p.isContinueByDataChanged)){ $("#"+p.table).updateGrid(); } // return false; g.loadData(p.where); } }); g.toolbar.click(function() { g.popup.hide(); g.endEdit(); }); //全局事件 $(document).mousemove(function(e) { po.dragMove(e) }).mouseup(function(e) { po.dragEnd() }).hover(function() { }, function() { po.dragEnd() }).click(function(e) { po.onClick(e) }); $(window).resize(po.onResize); }, searchData: function(data, clause) { var newData = new Array(); for (var i = 0; i < data.length; i++) { if (clause(data[i], i)) { newData[newData.length] = data[i]; } } return newData; }, showData: function(data) { //加载中 $('.n-bar-btnloading:first', g.toolbar).removeClass('n-bar-btnloading'); if (!data || !data[p.root]) return; if (p.onBeforeShowData && p.onBeforeShowData(grid, data) == false) { return false; } g.isDataChanged = false; $(".n-bar-btnload:first span", g.toolbar).removeClass("n-disabled"); g.loading = false; if (p.usePager) { //更新分页 p.total = data[p.record]; p.page = p.newPage; p.pageCount = Math.ceil(p.total / p.pageSize); po.buildPager(); } //清空数据 g.gridbody.html(""); //$(".n-grid-row,.n-grid-detailpanel,.n-grid-totalsummary", g.gridbody).remove(); //加载数据 var gridhtmlarr = ['
']; if (p.groupColumnName) //启用分组模式 { var groups = []; //分组列名数组 var groupsdata = []; //切成几块后的数据 $(data[p.root]).each(function(i, item) { 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) { gridhtmlarr.push(''); gridhtmlarr.push(''); gridhtmlarr.push(''); gridhtmlarr.push(po.getHtmlFromData(item)); //汇总 if (g.isTotalSummary()) gridhtmlarr.push(po.getTotalSummaryHtml(item, "n-grid-totalsummary-group")); }); } else if (p.tree)//启用分页模式 { if (!p.tree.columnName) p.tree.columnName = "name"; if (!p.tree.childrenName) p.tree.childrenName = "children"; if (!p.tree.isParent) p.tree.isParent = function(rowData) { var exist = 'children' in rowData; return exist; }; if (!p.tree.isExtend) p.tree.isExtend = function(rowData) { if ('isextend' in rowData && rowData['isextend'] == false) return false; return true; }; gridhtmlarr.push(po.getHtmlFromData(data[p.root], p.tree, 1)); } else { gridhtmlarr.push(po.getHtmlFromData(data[p.root])); } gridhtmlarr.push('
'); gridhtmlarr.push('    '); gridhtmlarr.push(p.groupColumnDisplay + ':' + groups[i]); gridhtmlarr.push('
'); g.gridbody.html(gridhtmlarr.join('')); if (!p.groupColumnName) { //创建汇总行 po.bulidTotalSummary(); } $("> div:first", g.gridbody).width(g.gridtablewidth); po.onResize(); //分组 - 事件 $("tbody:first > .n-grid-grouprow", g.gridbody).each(function() { var grouprow = $(this); $(".n-grid-group-togglebtn", grouprow).click(function() { var opening = true; if ($(this).hasClass("n-grid-group-togglebtn-close")) $(this).removeClass("n-grid-group-togglebtn-close"); else { opening = false; $(this).addClass("n-grid-group-togglebtn-close"); } var currentRow = grouprow.next(".n-grid-row,.n-grid-totalsummary-group"); while (true) { if (currentRow.length == 0) break; if (opening) currentRow.show(); else currentRow.hide(); currentRow = currentRow.next(".n-grid-row,.n-grid-totalsummary-group"); } }); }); //表体 - 行经过事件 $("tbody:first > .n-grid-row", g.gridbody).each(function() { po.setRowEven(this); }); if (p.totalRender) { $(".n-panel-bar-total", grid).remove(); $(".n-panel-bar", grid).before('
' + p.totalRender(g.data, g.filteredData) + '
'); } if (p.onAfterShowData) { p.onAfterShowData(grid, data, g); } }, onClick: function(e) { var obj = (e.target || e.srcElement); var tagName = ""; if(obj.tagName) tagName = obj.tagName.toLowerCase(); if (g.grideditor.editingCell) { if (tagName == 'html' || tagName == 'body' || $(obj).hasClass("n-grid-body") || $(obj).hasClass("n-grid-row")) { g.endEdit(true); } } if (p.allowHideColumn) { if (tagName == 'html' || tagName == 'body' || $(obj).hasClass("n-grid-body") || $(obj).hasClass("n-grid-row") || $(obj).hasClass("n-grid-row-cell-inner") || $(obj).hasClass("n-grid-header")) { g.popup.hide(); } } }, getHtmlFromData: function(dataArray, tree, level, parentrowid) { if (!dataArray || !dataArray.length) return ""; var gridhtmlarr = []; var rowlenth = dataArray.length; $(dataArray).each(function(i, item) { if (!item) return; if (!p.usePager && i == rowlenth - 1 && !g.isTotalSummary() ) gridhtmlarr.push(''); $(g.headers).each(function(headerCellIndex, headerInfor) { //如果是复选框(系统列) if (this.ischeckbox) { gridhtmlarr.push('
'); return; } //如果是明细列(系统列) else if (this.isdetail) { gridhtmlarr.push('
'); return; } var column = g.columns[this.columnindex]; var colwidth = this.width; if (!this.islast) gridhtmlarr.push(' 0) { gridhtmlarr.push('width:' + colwidth + '" '); } else { gridhtmlarr.push('width:' + colwidth + 'px" '); } if (p.fixedCellHeight) gridhtmlarr.push('>
0) { gridhtmlarr.push(' style = "width:95%; '); } else { gridhtmlarr.push(' style = "width:' + parseInt(colwidth - 8) + 'px; '); } if (column && column.align) gridhtmlarr.push('text-align:' + column.align + ';'); if (column && column.type && column.type == "date") { var date = p.renderDate(item[this.columnname]); item[this.columnname] = date; } var content = po.getCellContent(item, i, item[this.columnname], column, tree, level); gridhtmlarr.push('">' + content + '
'); }); gridhtmlarr.push(''); if (tree && tree.isParent(item)) { var childrenData = item[tree.childrenName]; if (childrenData) gridhtmlarr.push(po.getHtmlFromData(childrenData, tree, level + 1, rowid)); } }); return gridhtmlarr.join(''); }, getTreeCellHtml: function(tree, oldContent, rowData, level) { var isExtend = tree.isExtend(rowData); var isParent = tree.isParent(rowData); var content = ""; for (var i = 1; i < level; i++) { content += "
"; } if (isExtend && isParent) content += ""; else if (isParent) content += ""; else content += "
"; content += "" + oldContent + ""; return content; }, getCellContent: function(rowData, rowindex, value, column, tree, level) { var content = ""; if(value){ if (column.render) { content = column.render(rowData, rowindex, value, column); } else if (column.type == 'date') { content = value.toString(); if (value instanceof Date) { if (window.navigator.userAgent.indexOf("MSIE")>=1) p.dateFormat = "yyyy-MM-dd"; if (column.format) content = g.getFormatDate(value, column.format); else content = g.getFormatDate(value, p.dateFormat); } } else { content = value.toString(); } } if(column["format"]){ if (column.render) { content = column.render(rowData, rowindex, value, column); } } if (tree && tree.columnName == column.name) { content = po.getTreeCellHtml(tree, content, rowData, level); } if (!content) content = ""; return content; }, setRowEven: function(rowobj) { $(rowobj).bind("contextmenu", function(e) { var obj = (e.target || e.srcElement); if (p.onRClickToSelect) $(this).addClass("n-selected").siblings(".n-selected").removeClass("n-selected"); if (p.onContextmenu) { var rowid = $(this).attr("rowid"); var rowindex = $(this).attr("rowindex"); var rowdata = g.getRow(rowid); return p.onContextmenu({ data: rowdata, rowindex: rowindex, row: this }, e); } }); $(rowobj).hover(function(e) { if (!p.mouseoverRowCssClass) $(this).addClass(p.mouseoverRowCssClass); }, function(e) { if (!p.mouseoverRowCssClass) $(this).removeClass(p.mouseoverRowCssClass); }).click(function(e) { if (p.checkbox) { var srcObj = (e.target || e.srcElement); var selectRowButtonOnly = p.selectRowButtonOnly ? true : false; if (p.enabledEdit) selectRowButtonOnly = true; if (!selectRowButtonOnly || $(srcObj).hasClass("n-grid-row-cell-btn-checkbox")) { var row = $(this); var index = row.attr('rowindex'); var rowid = row.attr("rowid"); var uncheck = row.hasClass("n-checked"); if (p.onBeforeCheckRow) { if (p.onBeforeCheckRow(!uncheck, g.getRow(rowid), index, row[0]) == false) return false; } if (uncheck) row.removeClass("n-checked"); else row.addClass("n-checked"); p.onCheckRow && p.onCheckRow(!uncheck, g.getRow(rowid), index, row[0]); } if (!p.enabledEdit) return; } var index = $(this).attr('rowindex'); var rowid = $(this).attr("rowid"); if ($(this).hasClass("n-selected")) { if (!p.allowUnSelectRow) { $(this).addClass("n-selected-again"); return; } $(this).removeClass("n-selected n-selected-again"); if (p.onUnSelectRow) { p.onUnSelectRow(g.getRow(rowid), index, this); } } else { $(this).siblings(".n-selected").each(function() { if (p.allowUnSelectRow || $(this).hasClass("n-selected-again")) g.endEdit(); $(this).removeClass("n-selected n-selected-again"); }); $(this).addClass("n-selected"); if (p.onSelectRow) { p.onSelectRow(g.getRow(rowid), index, this); } } }).dblclick(function() { var index = $(this).attr('rowindex'); var rowid = $(this).attr('rowid'); if (p.onDblClickRow) { p.onDblClickRow(g.getRow(rowid), index, this); } }); }, applyEditor: function(obj) { if (obj.href || obj.type) return true; var rowcell; if ($(obj).hasClass("n-grid-row-cell")) rowcell = obj; else if ($(obj).parent().hasClass("n-grid-row-cell")) rowcell = $(obj).parent()[0]; if (!rowcell) return; var row = $(rowcell).parent(); var rowindex = row.attr("rowindex"); var rowid = row.attr("rowid"); var columnindex = $(rowcell).attr("columnindex"); var columnname = $(rowcell).attr("columnname"); var column = g.columns[columnindex]; if (!column) return; var left = $(rowcell).offset().left - g.body.offset().left; var top = $(rowcell).offset().top - $(grid).offset().top; var rowdata = g.getRow(rowid); var currentdata = rowdata[columnname]; var editParm = { record: rowdata, value: currentdata, column: column, columnname: columnname, columnindex: columnindex, rowindex: rowindex, rowObj: row[0], cellObj: rowcell }; if (p.onBeforeEdit) { if (!p.onBeforeEdit(editParm)) return false; } g.grideditor.css({ left: left, top: top, width: $(rowcell).css('width'), height: $(rowcell).css('height') }).html(""); g.grideditor.editingCell = null; if (column.editor && column.editor.type == 'date') { if ("" == currentdata || null == currentdata || isNaN(currentdata)) { currentdata = new Date(); } else { //注:该字段的type不能为date了,数据形式如:"IncomeDay": '2009-08-09' currentdata = g.stringToDate(currentdata); } var $inputText = ""; if(column.validate) $inputText = $(""); else $inputText = $(""); g.grideditor.append($inputText); if (window.navigator.userAgent.indexOf("MSIE")>=1) p.dateFormat = "yyyy/MM/dd"; $inputText.val(g.getFormatDate(currentdata, p.dateFormat)); $inputText.css("height",$(rowcell).height() - 4); var options = { width: $(rowcell).width() - 4, height: $(rowcell).height()-2, onChangeDate: function(newValue) { $(rowcell).addClass("n-grid-row-cell-edited"); if (column.editor.onChange) column.editor.onChange(rowcell, newValue); editParm.value = newValue; if (po.checkEditAndUpdateCell(editParm)) { if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue); } } }; if (column.editor.p) options = $.expend({}, typeof (column.editor.p) == 'function' ? column.editor.p(rowdata, rowindex, currentdata, column) : column.editor.p, options); options.format = "yyyy-MM-dd"; if (window.navigator.userAgent.indexOf("MSIE")>=1) options.format = "yyyy/MM/dd"; $inputText.webDateEditor(options); g.grideditor.editingCell = rowcell; g.grideditor.show(); } else if (column.editor && column.editor.type == 'select') { var $inputText = ""; if(column.validate) $inputText = $(""); else $inputText = $(""); g.grideditor.append($inputText); //$inputText.val(currentdata); $inputText.css("height",$(rowcell).height() - 4); var options = { width: $(rowcell).width()-4, onSelected: function(newValue, newText) { $(rowcell).addClass("n-grid-row-cell-edited"); if (column.editor.valueColumnName) rowdata[column.editor.valueColumnName] = newValue; if (column.editor.displayColumnName) rowdata[column.editor.displayColumnName] = newText; if (column.editor.onChange) column.editor.onChange(rowcell, newValue); editParm.value = newValue; if (po.checkEditAndUpdateCell(editParm)) { if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue); } } }; if (column.editor.data) options.data = column.editor.data; if (column.editor.dataValueField) options.valueField = column.editor.dataValueField; else if (column.editor.valueColumnName) options.valueField = column.editor.valueColumnName; if (column.editor.dataDisplayField) options.displayField = options.textField = column.editor.dataDisplayField; else if (column.editor.displayColumnName) options.displayField = options.textField = column.editor.displayColumnName; if (column.editor.valueColumnName) options.initValue = g.currentData[p.root][rowindex][column.editor.valueColumnName]; else if (column.editor.dataDisplayField) options.initText = g.currentData[p.root][rowindex][column.editor.dataDisplayField]; if (column.editor.p) { var tmp = typeof (column.editor.p) == 'function' ? column.editor.p(rowdata, rowindex, currentdata, column) : column.editor.p; options = $.extend({}, options, tmp); } $inputText.webComboBox(options); g.grideditor.editingCell = rowcell; g.grideditor.show(); }else if(column.editor && column.editor.type == 'mtilselect'){ var $inputText = ""; if(column.validate) $inputText = $(""); else $inputText = $(""); g.grideditor.append($inputText); $inputText.css("height",$(rowcell).height() - 4); //$inputText.val(currentdata); var options = { width: $(rowcell).width()-4, onSelected: function(newValue, newText) { $(rowcell).addClass("n-grid-row-cell-edited"); if (column.editor.valueColumnName) rowdata[column.editor.valueColumnName] = newValue; if (column.editor.displayColumnName) rowdata[column.editor.displayColumnName] = newText; if (column.editor.onChange) column.editor.onChange(rowcell, newValue); editParm.value = newValue; if (po.checkEditAndUpdateCell(editParm)) { if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue); } } }; if (column.editor.data) options.data = column.editor.data; if (column.editor.dataValueField) options.valueField = column.editor.dataValueField; else if (column.editor.valueColumnName) options.valueField = column.editor.valueColumnName; if (column.editor.dataDisplayField) options.displayField = options.textField = column.editor.dataDisplayField; else if (column.editor.displayColumnName) options.displayField = options.textField = column.editor.displayColumnName; if (column.editor.valueColumnName) options.initValue = g.currentData[p.root][rowindex][column.editor.valueColumnName]; else if (column.editor.dataDisplayField) options.initText = g.currentData[p.root][rowindex][column.editor.dataDisplayField]; if (column.editor.p) { var tmp = typeof (column.editor.p) == 'function' ? column.editor.p(rowdata, rowindex, currentdata, column) : column.editor.p; options = $.extend({}, options, tmp); } options.isMultiSelect = true; options.isShowCheckBox = true; $inputText.webComboBox(options); g.grideditor.editingCell = rowcell; g.grideditor.show(); } else if (column.editor && (column.editor.type == 'int' || column.editor.type == 'float' || column.editor.type == 'spinner')) { var $inputText = ""; if(column.validate) $inputText = $(""); else $inputText = $(""); g.grideditor.append($inputText); $inputText.attr({ style: 'border:#6E90BE' }).val(currentdata); $inputText.css("height",$(rowcell).height() - 4); var options = { width: $(rowcell).width()-4, height: $(rowcell).height()-2, type: column.editor.type == 'float' ? 'float' : 'int', onChangeValue: function(newValue) { $(rowcell).addClass("n-grid-row-cell-edited"); if (column.editor.onChange) column.editor.onChange(rowcell, newValue); editParm.value = newValue; if (po.checkEditAndUpdateCell(editParm)) { if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue); } } }; if (column.editor.minValue != undefined) options.minValue = column.editor.minValue; if (column.editor.maxValue != undefined) options.maxValue = column.editor.maxValue; $inputText.webSpinner(options); g.grideditor.editingCell = rowcell; g.grideditor.show(); } else if (column.editor && (column.editor.type == 'string' || column.editor.type == 'text')) { var $inputText = ""; if(column.validate) $inputText = $(""); else $inputText = $(""); g.grideditor.append($inputText); $inputText.val(currentdata); $inputText.webTextBox( { width: $(rowcell).width() - 4, height: $(rowcell).height()-2, onChangeValue: function(newValue) { $(rowcell).addClass("n-grid-row-cell-edited"); if (column.editor.onChange) column.editor.onChange(rowcell, newValue); editParm.value = newValue; if (po.checkEditAndUpdateCell(editParm)) { if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue); } } } ).bind('keydown', function(e) { var key = e.which; if (key == 13) { $inputText.trigger("change"); g.endEdit(); } }); $inputText.parent().addClass("n-text-editing"); g.grideditor.editingCell = rowcell; g.grideditor.show(); } else if (column.editor && (column.editor.type == 'chk' || column.editor.type == 'checkbox')) { var $input = $(""); g.grideditor.append($input); $input[0].checked = currentdata == 1 ? true : false; $input.webCheckBox(); $input.change(function() { if (column.editor.onChange) column.editor.onChange(rowcell, this.checked); editParm.value = this.checked ? 1 : 0; if (po.checkEditAndUpdateCell(editParm)) { if (column.editor.onChanged) column.editor.onChanged(rowcell, this.checked); } }); g.grideditor.editingCell = rowcell; g.grideditor.show(); } }, checkEditAndUpdateCell: function(editParm) { if (p.onBeforeSubmitEdit) { if (!p.onBeforeSubmitEdit(editParm)) return false; } g.grideditor.editingValue = editParm.value; g.updateCell(editParm.cellObj, editParm.value); return true; }, getCurrentPageData: function(jsonObj) { var data = $.extend({}, jsonObj); data[p.root] = new Array(); if (!jsonObj || !jsonObj[p.root] || !jsonObj[p.root].length) { data[p.record] = 0; return data; } data[p.record] = jsonObj[p.root].length ? jsonObj[p.root].length : 0; if (!p.newPage) p.newPage = 1; for (i = (p.newPage - 1) * p.pageSize; i < jsonObj[p.root].length && i < p.newPage * p.pageSize; i++) { var obj = $.extend({}, jsonObj[p.root][i]); data[p.root].push(obj); } return data; }, //比较某一列两个数据 compareData: function(data1, data2, columnName, columnType) { if (data1[columnName] == null && data2[columnName] != null) return 1; else if (data1[columnName] == null && data2[columnName] == null) return 0; else if (data1[columnName] != null && data2[columnName] == null) return -1; switch (columnType) { case "int": return parseInt(data1[columnName]) < parseInt(data2[columnName]) ? -1 : parseInt(data1[columnName]) > parseInt(data2[columnName]) ? 1 : 0; case "float": return parseFloat(data1[columnName]) < parseFloat(data2[columnName]) ? -1 : parseFloat(data1[columnName]) > parseFloat(data2[columnName]) ? 1 : 0; case "string": return (""+data1[columnName]).localeCompare(""+data2[columnName]); case "date": return data1[columnName] < data2[columnName] ? -1 : data1[columnName] > data2[columnName] ? 1 : 0; } return data1[columnName].localeCompare(data2[columnName]); }, getTotalSummaryHtml: function(data, classCssName) { var totalsummaryArr = []; if (classCssName) totalsummaryArr.push(''); else totalsummaryArr.push(''); $(g.headers).each(function() { totalsummaryArr.push('
'); if (column.totalSummary) { var isExist = function(type) { for (var i = 0; i < types.length; i++) if (types[i].toLowerCase() == type.toLowerCase()) return true; return false; }; var sum = 0, count = 0, avg = 0; var max = parseFloat(data[0][column.name]); var min = parseFloat(data[0][column.name]); for (var i = 0; i < data.length; i++) { var value = parseFloat(data[i][column.name]); if (!value) continue; sum += value; count += 1; if (value > max) max = value; if (value < min) min = value; } avg = sum * 1.0 / data.length; if (column.totalSummary.render) { var renderhtml = column.totalSummary.render({ sum: sum, count: count, avg: avg, min: min, max: max }, column, g.data); totalsummaryArr.push(renderhtml); } else if (column.totalSummary.type) { var types = column.totalSummary.type.split(','); if (isExist('sum')) totalsummaryArr.push("
Sum=" + sum.toFixed(2) + "
"); if (isExist('count')) totalsummaryArr.push("
Count=" + count + "
"); if (isExist('max')) totalsummaryArr.push("
Max=" + max.toFixed(2) + "
"); if (isExist('min')) totalsummaryArr.push("
Min=" + min.toFixed(2) + "
"); if (isExist('avg')) totalsummaryArr.push("
Avg=" + avg.toFixed(2) + "
"); } totalsummaryArr.push('
'); } }); totalsummaryArr.push(''); return totalsummaryArr.join(''); }, bulidTotalSummary: function() { if (!g.isTotalSummary()) return false; if (!g.currentData || g.currentData[p.root].length == 0) return false; $("tbody:first", g.gridbody).append(po.getTotalSummaryHtml(g.currentData[p.root])); }, buildPager: function() { $('.pcontrol input', g.toolbar).val(p.page); $('.pcontrol span', g.toolbar).html(p.pageCount); var r1 = parseInt((p.page - 1) * p.pageSize) + 1.0; var r2 = parseInt(r1) + parseInt(p.pageSize) - 1; if (p.total < r2) r2 = p.total; var stat = p.pageStatMessage; stat = stat.replace(/{from}/, r1); stat = stat.replace(/{to}/, r2); stat = stat.replace(/{total}/, p.total); stat = stat.replace(/{pagesize}/, p.pageSize); $('.n-bar-text', g.toolbar).html(stat); if(!p.total) { $(".n-bar-btnfirst span,.n-bar-btnprev span,.n-bar-btnnext span,.n-bar-btnlast span", g.toolbar) .addClass("n-disabled"); } if (p.page == 1) { $(".n-bar-btnfirst span", g.toolbar).addClass("n-disabled"); $(".n-bar-btnprev span", g.toolbar).addClass("n-disabled"); } else if(p.page > p.pageCount && p.pageCount > 0) { $(".n-bar-btnfirst span", g.toolbar).removeClass("n-disabled"); $(".n-bar-btnprev span", g.toolbar).removeClass("n-disabled"); } if (p.page == p.pageCount) { $(".n-bar-btnlast span", g.toolbar).addClass("n-disabled"); $(".n-bar-btnnext span", g.toolbar).addClass("n-disabled"); } else if(p.page < p.pageCount && p.pageCount > 0) { $(".n-bar-btnlast span", g.toolbar).removeClass("n-disabled"); $(".n-bar-btnnext span", g.toolbar).removeClass("n-disabled"); } }, onResize: function() { if (p.height && p.height != 'auto') { var windowHeight = $(window).height(); //if(g.windowHeight != undefined && g.windowHeight == windowHeight) return; var h = 0; var parentHeight = null; if (typeof (p.height) == "string" && p.height.indexOf('%') > 0) { var gridparent = $(grid).parent(); if (p.InWindow || gridparent[0].tagName.toLowerCase() == "body") { parentHeight = windowHeight; parentHeight -= parseInt($('body').css('paddingTop')); parentHeight -= parseInt($('body').css('paddingBottom')); } else { parentHeight = gridparent.height(); } h = parentHeight * parseFloat(p.height) * 0.01; if (p.InWindow || gridparent[0].tagName.toLowerCase() == "body") h -= ($(grid).offset().top - parseInt($('body').css('paddingTop'))); } else { h = parseInt(p.height); } h += p.heightDiff; g.windowHeight = windowHeight; po.setHeight(h); } }, setHeight: function(h) { if (p.title) h -= 24; if (p.usePager) h -= 32; if (p.totalRender) h -= 25; h -= 23 * (g.getMulHeaderLevel() - 1); h -= 22; h > 0 && g.gridbody.height(h); }, dragStart: function(dragtype, e, toDragHeaderIndex) { if (dragtype == 'colresize') //列宽调整 { var columnindex = g.headers[g.toDragHeaderIndex].columnindex; var width = g.headers[g.toDragHeaderIndex].width; if (columnindex == undefined) return; g.colresize = { startX: e.pageX, width: width, columnindex: columnindex }; $('body').css('cursor', 'e-resize'); g.draggingline.css({ height: g.body.height(), left: e.pageX - $(grid).offset().left + parseInt(g.body[0].scrollLeft), top: 0 }).show(); $('body').bind('selectstart', function() { return false; }); } $.fn.webNoSelect && $('body').webNoSelect(); }, dragMove: function(e) { if (g.colresize) //列 调整 { var diff = e.pageX - g.colresize.startX; var newwidth = g.colresize.width + diff; g.colresize.newwidth = newwidth; $('body').css('cursor', 'e-resize'); g.draggingline.css({ left: e.pageX - $(grid).offset().left + parseInt(g.body[0].scrollLeft) }); $('body').unbind('selectstart'); } }, dragEnd: function(e) { if (g.colresize) { if (g.colresize.newwidth == undefined) { $('body').css('cursor', 'default'); return false; } var mincolumnwidth = 80; var columnindex = g.colresize.columnindex; var column = g.columns[columnindex]; if (column && column.minWidth) mincolumnwidth = column.minWidth; var newwidth = g.colresize.newwidth; newwidth = newwidth < mincolumnwidth ? mincolumnwidth : newwidth; var diff = newwidth - g.colresize.width; g.headers[g.toDragHeaderIndex].width += diff; g.gridtablewidth += diff; $("div:first", g.gridheader).width(g.gridtablewidth + 40); $("div:first", g.gridbody).width(g.gridtablewidth); $('.n-grid-hd-cell[columnindex=' + columnindex + ']', g.gridheader).css('width', newwidth); $('tbody:first > .n-grid-row > td[columnindex=' + columnindex + '],tbody:first > .n-grid-totalsummary > td[columnindex=' + columnindex + ']', g.gridbody).each(function() { $(this).css('width', newwidth); $("div:first", this).css('width', newwidth - 8); }); po.onResize(); g.draggingline.hide(); g.colresize = false; } $('body').css('cursor', 'default'); $.fn.webNoSelect && $('body').webNoSelect(false); } }; //头部 g.header = $(".n-panel-header:first", grid); //主体 g.body = $(".n-panel-body:first", grid); //底部工具条 g.toolbar = $(".n-panel-bar:first", grid); //显示/隐藏列 g.popup = $(".n-grid-popup:first", grid); //编辑层 g.grideditor = $(".n-grid-editor:first", grid); //加载中 g.gridloading = $(".n-grid-loading:first", grid); //调整列宽层 g.draggingline = $(".n-grid-dragging-line", grid); //表头 g.gridheader = $(".n-grid-header:first", grid); //表主体 g.gridbody = $(".n-grid-body:first", grid); g.currentData = null; g.recordNumber = 0; g.records = {}; po.init(); if (grid.id == undefined) grid.id = "WebUI_" + new Date().getTime(); WebUIManagers[grid.id + "_Grid"] = g; grid.usedGrid = true; }; $.webGridSetParms = function(p, fixedP) { p = $.extend({}, $.webDefaults.Grid, $.webDefaults.GridString, p || {}); if (p.url && p.data) { p.dataType = "local"; } else if (p.url && !p.data) { p.dataType = "server"; } else if (!p.url && p.data) { p.dataType = "local"; } else if (!p.url && !p.data) { p.dataType = "local"; p.data = []; } if (p.dataType == "local") p.dataAction = "local"; if (fixedP) { p = $.extend(p, fixedP); } return p; }; $.fn.webGrid = function(p) { var fixedP = {}; p = p || {}; p = $.webGridSetParms(p, fixedP); this.each(function() { $.webAddGrid(this, p); }); if (this.length == 0) return null; if (this.length == 1) return $(this[0]).webGetGridManager(); var managers = []; this.each(function() { managers.push($(this).webGetGridManager()); }); return managers; }; })(jQuery);