tijian_tieying/web/dccdc/ligerUI/js/plugins/ligerGrid.js
2025-02-20 12:14:39 +08:00

4502 lines
201 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* jQuery ligerUI 1.3.3
*
* http://ligerui.com
*
* Author daomi 2015 [ 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
urlParms: null, //url带参数
data: null, //初始化数据
usePager: true, //是否分页
hideLoadButton : false, //是否隐藏刷新按钮
pagerRender : null, //分页栏自定义渲染函数
page: 1, //默认当前页
pageSize: 10, //每页默认的结果数
pageSizeOptions: [10, 20, 30, 40, 50, 100, 150, 200], //可选择设定的每页结果数
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, //是否显示复选框
isSingleCheck: false, //复选框选择的时候是否单选模式
allowHideColumn: true, //是否显示'切换列层'按钮
enabledEdit: false, //是否允许编辑
isScroll: true, //是否滚动
dateFormat: 'yyyy-MM-dd', //默认时间显示格式
inWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
statusName: '__status', //状态名
method: 'post', //获取数据http方式
async: true,
fixedCellHeight: true, //是否固定单元格的高度
heightDiff: 0, //高度补差,当设置height:100%时,可能会有高度的误差,可以通过这个属性调整
cssClass: null, //类名
root: 'Rows', //数据源字段名
record: 'Total', //数据源记录数字段名
pageParmName: 'page', //页索引参数名,(提交给服务器)
pagesizeParmName: 'pagesize', //页记录数参数名,(提交给服务器)
sortnameParmName: 'sortname', //页排序列名(提交给服务器)
sortorderParmName: 'sortorder', //页排序方向(提交给服务器)
allowUnSelectRow: false, //是否允许反选行
alternatingRow: true, //奇偶行效果
mouseoverRowCssClass: 'l-grid-row-over',
enabledSort: true, //是否允许排序
rowClsRender: null, //行自定义css class渲染器
rowAttrRender: null, //行自定义属性渲染器(包括style也可以定义)
groupColumnName: null, //分组 - 列名
groupColumnDisplay: '分组', //分组 - 列显示名字
groupRender: null, //分组 - 渲染器
totalRender: null, //统计行(全部数据)
delayLoad: false, //初始化时是否不加载
where: null, //数据过滤查询函数,(参数一 data item参数二 data item index)
selectRowButtonOnly: false, //复选框模式时,是否只允许点击复选框才能选择行
selectable: true,
whenRClickToSelect: false, //右击行时是否选中
contentType: null, //Ajax contentType参数
checkboxColWidth: 27, //复选框列宽度
detailColWidth: 29, //明细列宽度
clickToEdit: true, //是否点击单元格的时候就编辑
detailToEdit: false, //是否点击明细的时候进入编辑
onEndEdit: null,
minColumnWidth: 80,
tree: null, //treeGrid模式
isChecked: null, //复选框 初始化函数
isSelected: null, //选择 初始化函数
frozen: true, //是否固定列
frozenDetail: false, //明细按钮是否在固定列中
frozenCheckbox: true, //复选框按钮是否在固定列中
detail: null,
detailHeight: 260,
isShowDetailToggle: null, //是否显示展开/收缩明细的判断函数
rownumbers: false, //是否显示行序号
frozenRownumbers: true, //行序号是否在固定列中
rownumbersColWidth: 26,
colDraggable: false, //是否允许表头拖拽
rowDraggable: false, //是否允许行拖拽
rowDraggingRender: null,
autoCheckChildren: true, //是否自动选中子节点
onRowDragDrop: null, //行拖拽事件
rowHeight: 28, //行默认的高度
headerRowHeight: 28, //表头行的高度
toolbar: null, //工具条,参数同 ligerToolbar的,额外参数有title、icon
toolbarShowInLeft: true, //工具条显示在左边
headerImg: null, //表格头部图标
editorTopDiff: 3, //编辑器top误差
editorLeftDiff: 1, //编辑器left误差
editorHeightDiff: -1, //编辑器高度误差
unSetValidateAttr: true, //是否不设置validate属性到inuput
autoFilter: false, //自动生成高级查询, 需要filter/toolbar组件支持. 需要引用skins/ligerui-icons.css
rowSelectable: true, //是否允许选择
scrollToPage: false, //滚动时分页
scrollToAppend: true, //滚动时分页 是否追加分页的形式
onDragCol: null, //拖动列事件
onToggleCol: null, //切换列事件
onChangeSort: null, //改变排序事件
onSuccess: null, //成功获取服务器数据的事件
onDblClickRow: null, //双击行事件
onClickRow: null, //单击事件
onSelectRow: null, //选择行事件
onBeforeSelectRow:null, //选择前事件
onUnSelectRow: null, //取消选择行事件
onBeforeCheckRow: null, //选择前事件可以通过return false阻止操作(复选框)
onCheckRow: null, //选择事件(复选框)
onBeforeCheckAllRow: null, //选择前事件可以通过return false阻止操作(复选框 全选/全不选)
onCheckAllRow: null, //选择事件(复选框 全选/全不选)onextend
onBeforeShowData: null, //显示数据前事件可以通过reutrn false阻止操作
onAfterShowData: null, //显示完数据事件
onError: null, //错误事件
onSubmit: null, //提交前事件
onReload: null, //刷新事件可以通过return false来阻止操作
onToFirst: null, //第一页可以通过return false来阻止操作
onToPrev: null, //上一页可以通过return false来阻止操作
onToNext: null, //下一页可以通过return false来阻止操作
onToLast: null, //最后一页可以通过return false来阻止操作
onAfterAddRow: null, //增加行后事件
onBeforeEdit: null, //编辑前事件
onBeforeSubmitEdit: null, //验证编辑器结果是否通过
onAfterEdit: null, //结束编辑后事件
onLoading: null, //加载时函数
onLoaded: null, //加载完函数
onContextmenu: null, //右击事件
onBeforeCancelEdit: null, //取消编辑前事件
onAfterSubmitEdit: null, //提交后事件
onRowDragDrop: null, //行拖拽后事件
onGroupExtend: null, //分组展开事件
onGroupCollapse: null, //分组收缩事件
onTreeExpand: null, //树展开事件
onTreeCollapse: null, //树收缩事件
onTreeExpanded: null, //树展开事件
onTreeCollapsed: null, //树收缩事件
onLoadData: null, //加载数据前事件
onHeaderCellBulid: null,
onBeginEdit: null //开始编辑事件
};
$.ligerDefaults.GridString = {
errorMessage: '发生错误',
pageStatMessage: '显示从{from}到{to},总 {total} 条 。每页显示:{pagesize}',
pageTextMessage: 'Page',
loadingMessage: '加载中...',
findTextMessage: '查找',
noRecordMessage: '没有符合条件的记录存在',
isContinueByDataChanged: '数据已经改变,如果继续将丢失数据,是否继续?',
cancelMessage: '取消',
saveMessage: '保存',
applyMessage: '应用',
draggingMessage: '{count}行'
};
$.ligerDefaults.Grid_columns = {
id: null,
name: null,
totalSummary: null,
display: null,
headerRender: null,
isAllowHide: true,
isSort: false,
type: null,
columns: null,
width: 120,
minWidth: 80,
format: null,
align: 'left',
hide: false,
editor: null,
render: null,
textField: null //真正显示的字段名,如果设置了,在编辑状态时,会调用创建编辑器的setText和getText方法
};
$.ligerDefaults.Grid_editor = {
type: null,
ext: null,
onChange: null,
onChanged: null
};
//接口方法扩展
$.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)
{
if (!val1) return false;
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();
}
}
//引用类型,数据形式表现为[id,text]
$.ligerDefaults.Grid.formatters['ref'] = function (value)
{
if ($.isArray(value)) return value.length > 1 ? value[1] : value[0];
return value;
};
$.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 = $("<div class='l-editbox'></div>");
editContainer.width(120).height(p.rowHeight + 1);
editContainer.appendTo(container);
return editContainer;
});
function removeRow() {
$(container).parent().parent().remove();
g.collapseDetail(record);
}
$("<div class='l-clear'></div>").appendTo(container);
$("<div class='l-button'>" + p.saveMessage + "</div>").appendTo(container).click(function () {
g.endEdit(record);
removeRow();
});
$("<div class='l-button'>" + p.applyMessage + "</div>").appendTo(container).click(function () {
g.submitEdit(record);
});
$("<div class='l-button'>" + p.cancelMessage + "</div>").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;
};
}
//编辑构造器初始化
for (var type in liger.editors) {
var editor = liger.editors[type];
//如果没有默认的或者已经定义
if (!editor || type in p.editors) continue;
p.editors[type] = liger.getEditor($.extend({
type: type,
master: g
}, editor));
}
},
_render: function () {
var g = this, p = this.options;
g.grid = $(g.element);
g.grid.addClass("l-panel");
var gridhtmlarr = [];
gridhtmlarr.push(" <div class='l-panel-header'><span class='l-panel-header-text'></span></div>");
gridhtmlarr.push(" <div class='l-grid-loading'></div>");
gridhtmlarr.push(" <div class='l-panel-topbar' style='display:none'><div class='l-panel-topbarinner'></div></div><div class='l-clear'></div>");
gridhtmlarr.push(" <div class='l-panel-bwarp'>");
gridhtmlarr.push(" <div class='l-panel-body'>");
gridhtmlarr.push(" <div class='l-grid'>");
gridhtmlarr.push(" <div class='l-grid-dragging-line'></div>");
gridhtmlarr.push(" <div class='l-grid-popup'><table cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
gridhtmlarr.push(" <div class='l-grid1'>");
gridhtmlarr.push(" <div class='l-grid-header l-grid-header1'>");
gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-grid-body l-grid-body1'>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-grid2'>");
gridhtmlarr.push(" <div class='l-grid-header l-grid-header2'>");
gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-grid-body l-grid-body2 l-scroll'>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-panel-bar'>");
gridhtmlarr.push(" <div class='l-panel-bbar-inner'>");
gridhtmlarr.push(" <div class='l-bar-group l-bar-message'><span class='l-bar-text'></span></div>");
gridhtmlarr.push(" <div class='l-bar-group l-bar-selectpagesize'></div>");
gridhtmlarr.push(" <div class='l-bar-separator'></div>");
gridhtmlarr.push(" <div class='l-bar-group'>");
gridhtmlarr.push(" <div class='l-bar-button l-bar-btnfirst'><span></span></div>");
gridhtmlarr.push(" <div class='l-bar-button l-bar-btnprev'><span></span></div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-bar-separator'></div>");
gridhtmlarr.push(" <div class='l-bar-group'><span class='pcontrol'> <input type='text' size='4' value='1' style='width:20px' maxlength='3' /> / <span></span></span></div>");
gridhtmlarr.push(" <div class='l-bar-separator'></div>");
gridhtmlarr.push(" <div class='l-bar-group'>");
gridhtmlarr.push(" <div class='l-bar-button l-bar-btnnext'><span></span></div>");
gridhtmlarr.push(" <div class='l-bar-button l-bar-btnlast'><span></span></div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-bar-separator'></div>");
gridhtmlarr.push(" <div class='l-bar-group'>");
gridhtmlarr.push(" <div class='l-bar-button l-bar-btnload'><span></span></div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" <div class='l-bar-separator'></div>");
gridhtmlarr.push(" <div class='l-clear'></div>");
gridhtmlarr.push(" </div>");
gridhtmlarr.push(" </div>");
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-topbarinner: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);
//处理autoFilter
if (p.autoFilter) {
var item = {
text: '高级查询',
gridid: g.id,
click: function () {
g.showFilter();
},
icon: 'search2'
};
if (p.toolbar && p.toolbar.items) {
p.toolbar.items.push(item);
}
else {
p.toolbar = {
items: [item]
};
}
}
//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
g.cacheData = {}; //缓存数据
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);
},
_setToolbar: function (value) {
var g = this, p = this.options;
if (value && $.fn.ligerToolBar) {
g.topbar.parent().show();
g.toolbarManager = g.topbar.ligerToolBar(value);
if (value.title) {
var jtitle = $("<div class='l-panel-topbartitle'><span>" + value.title + "</span></div>");
if (value.icon) {
jtitle.append("<img class='l-panel-topbaricon' src='" + value.icon + "'></img>");
jtitle.addClass("l-panel-topbartitle-hasicon");
}
g.topbar.parent().append(jtitle);
}
if (p.toolbarShowInLeft) {
g.topbar.addClass("l-panel-topbarinner-left");
}
} else {
g.topbar.parent().remove();
}
},
isHorizontalScrollShowed: function () {
var g = this;
var inner = g.gridbody.find(".l-grid-body-inner:first");
if (!inner.length) return false;
//20为横向滚动条的宽度
return g.gridbody.width() - 20 < inner.width();
},
_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;
}
h = g._calculateGridBodyHeight(h);
if (h > 0) {
g.gridbody.height(h);
if (p.frozen) {
//解决冻结列和活动列由上至下滚动错位的问题
var w = g.gridbody.width(), w2 = $(":first-child", g.gridbody).width();
if (w2 && (w2 + 18 > w)) {
if (h > 18)
g.f.gridbody.height(h - 18);
} else {
g.f.gridbody.height(h);
}
}
var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1;
g.gridview.height(h + gridHeaderHeight);
}
g._updateHorizontalScrollStatus.ligerDefer(g, 10);
},
_calculateGridBodyHeight: function (h) {
var g = this, p = this.options;
if (typeof h == "string" && h.indexOf('%') > 0) {
if (p.inWindow)
h = $(window).height() * parseInt(h) * 0.01;
else
h = g.grid.parent().height() * parseInt(h) * 0.01;
}
if (p.title) h -= 24;
if (p.usePager && p.pagerRender || !p.scrollToPage) h -= g.toolbar.outerHeight();
if (p.totalRender) h -= 25;
if (p.toolbar) h -= g.topbar.outerHeight();
var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1;
h -= (gridHeaderHeight || 0);
return h;
},
_updateHorizontalScrollStatus: function () {
var g = this, p = this.options;
if (g.isHorizontalScrollShowed()) {
g.gridview.addClass("l-grid-hashorizontal");
}
else {
g.gridview.removeClass("l-grid-hashorizontal");
}
},
_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";
}
},
removeParm: function (name) {
var g = this;
var parms = g.get('parms');
if (!parms) parms = {};
if (parms instanceof Array) {
removeArrItem(parms, function (p) { return p.name == name; });
} else {
delete parms[name];
}
g.set('parms', parms);
},
setParm: function (name, value) {
var g = this;
var parms = g.get('parms');
if (!parms) parms = {};
if (parms instanceof Array) {
removeArrItem(parms, function (p) { return p.name == name; });
parms.push({ name: name, value: value });
} else {
parms[name] = value;
}
g.set('parms', parms);
},
_setData: function (value) {
this.loadData(this.options.data);
this.trigger('afterSetData');
},
//刷新数据
loadData: function (loadDataParm, sourceType) {
var g = this, p = this.options;
g.loading = true;
g.trigger('loadData');
var clause = null;
var loadServer = true;
if (typeof (loadDataParm) == "function") {
clause = loadDataParm;
if (g.lastData) {
g.data = g.lastData;
} else {
g.data = g.currentData;
if (!g.data) g.data = {};
if (!g.data[p.root]) g.data[p.root] = [];
g.lastData = g.data;
}
loadServer = false;
}
else if (typeof (loadDataParm) == "boolean") {
loadServer = loadDataParm;
}
else if (typeof (loadDataParm) == "object" && loadDataParm) {
loadServer = false;
p.dataType = "local";
p.data = loadDataParm;
}
else if (typeof (loadDataParm) == "number") {
p.newPage = loadDataParm;
}
//参数初始化
if (!p.newPage) p.newPage = 1;
if (p.dataAction == "server") {
if (!p.sortOrder) p.sortOrder = "asc";
}
var param = [];
if (p.parms) {
var parms = $.isFunction(p.parms) ? p.parms() : p.parms;
if (parms.length) {
$(parms).each(function () {
param.push({ name: this.name, value: this.value });
});
for (var i = parms.length - 1; i >= 0; i--) {
if (parms[i].temp)
parms.splice(i, 1);
}
}
else if (typeof parms == "object") {
for (var name in parms) {
param.push({ name: name, value: 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 = p.data || g.currentData;
//该语句修改了p.data, 导致过滤数据后, 丢失了初始数据.
g.filteredData = $.extend(true, {}, p.data || g.currentData);
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._convertTreeData();
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._convertTreeData();
g._showData();
}
}
else {
g.loadServerData(param, clause, sourceType);
//g.loadServerData.ligerDefer(g, 10, [param, clause]);
}
g.loading = false;
},
_convertTreeData: function () {
var g = this, p = this.options;
if (p.tree && p.tree.idField && p.tree.parentIDField) {
g.currentData[p.root] = g.arrayToTree(g.currentData[p.root], p.tree.idField, p.tree.parentIDField);
g.currentData[p.record] = g.currentData[p.root].length;
}
},
loadServerData: function (param, clause, sourceType) {
var g = this, p = this.options;
var url = p.url;
if ($.isFunction(url)) url = url.call(g);
var urlParms = $.isFunction(p.urlParms) ? p.urlParms.call(g) : p.urlParms;
if (urlParms) {
for (name in urlParms) {
url += url.indexOf('?') == -1 ? "?" : "&";
url += name + "=" + urlParms[name];
}
}
var ajaxOptions = {
type: p.method,
url: 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] = [];
if (data && data[p.record]) {
g.currentData[p.record] = g.data[p.record] = data[p.record];
} else {
g.currentData[p.record] = g.data[p.record] = 0;
}
g._convertTreeData();
g._showData(sourceType);
return;
}
g.data = data;
//保存缓存数据-记录总数
if (g.data[p.record] != null) {
g.cacheData.records = g.data[p.record];
}
if (p.dataAction == "server") //服务器处理好分页排序数据
{
g.currentData = g.data;
//读取缓存数据-记录总数(当没有返回总记录数)
if (g.currentData[p.record] == null && g.cacheData.records) {
g.currentData[p.record] = g.cacheData.records;
}
}
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._convertTreeData();
g._showData.ligerDefer(g, 10, [sourceType]);
},
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;
if (p.contentType == "application/json" && typeof (parms) != "string") {
ajaxOptions.data = converParmJson(param)
}
$.ajax(ajaxOptions);
function converParmJson(parm) {
if (!parm) return "null";
var o = parm, result = {};
if ($.isArray(o)) {
for (var i = 0; i < o.length; i++) {
result[o[i].name] = o[i].value;
}
} else {
result = o;
}
return liger.toJSON(result);
}
},
toggleLoading: function (show) {
this.gridloading[show ? 'show' : 'hide']();
},
_createEditor: function (editorBuilder, container, editParm, width, height) {
var editor = editorBuilder.create.call(this, container, editParm);
if (editorBuilder.setValue)
editorBuilder.setValue.call(this, editor, editParm.value, editParm);
if (editParm.column.editor && editParm.column.editor.initSelect) {
if (editor.element && $(editor.element).is(":text")) {
$(editor.element).select();
}
if (editor instanceof jQuery) {
if (editor.is(":text")) editor.select();
else editor.find(":text").select();
}
}
if (editorBuilder.setText && editParm.column.textField)
editorBuilder.setText.call(this, editor, editParm.text, editParm);
if (editorBuilder.resize)
editorBuilder.resize.call(this, editor, width, height, editParm);
return editor;
},
/*
@description 使一行进入编辑状态
@param {rowParm} rowindex或者rowdata
@param {containerBulider} 编辑器填充层构造器
*/
beginEdit: function (rowParm, containerBulider) {
var g = this, p = this.options;
if (!p.enabledEdit) 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: g._getValueByName(rowdata, column.name),
column: column,
rowindex: rowdata['__index'],
grid: g
};
var container = containerBulider(rowdata, column);
var width = container.width(), height = container.height();
var editorControl = g._createEditor(editor, container, editParm, width, height);
g.editors[rowdata['__id']][column['__id']] = {
editor: editor,
input: editorControl,
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('beforeCancelEdit', { 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, containerBulider) {
this.submitEdit();
rowdata = this.add(rowdata);
this.beginEdit(rowdata, containerBulider);
},
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 (!rowdata || !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 (column.textField && o.editor.getText) {
newdata[column.textField] = o.editor.getText(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 });
}
},
_enabledEditByCell: function (cell) {
var g = this, p = this.options;
var column = g.getColumn(cell);
if (!column) return false;
return column.editor && column.editor.type;
},
//结束当前的编辑 并进入下一个单元格的编辑状态(如果位于最后单元格,进入下一行第一个单元格)
endEditToNext: function () {
var g = this, p = this.options;
var editor = g.editor, jnext = null, jprev = null;
if (editor) {
var editParm = editor.editParm;
var column = editParm.column;
var columnIndex = $.inArray(column, g.columns);
var cell = g.getCellObj(editParm.record, editParm.column);
jprev = $(cell);
jnext = jprev.next();
if (!jnext.length) jnext = getNextRowCell();//已经是当前行最后一个单元格了
if (jnext.length) {
//获取到下一个可编辑的列
while (!g._enabledEditByCell(jnext.get(0))) {
jprev = jnext;
jnext = jnext.next();
if (!jnext.length)//已经是当前行最后一个单元格了
{
jnext = getNextRowCell();
}
}
}
//获取下一行第一个列对象
function getNextRowCell() {
return jprev.parent("tr").next(".l-grid-row").find("td:first");
}
}
g.endEdit();
if (jnext && jnext.length) {
g._applyEditor(jnext.get(0));
}
},
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);
}
}
g._fixHeight.ligerDefer(g, 10);
},
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) {
g._setValueByName(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;
}
o[p.statusName] = 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();
//当使用可编辑的grid带分组时第一行的prev对象是分组行不具备id等getRow方法中需要的信息
if (!prevrowobj.length
|| prevrowobj.length <= 0
|| prevrowobj[0].id == null
|| prevrowobj[0].id == "") {
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,
//只重渲染统计行
totalOnly = e.totalOnly;
if (column && (column.isdetail || column.ischeckbox)) return;
if (rowdata && rowdata[p.statusName] == "delete") return;
if (totalOnly) {
$(g.columns).each(function () {
reRenderTotal(this);
});
}
else 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 });
}
reRenderTotal(column);
}
else {
g._showData();
}
function reRenderTotal(column) {
if (!column.totalSummary) return;
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]));
}
}
},
getData: function (status, removeStatus) {
var g = this, p = this.options;
var data = [];
if (removeStatus == undefined) removeStatus = true;
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);
},
getChanges: function () {
//getChanges函数必须保留__status属性,否则根本不知道哪些是新增的,哪些是被删除的.
//则本函数返回的结果毫无意义.
var g = this, p = this.options;
var data = [];
if (this.deletedRows) {
$(this.deletedRows).each(function () {
var o = $.extend(true, {}, this);
data.push(g.formatRecord(o, false));
});
}
$.merge(data, g.getData("update", false));
$.merge(data, g.getData("add", false));
return data;
},
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;
},
getColumnByName: function (columnname) {
var g = this, p = this.options;
for (i = 0; i < g.columns.length; i++) {
if (g.columns[i].name == columnname) {
return g.columns[i];
}
}
return null;
},
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 (!g.sortedData || !g.sortedData[p.root])
return;
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") {
if (!p.parms) {
p.parms = [];
}
if ($.isArray(p.parms)) {
p.parms.push({ name: "changepage", value: "1", temp: true });
} else {
p.parms["changepage"] = "1";
}
g.loadData(p.where);
}
else {
g.currentData = g._getCurrentPageData(g.filteredData);
//增加以下一句调用: 在显示数据之前, 应该先调用转换tree的函数.
//否则会导致树的数据重复显示
if (p.tree) {
var childrenName = p.tree.childrenName;
$(g.filteredData[p.root]).each(function (index, item) {
if (item[childrenName])
item[childrenName] = [];
});
g._convertTreeData();
}
g._showData();
}
},
changePage2ToFirst: 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());
alert(nv);
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]);
},
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);
if (g.gridtablewidth) {
$("div:first", g.gridbody).width(g.gridtablewidth);
} else {
$("div:first", g.gridbody).css("width", "auto");
}
}
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._updateHorizontalScrollStatus.ligerDefer(g, 10);
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.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").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[p.statusName] == '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;
if (!g.currentData) g.currentData = {};
if (!g.currentData[p.root]) g.currentData[p.root] = [];
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;
},
collapseAll: function () {
var g = this, p = this.options;
$(g.rows).each(function (rowIndex, rowParm) {
var targetRowObj = g.getRowObj(rowParm);
var linkbtn = $(".l-grid-tree-link", targetRowObj);
if (linkbtn.hasClass("l-grid-tree-link-close")) return;
g.toggle(rowParm);
});
},
expandAll: function () {
var g = this, p = this.options;
$(g.rows).each(function (rowIndex, rowParm) {
var targetRowObj = g.getRowObj(rowParm);
var linkbtn = $(".l-grid-tree-link", targetRowObj);
if (linkbtn.hasClass("l-grid-tree-link-open")) return;
g.toggle(rowParm);
});
},
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 || [];
var isToExpanding = linkbtn.hasClass("l-grid-tree-link-close");
function toggleChildren(items) {
for (var i = 0, l = items.length; i < l; i++) {
var o = items[i];
var subchildren = g.getChildren(o, false);
var haschildren = subchildren && subchildren.length ? true : false;
var currentRow = $([g.getRowObj(o['__id'])]);
if (g.enabledFrozen()) currentRow = currentRow.add(g.getRowObj(o['__id'], true));
if (haschildren) {
//如果这个子节点原来是折叠状态的,那么子节点的子节点不做处理
if ($(".l-grid-tree-link", currentRow).hasClass("l-grid-tree-link-close")) {
currentRow.show();
}
//如果是展开状态的
else {
currentRow.show();
toggleChildren(subchildren);
}
}
else {
$(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
currentRow.show();
}
}
}
function update() {
var children = [];
//折叠,那么直接隐藏所有子节点即可
if (!opening) {
children = g.getChildren(rowdata, true);
$(children).each(function () {
$(g.getRowObj(this)).hide();
if (g.enabledFrozen()) $(g.getRowObj(this, true)).hide();
});
g.trigger('treeCollapsed', [rowdata]);
return;
}
//展开,下面逻辑处理(选择性递归)
children = g.getChildren(rowdata, false);
toggleChildren(children);
g.trigger('treeExpanded', [rowdata]);
}
if (isToExpanding) //收缩
{
function linkbtn_expand() {
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);
}
var e = {
update: function () {
linkbtn_expand();
update();
}
};
if (g.hasBind('treeExpand') && g.trigger('treeExpand', [rowdata, e]) == false) return false;
linkbtn_expand();
}
else //折叠
{
function linkbtn_collapse() {
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 e = {
update: function () {
linkbtn_collapse();
update();
}
};
if (g.hasBind('treeCollapse') && g.trigger('treeCollapse', [rowdata, e]) == false) return false;
opening = false;
linkbtn_collapse();
}
update();
},
_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("<img src='" + p.headerImg + "' />").addClass("l-panel-header-hasicon");
}
else {
g.header.hide();
}
if (p.toolbar) {
if ($.fn.ligerToolBar) {
g.toolbarManager = g.topbar.ligerToolBar(p.toolbar);
//原语句不知道为什么, toolbar的父div高度为0. 导致样式有问题.
if (g.topbar.height() == 0)
g.topbar.parent().height(25);
else
g.topbar.parent().height(g.topbar.height());
}
}
else {
g.topbar.parent().remove();
}
},
_createColumnId: function (column) {
if (column.id != null && column.id != "") 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) {
if (column.editorType) {
column.editor = column.editor || {};
column.editor.type = column.editorType;
}
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];
//增加以下一句. 因为在低版本IE中, 可能因为修改了prototype,
//导致这里取出undefined, 并进一步导致后续的函数调用出错.
if (!col) continue;
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 = column.width || p.columnWidth;
if (!colwidth || colwidth == "auto") {
var autoColumnNumber = 0, noAutoColumnWidth = 0;
$(g.columns).each(function (i, col) {
var colwidth = col.width || p.columnWidth;
var isAuto = (!colwidth || colwidth == "auto") ? true : false;
if (isAuto) autoColumnNumber++;
else noAutoColumnWidth += (parseInt(g._getColumnWidth(col)) + 1);
});
colwidth = parseInt((g.grid.width() - noAutoColumnWidth) / autoColumnNumber) - 1;
}
if (typeof (colwidth) == "string" && colwidth.indexOf('%') > 0) {
/*
* 修复行控件宽度被忽略的bug
*/
var lwidth = 0;
if (g.enabledDetail()) {
lwidth += p.detailColWidth;
}
if (g.enabledCheckbox()) {
lwidth += p.checkboxColWidth;
}
if (g.options.rownumbers) {
lwidth += g.options.rownumbersColWidth;
}
column._width = colwidth = parseInt(parseInt(colwidth) * 0.01 * (g.grid.width() - lwidth - (g.columns.length / 2) - 1));
}
if (column.minWidth && colwidth < column.minWidth) colwidth = column.minWidth;
if (column.maxWidth && colwidth > column.maxWidth) colwidth = column.maxWidth;
return colwidth;
},
_createHeaderCell: function (column) {
var g = this, p = this.options;
var jcell = $("<td class='l-grid-hd-cell'><div class='l-grid-hd-cell-inner'><span class='l-grid-hd-cell-text'></span></div></td>");
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("<div class='l-grid-hd-cell-inner'></div>");
}
if (column.ischeckbox) {
jcell.addClass("l-grid-hd-cell-checkbox");
jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-checkbox'></div></div>");
}
if (column.isdetail) {
jcell.addClass("l-grid-hd-cell-detail");
jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-detail'></div></div>");
}
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']);
var paddingTop = (p.headerRowHeight * column['__rowSpan'] - p.headerRowHeight) / 2 - 5;
$(".l-grid-hd-cell-inner:first", jcell).css("paddingTop", paddingTop);
} else {
jcell.height(p.headerRowHeight);
}
if (column['__leaf']) {
jcell.width(column['_width']);
jcell.attr("columnindex", column['__leafindex']);
}
var cellHeight = jcell.height();
if (!column['__rowSpan'] && cellHeight > 10) $(">div:first", jcell).height(cellHeight);
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 = "&nbsp;";
$(".l-grid-hd-cell-text:first", jcell).html(headerText);
if (!column.issystem && column['__leaf'] && column.resizable !== false && $.fn.ligerResizable && p.allowAdjustColWidth) {
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, parseInt(column._width) + e.diffX);
return false;
}
});
}
g.trigger('headerCellBulid', [jcell, column]);
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 = $("<tr class='l-grid-hd-row'></tr>");
var trf = $("<tr class='l-grid-hd-row'></tr>");
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('<tr><td class="l-column-left"><input type="checkbox" ' + chk + ' class="l-checkbox" columnindex="' + i + '"/></td><td class="l-column-right">' + header + '</td></tr>');
});
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) {
if (p.pagerRender) {
g.toolbar.html(p.pagerRender.call(g));
return;
}
if (p.scrollToPage) {
g.toolbar.hide();
return;
}
//创建底部工具条 - 选择每页显示记录数
var optStr = "";
var selectedIndex = -1;
$(p.pageSizeOptions).each(function (i, item) {
var selectedStr = "";
if (p.pageSize == item) selectedIndex = i;
optStr += "<option value='" + item + "' " + selectedStr + " >" + item + "</option>";
});
$('.l-bar-selectpagesize', g.toolbar).append("<select name='rp'>" + optStr + "</select>");
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;
g._fixRows();
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._fixRows();
//清空选择的行
g.selected = [];
g.totalNumber = 0;
//编辑器计算器
g.editorcounter = 0;
},
_fixRows: function () {
var g = this, p = this.options;
if (!g.rows) return;
for (var i in g.rows) {
if ($.isFunction(g.rows[i])) {
delete g.rows[i];
}
}
},
_fillGridBody: function (data, frozen, sourceType) {
var g = this, p = this.options;
//加载数据
var gridhtmlarr = sourceType == "scrollappend" ? [] : ['<div class="l-grid-body-inner"><table class="l-grid-body-table" cellpadding=0 cellspacing=0><tbody>'];
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('<tr class="l-grid-grouprow l-grid-grouprow-last l-grid-grouprow-first"');
if (i == groupsdata.length - 1)
gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last"');
else if (i == 0)
gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-first"');
else
gridhtmlarr.push('<tr class="l-grid-grouprow"');
gridhtmlarr.push(' groupindex"=' + i + '" >');
gridhtmlarr.push('<td colSpan="' + g.columns.length + '" class="l-grid-grouprow-cell">');
gridhtmlarr.push('<span class="l-grid-group-togglebtn">&nbsp;&nbsp;&nbsp;&nbsp;</span>');
if (p.groupRender)
gridhtmlarr.push(p.groupRender(groups[i], item, p.groupColumnDisplay));
else
gridhtmlarr.push(p.groupColumnDisplay + ':' + groups[i]);
gridhtmlarr.push('</td>');
gridhtmlarr.push('</tr>');
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));
}
if (!sourceType == "scrollappend") {
gridhtmlarr.push('</tbody></table></div>');
}
if (sourceType == "scrollappend") {
(frozen ? g.f.gridbody : g.gridbody).find("tbody:first").append(gridhtmlarr.join(''));
}
else {
(frozen ? g.f.gridbody : g.gridbody).html(gridhtmlarr.join(''));
}
if (frozen) {
g.f.gridbody.find(">l-jplace").remove();
g.f.gridbody.append('<div class="l-jplace"></div>');
}
if (p.usePager && p.scrollToPage && !p.scrollToAppend) {
var jgridbodyinner = frozen ? g.f.gridbody.find("> .l-grid-body-inner") : g.gridbody.find("> .l-grid-body-inner");
var jreplace = jgridbodyinner.find("> .l-scrollreplacetop");
jreplace = jreplace.length ? jreplace : $('<div class="l-scrollreplacetop"></div>').prependTo(jgridbodyinner);
jreplace.css("width", "80%").height(g.lastScrollTop);
jreplace = jgridbodyinner.find("> .l-scrollreplacebottom");
jreplace = jreplace.length ? jreplace : $('<div class="l-scrollreplacebottom"></div>').appendTo(jgridbodyinner);
jreplace.css("width", "80%").height((p.pageCount - p.newPage) * g._getOnePageHeight());
}
//分组时不需要
if (!g.enabledGroup()) {
//创建汇总行
g._bulidTotalSummary(frozen);
}
$("> div:first", g.gridbody).width(g.gridtablewidth);
g._onResize();
},
_showData: function (sourceType) {
var g = this, p = this.options;
g.changedCells = {};
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;
if (!p.scrollToPage) {
//更新分页
g._buildPager();
}
}
//加载中
$('.l-bar-btnloading:first', g.toolbar).removeClass('l-bar-btnloading');
if (g.trigger('beforeShowData', [g.currentData]) == false) return;
if (sourceType != "scrollappend") {
g._clearGrid();
}
g.isDataChanged = false;
if (!data || !data.length) {
g.gridview.addClass("l-grid-empty");
$(g.element).addClass("l-empty");
$("<div></div>").addClass("l-grid-body-inner").appendTo(g.gridbody).css({
width: g.gridheader.find(">div:first").width(),
height: g.gridbody.height()
});
if (p.pagerRender) {
g.toolbar.html(p.pagerRender.call(g));
return;
}
g._onResize.ligerDefer(g, 50);
return;
}
else {
g.gridview.removeClass("l-grid-empty");
$(g.element).removeClass("l-empty");
}
$(".l-bar-btnload:first span", g.toolbar).removeClass("l-disabled");
g._updateGridData();
if (g.enabledFrozen())
g._fillGridBody(g.rows, true, sourceType);
g._fillGridBody(g.rows, false, sourceType);
g.trigger('SysGridHeightChanged');
if (sourceType == "scroll") {
g.trigger('sysScrollLoaded');
}
if (p.totalRender) {
$(".l-panel-bar-total", g.element).remove();
$(".l-panel-bar", g.element).before('<div class="l-panel-bar-total">' + p.totalRender(g.data, g.filteredData) + '</div>');
}
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._fixHeight();
if (p.pagerRender) {
g.toolbar.html(p.pagerRender.call(g));
return;
}
g.gridbody.trigger('scroll.grid');
g.trigger('afterShowData', [g.currentData]);
},
_fixHeight: function () {
var g = this, p = this.options;
if (p.fixedCellHeight || !p.frozen) return;
var column1, column2;
for (var i in g.columns) {
var column = g.columns[i];
if (column1 && column2) break;
if (column.frozen && !column1) {
column1 = column;
continue;
}
if (!column.frozen && !column2) {
column2 = column;
continue;
}
}
if (!column1 || !column2) return;
for (var rowid in g.records) {
var cell1 = g.getCellObj(rowid, column1), cell2 = g.getCellObj(rowid, column2);
var height = Math.max($(cell1).height(), ($(cell2).height()));
$(cell1).add(cell2).height(height);
}
},
_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 i = 0, l = data.length; i < l; i++) {
var item = data[i];
var rowid = item['__id'];
if (!item) continue;
gridhtmlarr.push('<tr');
gridhtmlarr.push(' id="' + g._getRowDomId(item, frozen) + '"');
gridhtmlarr.push(' class="l-grid-row'); //class start
if (!frozen && g.enabledCheckbox() && p.isChecked && p.isChecked(item)) {
g.select(item);
gridhtmlarr.push(' l-selected');
}
else if (g.isSelected(item)) {
gridhtmlarr.push(' l-selected');
}
else if (p.isSelected && p.isSelected(item)) {
g.select(item);
gridhtmlarr.push(' l-selected');
}
if (item['__index'] % 2 == 1 && p.alternatingRow)
gridhtmlarr.push(' l-grid-row-alt');
//自定义css class
if (p.rowClsRender) {
var rowcls = p.rowClsRender(item, rowid);
rowcls && gridhtmlarr.push(' ' + rowcls);
}
gridhtmlarr.push('" '); //class end
if (p.rowAttrRender) gridhtmlarr.push(p.rowAttrRender(item, rowid));
if (p.tree && g.collapsedRows && g.collapsedRows.length) {
var isHide = function () {
var pitem = g.getParent(item);
while (pitem) {
if ($.inArray(pitem, g.collapsedRows) != -1) return true;
pitem = g.getParent(pitem);
}
return false;
};
if (isHide()) gridhtmlarr.push(' style="display:none;" ');
}
else if (p.tree && p.tree.isExtend) {
var isHide = function () {
var pitem = g.getParent(item);
while (pitem) {
if (p.tree.isExtend(pitem) == false) return true;
pitem = g.getParent(pitem);
}
return false;
};
if (isHide()) gridhtmlarr.push(' style="display:none;" ');
}
gridhtmlarr.push('>');
$(g.columns).each(function (columnindex, column) {
if (frozen != column.frozen) return;
gridhtmlarr.push('<td');
gridhtmlarr.push(' id="' + g._getCellDomId(item, this) + '"');
//如果是行序号(系统列)
if (this.isrownumber) {
gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-rownumbers" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
if (p.fixedCellHeight)
gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
else
gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
gridhtmlarr.push('>' + (parseInt(item['__index']) + 1) + '</div></td>');
return;
}
//如果是复选框(系统列)
if (this.ischeckbox) {
gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-checkbox" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
if (p.fixedCellHeight)
gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
else
gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
gridhtmlarr.push('>');
gridhtmlarr.push('<span class="l-grid-row-cell-btn-checkbox"></span>');
gridhtmlarr.push('</div></td>');
return;
}
//如果是明细列(系统列)
else if (this.isdetail) {
gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-detail" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
if (p.fixedCellHeight)
gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
else
gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
gridhtmlarr.push('>');
if (!p.isShowDetailToggle || p.isShowDetailToggle(item)) {
gridhtmlarr.push('<span class="l-grid-row-cell-detailbtn"></span>');
}
gridhtmlarr.push('</div></td>');
return;
}
var colwidth = this._width;
gridhtmlarr.push(' class="l-grid-row-cell ');
if (g.changedCells[rowid + "_" + this['__id']]) gridhtmlarr.push("l-grid-row-cell-edited ");
if (this.islast)
gridhtmlarr.push('l-grid-row-cell-last ');
gridhtmlarr.push('"');
//if (this.columnname) gridhtmlarr.push('columnname="' + this.columnname + '"');
gridhtmlarr.push(' style = "');
gridhtmlarr.push('width:' + colwidth + 'px; ');
if (column._hide) {
gridhtmlarr.push('display:none;');
}
gridhtmlarr.push(' ">');
gridhtmlarr.push(g._getCellHtml(item, column));
gridhtmlarr.push('</td>');
});
gridhtmlarr.push('</tr>');
}
return gridhtmlarr.join('');
},
_getCellHtml: function (rowdata, column) {
var g = this, p = this.options;
if (column.isrownumber)
return '<div class="l-grid-row-cell-inner">' + (parseInt(rowdata['__index']) + 1) + '</div>';
var htmlarr = [];
htmlarr.push('<div class="l-grid-row-cell-inner"');
//htmlarr.push('<div');
htmlarr.push(' style = "width:' + parseInt(column._width - 8) + 'px;');
if (p.fixedCellHeight) htmlarr.push('height:' + p.rowHeight + 'px;');
htmlarr.push('min-height:' + p.rowHeight + 'px; ');
if (column.align) htmlarr.push('text-align:' + column.align + ';');
var content = g._getCellContent(rowdata, column);
htmlarr.push('">' + content + '</div>');
return htmlarr.join('');
},
_setValueByName: function (data, name, value) {
if (!data || !name) return null;
if (name.indexOf('.') == -1) {
data[name] = value;
}
else {
try {
new Function("data,value", "data." + name + "=value;")(data, value);
}
catch (e) {
}
}
},
_getValueByName: function (data, name) {
if (!data || !name) return null;
if (name.indexOf('.') == -1) {
return data[name];
}
else {
try {
return new Function("data", "return data." + name + ";")(data);
}
catch (e) {
return null;
}
}
},
_getCellContent: function (rowdata, column) {
var g = this, p = this.options;
if (!rowdata || !column) return "";
if (column.isrownumber) return parseInt(rowdata['__index']) + 1;
var rowid = rowdata['__id'];
var rowindex = rowdata['__index'];
var value = g._getValueByName(rowdata, column.name);
var text = g._getValueByName(rowdata, column.textField);
var content = "";
if (column.render) {
content = column.render.call(g, rowdata, rowindex, value, column);
}
else if (p.formatters[column.type]) {
content = p.formatters[column.type].call(g, value, column);
}
else if (text != null) {
content = text.toString();
}
else if (value != null) {
content = value.toString();
}
if (p.tree && (p.tree.columnName != null && p.tree.columnName == column.name || p.tree.columnId != null && p.tree.columnId == column.id)) {
content = g._getTreeCellHtml(content, rowdata);
}
return content || "";
},
_getTreeCellHtml: function (oldContent, rowdata) {
var level = rowdata['__level'];
var g = this, p = this.options;
//var isExtend = p.tree.isExtend(rowdata);
var isExtend = g.collapsedRows == null ? p.tree.isExtend(rowdata) : $.inArray(rowdata, g.collapsedRows || []) == -1;
var isParent = p.tree.isParent(rowdata);
var content = "";
level = parseInt(level) || 1;
for (var i = 1; i < level; i++) {
content += "<div class='l-grid-tree-space'></div>";
}
if (isExtend && isParent)
content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-open'></div>";
else if (isParent)
content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-close'></div>";
else
content += "<div class='l-grid-tree-space'></div>";
content += "<span class='l-grid-tree-content'>" + oldContent + "</span>";
return content;
},
_applyEditor: function (obj) {
var g = this, p = this.options;
var rowcell = obj, ids = rowcell.id.split('|');
var columnid = ids[ids.length - 1], column = g._columns[columnid];
var row = $(rowcell).parent(), rowdata = g.getRow(row[0]), rowid = rowdata['__id'], rowindex = rowdata['__index'];
if (!column || !column.editor) return;
var columnname = column.name, columnindex = column.columnindex;
if (column.editor.type && p.editors[column.editor.type]) {
var currentdata = g._getValueByName(rowdata, columnname);
var editParm = { record: rowdata, value: currentdata, column: column, rowindex: rowindex };
if (column.textField) editParm.text = g._getValueByName(rowdata, column.textField);
if (g.trigger('beforeEdit', [editParm]) == false) return false;
g.lastEditRow = rowdata;
liger.lastEditGrid = g;
var editor = p.editors[column.editor.type],
jcell = $(rowcell), offset = $(rowcell).offset(),
width = $(rowcell).width(), height = $(rowcell).height(),
container = $("<div class='l-grid-editor'></div>").appendTo(g.grid),
left = 0,
top = 0,
pc = jcell.position(),
pb = g.gridbody.position(),
pv = g.gridview2.position(),
//加上括号解决不能正常判定topBar的高度。不加括号会忽略后面运算出来的值
topbarHeight = (p.toolbar ? g.topbar.parent().outerHeight() : 0) + (p.title ? g.header.outerHeight() : 0),
left = pc.left + pb.left + pv.left,
top = pc.top + pb.top + pv.top + topbarHeight;
jcell.html("");
g.setCellEditing(rowdata, column, true);
var isIE = (!!window.ActiveXObject || "ActiveXObject" in window) ? true : false,
isIE8 = $.browser.version.indexOf('8') == 0;
if (isIE) {
height -= isIE8 ? 1 : 2;
top -= 1;
left -= 1;
}
else if ($.browser.mozilla) {
height -= 1;
top -= 1;
left -= 1;
}
else if ($.browser.safari) {
top -= 1;
} else {
height -= 1;
}
left += p.editorLeftDiff || 0;
top += p.editorTopDiff || 0;
height += p.editorHeightDiff || 0;
container
.css({ left: left, top: top })
.show();
if (column.textField) editParm.text = g._getValueByName(rowdata, column.textField);
var editorInput = g._createEditor(editor, container, editParm, width, height - 1);
g.editor = { editing: true, editor: editor, input: editorInput, editParm: editParm, container: container };
g.unbind('sysEndEdit');
g.bind('sysEndEdit', function () {
var newValue = editor.getValue(editorInput, editParm);
if (column.textField && editor.getText) {
editParm.text = editor.getText(editorInput, editParm);
}
if (editor.getSelected) {
editParm.selected = editor.getSelected(editorInput, editParm);
}
if (newValue != currentdata) {
$(rowcell).addClass("l-grid-row-cell-edited");
g.changedCells[rowid + "_" + column['__id']] = true;
editParm.value = newValue;
}
if (column.editor.onChange) column.editor.onChange.call(editorInput, editParm);
if (g._checkEditAndUpdateCell(editParm)) {
if (column.editor.onChanged) column.editor.onChanged.call(editorInput, editParm);
}
});
g.trigger('beginEdit', [editParm]);
}
},
_checkEditAndUpdateCell: function (editParm) {
var g = this, p = this.options;
if (g.trigger('beforeSubmitEdit', [editParm]) == false) return false;
var column = editParm.column;
if (editParm.text && column.textField) g._setValueByName(editParm.record, column.textField, editParm.text);
g.updateCell(column, editParm.value, editParm.record);
if (column.render || g.enabledTotal()) g.reRender({ column: column });
g.reRender({ rowdata: editParm.record });
return true;
},
_getCurrentPageData: function (source) {
var g = this, p = this.options;
var data = {};
data[p.root] = [];
if (!source || !source[p.root] || !source[p.root].length) {
data[p.record] = 0;
return data;
}
data[p.record] = source[p.root].length;
if (!p.newPage) p.newPage = 1;
for (i = (p.newPage - 1) * p.pageSize; i < source[p.root].length && i < p.newPage * p.pageSize; i++) {
data[p.root].push(source[p.root][i]);
}
return data;
},
//比较某一列两个数据
_compareData: function (data1, data2, columnName, columnType) {
var g = this, p = this.options;
var val1 = data1[columnName], val2 = data2[columnName];
if (val1 == null && val2 != null) return 1;
else if (val1 == null && val2 == null) return 0;
else if (val1 != null && val2 == null) return -1;
if (p.sorters[columnType])
return p.sorters[columnType].call(g, val1, val2);
else
return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
},
_getTotalInfo: function (column, data) {
var g = this, p = this.options;
try {
var totalsummaryArr = [];
if (!column.totalSummary) return null;
var sum = 0, count = 0, avg = 0, min = 0, max = 0;
if (data && data.length) {
max = parseFloat(data[0][column.name]);
min = parseFloat(data[0][column.name]);
for (var i = 0; i < data.length; i++) {
if (data[i][p.statusName] == 'delete') continue;
count += 1;
var value = data[i][column.name];
if (typeof (value) == "string") value = value.replace(/\$|\,/g, '');
value = parseFloat(value);
if (!value) continue;
sum += value;
if (value > max) max = value;
if (value < min) min = value;
}
avg = sum * 1.0 / data.length;
}
return {
sum: sum,
count: count,
avg: avg,
min: min,
max: max
};
} catch (e) {
return {};
}
},
_getTotalCellContent: function (column, data) {
var g = this, p = this.options;
var totalsummaryArr = [];
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 info = g._getTotalInfo(column, data);
if (column.totalSummary.render) {
var renderhtml = column.totalSummary.render(info, column, g.data);
totalsummaryArr.push(renderhtml);
}
else if (column.totalSummary.type && info) {
var types = column.totalSummary.type.split(',');
if (isExist('sum'))
totalsummaryArr.push("<div>Sum=" + info.sum.toFixed(2) + "</div>");
if (isExist('tsum'))
totalsummaryArr.push("<div>" + sum.toFixed(0) + "</div>");
if (isExist('count'))
totalsummaryArr.push("<div>Count=" + info.count + "</div>");
if (isExist('max'))
totalsummaryArr.push("<div>Max=" + info.max.toFixed(2) + "</div>");
if (isExist('min'))
totalsummaryArr.push("<div>Min=" + info.min.toFixed(2) + "</div>");
if (isExist('avg'))
totalsummaryArr.push("<div>Avg=" + info.avg.toFixed(2) + "</div>");
}
}
return totalsummaryArr.join('');
},
_getTotalSummaryHtml: function (data, classCssName, frozen) {
var g = this, p = this.options;
var totalsummaryArr = [];
if (classCssName)
totalsummaryArr.push('<tr class="l-grid-totalsummary ' + classCssName + '">');
else
totalsummaryArr.push('<tr class="l-grid-totalsummary">');
$(g.columns).each(function (columnindex, column) {
if (this.frozen != frozen) return;
//如果是行序号(系统列)
if (this.isrownumber) {
totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-rownumbers" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
return;
}
//如果是复选框(系统列)
if (this.ischeckbox) {
totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-checkbox" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
return;
}
//如果是明细列(系统列)
else if (this.isdetail) {
totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-detail" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
return;
}
totalsummaryArr.push('<td class="l-grid-totalsummary-cell');
if (this.islast)
totalsummaryArr.push(" l-grid-totalsummary-cell-last");
totalsummaryArr.push('" ');
totalsummaryArr.push('id="' + g.id + "|total" + g.totalNumber + "|" + column.__id + '" ');
totalsummaryArr.push('width="' + this._width + '" ');
columnname = this.columnname;
if (columnname) {
totalsummaryArr.push('columnname="' + columnname + '" ');
}
totalsummaryArr.push('columnindex="' + columnindex + '" ');
totalsummaryArr.push('><div class="l-grid-totalsummary-cell-inner"');
if (column.align)
totalsummaryArr.push(' style="text-Align:' + column.align + ';"');
totalsummaryArr.push('>');
totalsummaryArr.push(g._getTotalCellContent(column, data));
totalsummaryArr.push('</div></td>');
});
totalsummaryArr.push('</tr>');
if (!frozen) g.totalNumber++;
return totalsummaryArr.join('');
},
_bulidTotalSummary: function (frozen) {
var g = this, p = this.options;
if (!g.isTotalSummary()) return false;
if (!g.currentData || g.currentData[p.root].length == 0) return false;
var totalRow = $(g._getTotalSummaryHtml(g.currentData[p.root], null, frozen));
$("tbody:first", frozen ? g.f.gridbody : g.gridbody).append(totalRow);
if (frozen) g.totalRow1 = totalRow;
else g.totalRow2 = totalRow;
},
updateTotalSummary: function () {
var g = this, p = this.options;
g.reRender({ totalOnly: true });
},
_buildPager: function () {
var g = this, p = this.options;
if (p.pagerRender) {
return;
}
$('.pcontrol input', g.toolbar).val(p.page);
if (!p.pageCount) p.pageCount = 1;
$('.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) p.total = 0;
if (p.total < r2) r2 = p.total;
if (!p.total) r1 = r2 = 0;
if (r1 < 0) r1 = 0;
if (r2 < 0) r2 = 0;
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);
$('.l-bar-text', g.toolbar).html(stat);
if (!p.total) {
$(".l-bar-btnfirst span,.l-bar-btnprev span,.l-bar-btnnext span,.l-bar-btnlast span", g.toolbar)
.addClass("l-disabled");
}
if (p.hideLoadButton) {
$('.l-bar-btnload:first', g.toolbar).parent().hide();
$('.l-bar-btnload:first', g.toolbar).parent().next().hide();
}
if (p.page == 1) {
$(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
$(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
}
else if (p.page > p.pageCount && p.pageCount > 0) {
$(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
$(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
}
if (p.page == p.pageCount) {
$(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
$(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
}
else if (p.page < p.pageCount && p.pageCount > 0) {
$(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
$(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
}
},
_getRowIdByDomId: function (domid) {
var ids = domid.split('|');
var rowid = ids[2];
return rowid;
},
_getRowByDomId: function (domid) {
return this.records[this._getRowIdByDomId(domid)];
},
//在外部点击的时候判断是否在编辑状态比如弹出的层点击的如果自定义了编辑器而且生成的层没有包括在grid内部建议重载
_isEditing: function (jobjs) {
var g = this;
if (jobjs.hasClass("l-box-dateeditor") || jobjs.hasClass("l-box-select")) return true;
//判断是否位于编辑器弹出的框
if (jobjs.hasClass("l-dialog")) {
var ids = [];
jobjs.find(".l-dialog").each(function () {
var curId = $(this).attr("ligeruiid");
if (curId) {
ids.push(curId);
}
});
if (g._editorIncludeCotrols(ids)) {
return true;
}
}
return false;
},
_getSrcElementByEvent: function (e) {
var g = this;
var obj = (e.target || e.srcElement);
var jobjs = $(obj).parents().add(obj);
var fn = function (parm) {
for (var i = 0, l = jobjs.length; i < l; i++) {
if (typeof parm == "string") {
if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
}
else if (typeof parm == "object") {
if (jobjs[i] == parm) return jobjs[i];
}
}
return null;
};
if (fn("l-grid-editor")) return { editing: true, editor: fn("l-grid-editor") };
if (jobjs.index(this.element) == -1) {
if (g._isEditing(jobjs)) return { editing: true };
else return { out: true };
}
var indetail = false;
if (jobjs.hasClass("l-grid-detailpanel") && g.detailrows) {
for (var i = 0, l = g.detailrows.length; i < l; i++) {
if (jobjs.index(g.detailrows[i]) != -1) {
indetail = true;
break;
}
}
}
var r = {
grid: fn("l-panel"),
indetail: indetail,
frozen: fn(g.gridview1[0]) ? true : false,
header: fn("l-panel-header"), //标题
gridheader: fn("l-grid-header"), //表格头
gridbody: fn("l-grid-body"),
total: fn("l-panel-bar-total"), //总汇总
popup: fn("l-grid-popup"),
toolbar: fn("l-panel-bar")
};
if (r.gridheader) {
r.hrow = fn("l-grid-hd-row");
r.hcell = fn("l-grid-hd-cell");
r.hcelltext = fn("l-grid-hd-cell-text");
r.checkboxall = fn("l-grid-hd-cell-checkbox");
if (r.hcell) {
var columnid = r.hcell.id.split('|')[2];
r.column = g._columns[columnid];
}
}
if (r.gridbody) {
r.row = fn("l-grid-row");
r.cell = fn("l-grid-row-cell");
r.checkbox = fn("l-grid-row-cell-btn-checkbox");
r.groupbtn = fn("l-grid-group-togglebtn");
r.grouprow = fn("l-grid-grouprow");
r.detailbtn = fn("l-grid-row-cell-detailbtn");
r.detailrow = fn("l-grid-detailpanel");
r.totalrow = fn("l-grid-totalsummary");
r.totalcell = fn("l-grid-totalsummary-cell");
r.rownumberscell = $(r.cell).hasClass("l-grid-row-cell-rownumbers") ? r.cell : null;
r.detailcell = $(r.cell).hasClass("l-grid-row-cell-detail") ? r.cell : null;
r.checkboxcell = $(r.cell).hasClass("l-grid-row-cell-checkbox") ? r.cell : null;
r.treelink = fn("l-grid-tree-link");
r.editor = fn("l-grid-editor");
if (r.row) r.data = this._getRowByDomId(r.row.id);
if (r.cell) r.editing = $(r.cell).hasClass("l-grid-row-cell-editing");
if (r.editor) r.editing = true;
if (r.editing) r.out = false;
}
if (r.toolbar) {
r.first = fn("l-bar-btnfirst");
r.last = fn("l-bar-btnlast");
r.next = fn("l-bar-btnnext");
r.prev = fn("l-bar-btnprev");
r.load = fn("l-bar-btnload");
r.button = fn("l-bar-button");
}
return r;
},
_editorIncludeCotrols: function (ids) {
var g = this, p = this.options;
if (!ids || !ids.length) return false;
if (g.editor && g.editor.input) {
if (g._controlIncludeCotrols(g.editor.input, ids)) return true;
}
else if (g.editors) {
for (var a in g.editors) {
if (!g.editors[a]) continue;
for (var b in g.editors[a]) {
var editor = g.editors[a][b];
if (editor && editor.input) {
if (g._controlIncludeCotrols(editor.input, ids)) return true;
}
}
}
}
return false;
},
_controlIncludeCotrols: function (control, ids) {
var g = this, p = this.options;
if (!control || !control.includeControls || !control.includeControls.length) return false;
for (var i = 0; i < control.includeControls.length; i++) {
var sub = control.includeControls[i];
if ($.inArray(sub.id, ids) != -1) return true;
}
return false;
},
_getOnePageHeight: function () {
var g = this, p = this.options;
return (parseFloat(p.rowHeight || 24) + 1) * parseInt(p.pageSize);
},
_setEvent: function () {
var g = this, p = this.options;
g.grid.bind("mousedown.grid", function (e) {
g._onMouseDown.call(g, e);
});
g.grid.bind("dblclick.grid", function (e) {
g._onDblClick.call(g, e);
});
g.grid.bind("contextmenu.grid", function (e) {
return g._onContextmenu.call(g, e);
});
$(document).bind("mouseup.grid", function (e) {
g._onMouseUp.call(g, e);
});
$(document).bind("click.grid", function (e) {
g._onClick.call(g, e);
});
$(window).bind("resize.grid", function (e) {
g._onResize.call(g);
});
$(document).bind("keydown.grid", function (e) {
if (e.ctrlKey) g.ctrlKey = true;
});
$(document).bind("keyup.grid", function (e) {
delete g.ctrlKey;
});
//表体 - 滚动联动事件
g.gridbody.bind('scroll.grid', function () {
var scrollLeft = g.gridbody.scrollLeft();
var scrollTop = g.gridbody.scrollTop();
if (scrollLeft != null)
g.gridheader[0].scrollLeft = scrollLeft;
if (scrollTop != null)
g.f.gridbody[0].scrollTop = scrollTop;
if (p.scrollToPage && p.usePager && !g.loading) {
var innerHeight = g.gridbody.find(".l-grid-body-inner:first").height();
var toHeight = scrollTop + g.gridbody.height();
if (p.scrollToAppend) {
if (p.newPage != p.pageCount) {
if (toHeight >= innerHeight) {
g.reload(p.newPage + 1, "scrollappend");
}
}
} else {
var topage = toHeight >= innerHeight ? p.pageCount : Math.ceil(toHeight / g._getOnePageHeight());
if (!g.scrollLoading) {
g.scrollLoading = true;
g.lastScrollTop = scrollTop;
g.unbind("sysScrollLoaded");
g.bind("sysScrollLoaded", function () {
g.gridbody.scrollTop(scrollTop);
setTimeout(function () {
g.scrollLoading = false;
}, 500);
});
g.scrollLoading = true;
g.reload(topage, "scroll");
}
}
}
g.trigger('SysGridHeightChanged');
});
//工具条 - 切换每页记录数事件
$('select', g.toolbar).change(function () {
if (g.isDataChanged && p.dataAction != "local" && !confirm(p.isContinueByDataChanged))
return false;
p.newPage = 1;
p.pageSize = this.value;
g.loadData(p.dataAction != "local" ? p.where : false);
});
//工具条 - 切换当前页事件
$('span.pcontrol :text', g.toolbar).blur(function (e) {
g.changePage('input');
});
$("div.l-bar-button", g.toolbar).hover(function () {
$(this).addClass("l-bar-button-over");
}, function () {
$(this).removeClass("l-bar-button-over");
});
//列拖拽支持
if ($.fn.ligerDrag && p.colDraggable) {
g.colDroptip = $("<div class='l-drag-coldroptip' style='display:none'><div class='l-drop-move-up'></div><div class='l-drop-move-down'></div></div>").appendTo('body');
g.gridheader.add(g.f.gridheader).ligerDrag({
revert: true, animate: false,
proxyX: 0, proxyY: 0,
proxy: function (draggable, e) {
var src = g._getSrcElementByEvent(e);
if (src.hcell && src.column) {
var content = $(".l-grid-hd-cell-text:first", src.hcell).html();
var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
proxy.append(content);
return proxy;
}
},
onRevert: function () { return false; },
onRendered: function () {
this.set('cursor', 'default');
g.children[this.id] = this;
},
onStartDrag: function (current, e) {
if (e.button == 2) return false;
if (g.colresizing) return false;
this.set('cursor', 'default');
var src = g._getSrcElementByEvent(e);
if (!src.hcell || !src.column || src.column.issystem || src.hcelltext) return false;
if ($(src.hcell).css('cursor').indexOf('resize') != -1) return false;
this.draggingColumn = src.column;
g.coldragging = true;
var gridOffset = g.grid.offset();
this.validRange = {
top: gridOffset.top,
bottom: gridOffset.top + g.gridheader.height(),
left: gridOffset.left - 10,
right: gridOffset.left + g.grid.width() + 10
};
},
onDrag: function (current, e) {
this.set('cursor', 'default');
var column = this.draggingColumn;
if (!column) return false;
if (g.colresizing) return false;
if (g.colDropIn == null)
g.colDropIn = -1;
var pageX = e.pageX;
var pageY = e.pageY;
var visit = false;
var gridOffset = g.grid.offset();
var validRange = this.validRange;
if (pageX < validRange.left || pageX > validRange.right
|| pageY > validRange.bottom || pageY < validRange.top) {
g.colDropIn = -1;
g.colDroptip.hide();
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
return;
}
for (var colid in g._columns) {
var col = g._columns[colid];
if (column == col) {
visit = true;
continue;
}
if (col.issystem) continue;
var sameLevel = col['__level'] == column['__level'];
var isAfter = !sameLevel ? false : visit ? true : false;
if (column.frozen != col.frozen) isAfter = col.frozen ? false : true;
if (g.colDropIn != -1 && g.colDropIn != colid) continue;
var cell = document.getElementById(col['__domid']);
var offset = $(cell).offset();
var range = {
top: offset.top,
bottom: offset.top + $(cell).height(),
left: offset.left - 10,
right: offset.left + 10
};
if (isAfter) {
var cellwidth = $(cell).width();
range.left += cellwidth;
range.right += cellwidth;
}
if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom) {
var height = p.headerRowHeight;
if (col['__rowSpan']) height *= col['__rowSpan'];
g.colDroptip.css({
left: range.left + 5,
top: range.top - 9,
height: height + 9 * 2
}).show();
g.colDropIn = colid;
g.colDropDir = isAfter ? "right" : "left";
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no").addClass("l-drop-yes");
break;
}
else if (g.colDropIn != -1) {
g.colDropIn = -1;
g.colDroptip.hide();
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
}
}
},
onStopDrag: function (current, e) {
var column = this.draggingColumn;
g.coldragging = false;
if (g.colDropIn != -1) {
g.changeCol.ligerDefer(g, 0, [column, g.colDropIn, g.colDropDir == "right"]);
g.colDropIn = -1;
}
g.colDroptip.hide();
this.set('cursor', 'default');
}
});
}
//行拖拽支持
if ($.fn.ligerDrag && p.rowDraggable) {
g.rowDroptip = $("<div class='l-drag-rowdroptip' style='display:none'></div>").appendTo('body');
g.gridbody.add(g.f.gridbody).ligerDrag({
revert: true, animate: false,
proxyX: 0, proxyY: 0,
proxy: function (draggable, e) {
var src = g._getSrcElementByEvent(e);
if (src.row) {
var content = p.draggingMessage.replace(/{count}/, draggable.draggingRows ? draggable.draggingRows.length : 1);
if (p.rowDraggingRender) {
content = p.rowDraggingRender(draggable.draggingRows, draggable, g);
}
var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
return proxy;
}
},
onRevert: function () { return false; },
onRendered: function () {
this.set('cursor', 'default');
g.children[this.id] = this;
},
onStartDrag: function (current, e) {
if (e.button == 2) return false;
if (g.colresizing) return false;
if (!g.columns.length) return false;
this.set('cursor', 'default');
var src = g._getSrcElementByEvent(e);
if (!src.cell || !src.data || src.checkbox) return false;
var ids = src.cell.id.split('|');
var column = g._columns[ids[ids.length - 1]];
if (src.rownumberscell || src.detailcell || src.checkboxcell || column == g.columns[0]) {
if (g.enabledCheckbox()) {
this.draggingRows = g.getSelecteds();
if (!this.draggingRows || !this.draggingRows.length) return false;
}
else {
this.draggingRows = [src.data];
}
this.draggingRow = src.data;
this.set('cursor', 'move');
g.rowdragging = true;
this.validRange = {
top: g.gridbody.offset().top,
bottom: g.gridbody.offset().top + g.gridbody.height(),
left: g.grid.offset().left - 10,
right: g.grid.offset().left + g.grid.width() + 10
};
}
else {
return false;
}
},
onDrag: function (current, e) {
var rowdata = this.draggingRow;
if (!rowdata) return false;
var rows = this.draggingRows ? this.draggingRows : [rowdata];
if (g.colresizing) return false;
if (g.rowDropIn == null) g.rowDropIn = -1;
var pageX = e.pageX;
var pageY = e.pageY;
var visit = false;
var validRange = this.validRange;
if (pageX < validRange.left || pageX > validRange.right
|| pageY > validRange.bottom || pageY < validRange.top) {
g.rowDropIn = -1;
g.rowDroptip.hide();
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
return;
}
for (var i in g.rows) {
var rd = g.rows[i];
var rowid = rd['__id'];
if (rowdata == rd) visit = true;
if ($.inArray(rd, rows) != -1) continue;
var isAfter = visit ? true : false;
if (g.rowDropIn != -1 && g.rowDropIn != rowid) continue;
var rowobj = g.getRowObj(rowid);
var offset = $(rowobj).offset();
var range = {
top: offset.top - 4,
bottom: offset.top + $(rowobj).height() + 4,
left: g.grid.offset().left,
right: g.grid.offset().left + g.grid.width()
};
if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom) {
var lineTop = offset.top;
if (isAfter) lineTop += $(rowobj).height();
g.rowDroptip.css({
left: range.left,
top: lineTop,
width: range.right - range.left
}).show();
g.rowDropIn = rowid;
g.rowDropDir = isAfter ? "bottom" : "top";
if (p.tree && pageY > range.top + 5 && pageY < range.bottom - 5) {
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
g.rowDroptip.hide();
g.rowDropInParent = true;
}
else {
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
g.rowDroptip.show();
g.rowDropInParent = false;
}
break;
}
else if (g.rowDropIn != -1) {
g.rowDropIn = -1;
g.rowDropInParent = false;
g.rowDroptip.hide();
this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
}
}
},
onStopDrag: function (current, e) {
var rows = this.draggingRows;
g.rowdragging = false;
for (var i = 0; i < rows.length; i++) {
var children = rows[i].children;
if (children) {
rows = $.grep(rows, function (node, i) {
var isIn = $.inArray(node, children) == -1;
return isIn;
});
}
}
if (g.rowDropIn != -1) {
if (p.tree) {
var neardata, prow;
if (g.rowDropInParent) {
prow = g.getRow(g.rowDropIn);
}
else {
neardata = g.getRow(g.rowDropIn);
prow = g.getParent(neardata);
}
g.appendRange(rows, prow, neardata, g.rowDropDir != "bottom");
g.trigger('rowDragDrop', {
rows: rows,
parent: prow,
near: neardata,
after: g.rowDropDir == "bottom"
});
}
else {
g.moveRange(rows, g.rowDropIn, g.rowDropDir == "bottom");
g.trigger('rowDragDrop', {
rows: rows,
parent: prow,
near: g.getRow(g.rowDropIn),
after: g.rowDropDir == "bottom"
});
}
g.rowDropIn = -1;
}
g.rowDroptip.hide();
this.set('cursor', 'default');
}
});
}
},
_onRowOver: function (rowParm, over) {
if (l.draggable.dragging) return;
var g = this, p = this.options;
var rowdata = g.getRow(rowParm);
var methodName = over ? "addClass" : "removeClass";
if (over && g.editor.editing) {
$("tr." + p.mouseoverRowCssClass, g.gridview).removeClass(p.mouseoverRowCssClass);
}
if (g.enabledFrozen())
$(g.getRowObj(rowdata, true))[methodName](p.mouseoverRowCssClass);
$(g.getRowObj(rowdata, false))[methodName](p.mouseoverRowCssClass);
},
_onMouseUp: function (e) {
var g = this, p = this.options;
if (l.draggable.dragging) {
var src = g._getSrcElementByEvent(e);
//drop in header cell
if (src.hcell && src.column) {
g.trigger('dragdrop', [{ type: 'header', column: src.column, cell: src.hcell }, e]);
}
else if (src.row) {
g.trigger('dragdrop', [{ type: 'row', record: src.data, row: src.row }, e]);
}
}
},
_onMouseDown: function (e) {
var g = this, p = this.options;
},
_onContextmenu: function (e) {
var g = this, p = this.options;
var src = g._getSrcElementByEvent(e);
if (src.row) {
if (p.whenRClickToSelect)
g.select(src.data);
if (g.hasBind('contextmenu')) {
return g.trigger('contextmenu', [{ data: src.data, rowindex: src.data['__index'], row: src.row }, e]);
}
}
else if (src.hcell) {
if (!p.allowHideColumn) return true;
var columnindex = $(src.hcell).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 -= 50;
g.popup.css({ left: left, top: g.gridheader.height() + 1 });
g.popup.toggle();
return false;
}
},
_onDblClick: function (e) {
var g = this, p = this.options;
var src = g._getSrcElementByEvent(e);
if (src.row) {
g.trigger('dblClickRow', [src.data, src.data['__id'], src.row]);
}
},
_onClick: function (e) {
var obj = (e.target || e.srcElement);
var g = this, p = this.options;
var src = g._getSrcElementByEvent(e);
if (src.out) {
if (g.editor.editing && !$.ligerui.win.masking) g.endEdit();
if (p.allowHideColumn) g.popup.hide();
return;
}
if (src.indetail || src.editing) {
return;
}
if (g.editor.editing) {
g.endEdit();
}
if (p.allowHideColumn) {
if (!src.popup) {
g.popup.hide();
}
}
if (src.checkboxall) //复选框全选
{
var row = $(src.hrow);
var uncheck = row.hasClass("l-checked");
if (g.trigger('beforeCheckAllRow', [!uncheck, g.element]) == false) return false;
if (uncheck) {
row.removeClass("l-checked");
}
else {
row.addClass("l-checked");
}
g.selected = [];
for (var rowid in g.records) {
if (uncheck)
g.unselect(g.records[rowid]);
else
g.select(g.records[rowid]);
}
g.trigger('checkAllRow', [!uncheck, g.element]);
}
else if (src.hcelltext) //排序
{
var hcell = $(src.hcelltext).parent().parent();
if (!p.enabledSort || !src.column) return;
if (src.column.isSort == false) return;
if (p.url && p.dataAction != "local" && g.isDataChanged && !confirm(p.isContinueByDataChanged)) return;
var sort = $(".l-grid-hd-cell-sort:first", hcell);
var columnName = src.column.name;
if (!columnName) return;
if (sort.length > 0) {
if (sort.hasClass("l-grid-hd-cell-sort-asc")) {
sort.removeClass("l-grid-hd-cell-sort-asc").addClass("l-grid-hd-cell-sort-desc");
hcell.removeClass("l-grid-hd-cell-asc").addClass("l-grid-hd-cell-desc");
g.trigger('ChangeSort', [columnName, 'desc']);
g.changeSort(columnName, 'desc');
}
else if (sort.hasClass("l-grid-hd-cell-sort-desc")) {
sort.removeClass("l-grid-hd-cell-sort-desc").addClass("l-grid-hd-cell-sort-asc");
hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
g.trigger('ChangeSort', [columnName, 'asc']);
g.changeSort(columnName, 'asc');
}
}
else {
hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
$(src.hcelltext).after("<span class='l-grid-hd-cell-sort l-grid-hd-cell-sort-asc'>&nbsp;&nbsp;</span>");
g.trigger('ChangeSort', [columnName, 'asc']);
g.changeSort(columnName, 'asc');
}
$(".l-grid-hd-cell-sort", g.gridheader).add($(".l-grid-hd-cell-sort", g.f.gridheader)).not($(".l-grid-hd-cell-sort:first", hcell)).remove();
}
//明细
else if (src.detailbtn && p.detail) {
var item = src.data;
var row = $([g.getRowObj(item, false)]);
if (g.enabledFrozen()) row = row.add(g.getRowObj(item, true));
var rowid = item['__id'];
if ($(src.detailbtn).hasClass("l-open")) {
if (p.detail.onCollapse)
p.detail.onCollapse(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
row.next("tr.l-grid-detailpanel").hide();
$(src.detailbtn).removeClass("l-open");
}
else {
var nextrow = row.next("tr.l-grid-detailpanel");
if (nextrow.length > 0) {
nextrow.show();
if (p.detail.onExtend)
p.detail.onExtend(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
$(src.detailbtn).addClass("l-open");
g.trigger('SysGridHeightChanged');
return;
}
$(src.detailbtn).addClass("l-open");
var frozenColNum = 0;
for (var i = 0; i < g.columns.length; i++)
if (g.columns[i].frozen) frozenColNum++;
var detailRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
var detailFrozenRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
detailRow.find("div:first").width(g.gridheader.find("div:first").width() - 50);
detailRow.attr("id", g.id + "|detail|" + rowid);
g.detailrows = g.detailrows || [];
g.detailrows.push(detailRow[0]);
g.detailrows.push(detailFrozenRow[0]);
var detailRowInner = $("div:first", detailRow);
detailRowInner.parent().attr("colSpan", g.columns.length - frozenColNum);
row.eq(0).after(detailRow);
if (frozenColNum > 0) {
detailFrozenRow.find("td:first").attr("colSpan", frozenColNum);
row.eq(1).after(detailFrozenRow);
}
if (p.detail.onShowDetail) {
p.detail.onShowDetail(item, detailRowInner[0], function () {
g.trigger('SysGridHeightChanged');
});
$("div:first", detailFrozenRow).add(detailRowInner).show().height(p.detail.height || p.detailHeight);
}
else if (p.detail.render) {
detailRowInner.append(p.detail.render());
detailRowInner.show();
}
g.trigger('SysGridHeightChanged');
}
}
else if (src.groupbtn) {
var grouprow = $(src.grouprow);
var opening = true;
if ($(src.groupbtn).hasClass("l-grid-group-togglebtn-close")) {
$(src.groupbtn).removeClass("l-grid-group-togglebtn-close");
if (grouprow.hasClass("l-grid-grouprow-last")) {
$("td:first", grouprow).width('auto');
}
}
else {
opening = false;
$(src.groupbtn).addClass("l-grid-group-togglebtn-close");
if (grouprow.hasClass("l-grid-grouprow-last")) {
$("td:first", grouprow).width(g.gridtablewidth);
}
}
var currentRow = grouprow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
while (true) {
if (currentRow.length == 0) break;
if (opening) {
currentRow.show();
//如果是明细展开的行,并且之前的状态已经是关闭的,隐藏之
if (currentRow.hasClass("l-grid-detailpanel") && !currentRow.prev().find("td.l-grid-row-cell-detail:first span.l-grid-row-cell-detailbtn:first").hasClass("l-open")) {
currentRow.hide();
}
}
else {
currentRow.hide();
}
currentRow = currentRow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
}
g.trigger(opening ? 'groupExtend' : 'groupCollapse');
g.trigger('SysGridHeightChanged');
}
//树 - 伸展/收缩节点
else if (src.treelink) {
g.toggle(src.data);
}
else if (src.row && g.enabledCheckbox()) //复选框选择行
{
g.trigger('clickRow', [src.data, src.data['__id'], src.row]);
//复选框
var selectRowButtonOnly = p.selectRowButtonOnly ? true : false;
if (p.enabledEdit) selectRowButtonOnly = true;
if (obj.tagName.toLowerCase() == "a") return;
if ((src.checkbox || !selectRowButtonOnly) && p.selectable != false) {
var row = $(src.row);
var uncheck = row.hasClass("l-selected");
if (g.trigger('beforeCheckRow', [!uncheck, src.data, src.data['__id'], src.row]) == false)
return false;
var met = uncheck ? 'unselect' : 'select';
g[met](src.data);
if (p.tree && p.autoCheckChildren) {
var children = g.getChildren(src.data, true);
for (var i = 0, l = children.length; i < l; i++) {
g[met](children[i]);
}
}
g.trigger('checkRow', [!uncheck, src.data, src.data['__id'], src.row]);
}
if (!src.checkbox && src.cell && p.enabledEdit && p.clickToEdit) {
g._applyEditor(src.cell);
}
}
else if (src.row && !g.enabledCheckbox() && p.selectable != false) {
//源代码
//g.trigger('clickRow', [src.data, src.data['__id'], src.row]);
//if(src.cell && p.enabledEdit && p.clickToEdit)
//{
// g._applyEditor(src.cell);
//}
//修改后代码 zyk20230811
setTimeout(function () {
g.endEdit();
g.trigger('clickRow', [src.data, src.data['__id'], src.row]);
if(src.cell && p.enabledEdit && p.clickToEdit)
{
var rowcell = src.cell, ids = rowcell.id.split('|');
var columnid = ids[ids.length - 1], column = g._columns[columnid];
if (!column || !column.editor) return;
var columnindex = column.columnindex;
g._applyEditor(g.getCellObj(g.getSelectedRow(), columnindex));
}
}, 100);
//----------修改后代码结束---------//
//选择行
if ($(src.row).hasClass("l-selected"))
{
if (!p.allowUnSelectRow)
{
$(src.row).addClass("l-selected-again");
return;
}
g.unselect(src.data);
}
else
{
g.select(src.data);
}
}
else if (src.toolbar)
{
if (src.first)
{
if (g.trigger('toFirst', [g.element]) == false) return false;
g.changePage('first');
}
else if (src.prev)
{
if (g.trigger('toPrev', [g.element]) == false) return false;
g.changePage('prev');
}
else if (src.next)
{
if (g.trigger('toNext', [g.element]) == false) return false;
g.changePage('next');
}
else if (src.last)
{
if (g.trigger('toLast', [g.element]) == false) return false;
g.changePage('last');
}
else if (src.load)
{
if ($("span", src.load).hasClass("l-disabled")) return false;
if (g.trigger('reload', [g.element]) == false) return false;
if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
return false;
g.loadData(p.where);
}
}
},
select: function (rowParm)
{
var g = this, p = this.options;
var rowdata = g.getRow(rowParm);
var rowid = rowdata['__id'];
var rowobj = g.getRowObj(rowid);
if (!p.rowSelectable || g.trigger('beforeSelectRow', [rowdata, rowid, rowobj]) == false) return;
var rowobj1 = g.getRowObj(rowid, true);
if ((!g.enabledCheckbox() && !g.ctrlKey) || p.isSingleCheck) //单选
{
for (var i in g.selected)
{
var o = g.selected[i];
if (o['__id'] in g.records)
{
$(g.getRowObj(o)).removeClass("l-selected l-selected-again");
if (g.enabledFrozen())
$(g.getRowObj(o, true)).removeClass("l-selected l-selected-again");
}
}
g.selected = [];
}
if (rowobj) $(rowobj).addClass("l-selected");
if (rowobj1) $(rowobj1).addClass("l-selected");
g.selected[g.selected.length] = rowdata;
g.trigger('selectRow', [rowdata, rowid, rowobj]);
},
unselect: function (rowParm)
{
var g = this, p = this.options;
var rowdata = g.getRow(rowParm);
var rowid = rowdata['__id'];
var rowobj = g.getRowObj(rowid);
var rowobj1 = g.getRowObj(rowid, true);
$(rowobj).removeClass("l-selected l-selected-again");
if (g.enabledFrozen())
$(rowobj1).removeClass("l-selected l-selected-again");
g._removeSelected(rowdata);
g.trigger('unSelectRow', [rowdata, rowid, rowobj]);
},
isSelected: function (rowParm)
{
var g = this, p = this.options;
var rowdata = g.getRow(rowParm);
for (var i in g.selected)
{
if (g.selected[i] == rowdata) return true;
}
return false;
},
arrayToTree: function (data, id, pid) //将ID、ParentID这种数据格式转换为树格式
{
var g = this, p = this.options;
var childrenName = "children";
if (p.tree) childrenName = p.tree.childrenName;
if (!data || !data.length) return [];
var targetData = []; //存储数据的容器(返回)
var records = {};
var itemLength = data.length; //数据集合的个数
for (var i = 0; i < itemLength; i++)
{
var o = data[i];
var key = getKey(o[id]);
records[key] = o;
}
for (var i = 0; i < itemLength; i++)
{
var currentData = data[i];
var key = getKey(currentData[pid]);
var parentData = records[key];
if (!parentData)
{
targetData.push(currentData);
continue;
}
parentData[childrenName] = parentData[childrenName] || [];
parentData[childrenName].push(currentData);
}
return targetData;
function getKey(key)
{
if (typeof (key) == "string") key = key.replace(/[.]/g, '').toLowerCase();
return key;
}
},
_onResize: function ()
{
var g = this, p = this.options;
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 = g.grid.parent();
if (p.inWindow)
{
parentHeight = windowHeight;
parentHeight -= parseInt($('body').css('paddingTop'));
parentHeight -= parseInt($('body').css('paddingBottom'));
}
else
{
parentHeight = gridparent.height();
}
h = parentHeight * parseInt(p.height) * 0.01;
if (p.inWindow || gridparent[0].tagName.toLowerCase() == "body")
h -= (g.grid.offset().top - parseInt($('body').css('paddingTop')));
}
else
{
h = parseInt(p.height);
}
h += p.heightDiff;
g.windowHeight = windowHeight;
g._setHeight(h);
}
else
{
g._updateHorizontalScrollStatus.ligerDefer(g, 10);
}
if (g.enabledFrozen())
{
var gridView1Width = g.gridview1.width();
var gridViewWidth = g.gridview.width();
if (gridViewWidth - gridView1Width <= 0)
{
g.gridview2.css({
width: 'auto'
});
} else
{
g.gridview2.css({
width: gridViewWidth - gridView1Width
});
}
}
g.trigger('SysGridHeightChanged');
},
showFilter: function ()
{
var g = this, p = this.options;
if (g.winfilter)
{
g.winfilter.show();
return;
}
var filtercontainer = $('<div id="' + g.id + '_filtercontainer"></div>').width(380).height(120).hide();
var filter = filtercontainer.ligerFilter({ fields: getFields() });
filter.addRule($(filter.element.firstChild));
return g.winfilter = $.ligerDialog.open({
width: 420, height: 208,
target: filtercontainer, isResize: true, top: 50,
buttons: [
{ text: '确定', onclick: function (item, dialog) { loadData(); dialog.hide(); } },
{ text: '取消', onclick: function (item, dialog) { dialog.hide(); } }
]
});
//将grid的columns转换为filter的fields
function getFields()
{
var fields = [];
//如果是多表头那么g.columns为最低级的列
$(g.columns).each(function ()
{
var o = { name: this.name, display: this.display };
var isNumber = this.type == "int" || this.type == "number" || this.type == "float";
var isDate = this.type == "date";
if (isNumber) o.type = "number";
if (isDate) o.type = "date";
if (this.editor)
{
o.editor = this.editor;
}
fields.push(o);
});
return fields;
}
function loadData()
{
var data = filter.getData();
if (g.options.dataType == "server")
{
//服务器过滤数据
loadServerData(data);
}
else
{
//本地过滤数据
loadClientData(data);
}
}
function loadServerData(data)
{
if (data && data.rules && data.rules.length)
{
g.setParm("where", JSON.stringify(data));
} else
{
g.removeParm("where");
}
g.loadData();
}
function loadClientData(data)
{
g.loadData($.ligerFilter.getFilterFunction(data));
}
}
});
$.ligerui.controls.Grid.prototype.enabledTotal = $.ligerui.controls.Grid.prototype.isTotalSummary;
$.ligerui.controls.Grid.prototype.add = $.ligerui.controls.Grid.prototype.addRow;
$.ligerui.controls.Grid.prototype.update = $.ligerui.controls.Grid.prototype.updateRow;
$.ligerui.controls.Grid.prototype.append = $.ligerui.controls.Grid.prototype.appendRow;
$.ligerui.controls.Grid.prototype.getSelected = $.ligerui.controls.Grid.prototype.getSelectedRow;
$.ligerui.controls.Grid.prototype.getSelecteds = $.ligerui.controls.Grid.prototype.getSelectedRows;
$.ligerui.controls.Grid.prototype.getCheckedRows = $.ligerui.controls.Grid.prototype.getSelectedRows;
$.ligerui.controls.Grid.prototype.getCheckedRowObjs = $.ligerui.controls.Grid.prototype.getSelectedRowObjs;
$.ligerui.controls.Grid.prototype.setOptions = $.ligerui.controls.Grid.prototype.set;
$.ligerui.controls.Grid.prototype.reload = $.ligerui.controls.Grid.prototype.loadData;
$.ligerui.controls.Grid.prototype.refreshSize = $.ligerui.controls.Grid.prototype._onResize;
$.ligerui.controls.Grid.prototype.append = $.ligerui.controls.Grid.prototype.appendRange;
function removeArrItem(arr, filterFn)
{
for (var i = arr.length - 1; i >= 0; i--)
{
if (filterFn(arr[i]))
{
arr.splice(i, 1);
}
}
}
})(jQuery);