📄 gridview2.js
字号:
dds[dd].unreg();
}
if(Ext.dd.DDM.locationCache[dd]){
delete Ext.dd.DDM.locationCache[dd];
}
}
delete Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
}
}
this.bind(null, null);
Ext.EventManager.removeResizeListener(this.onWindowResize, this);
},
handleLockChange : function(){
this.refresh(true);
},
onDenyColumnLock : function(){
},
onDenyColumnHide : function(){
},
handleHdMenuClick : function(item){
var index = this.hdCtxIndex;
var cm = this.cm, ds = this.ds;
switch(item.id){
case "asc":
ds.sort(cm.getDataIndex(index), "ASC");
break;
case "desc":
ds.sort(cm.getDataIndex(index), "DESC");
break;
case "lock":
var lc = cm.getLockedCount();
if(cm.getColumnCount(true) <= lc+1){
this.onDenyColumnLock();
return;
}
if(lc != index){
cm.setLocked(index, true, true);
cm.moveColumn(index, lc);
this.grid.fireEvent("columnmove", index, lc);
}else{
cm.setLocked(index, true);
}
break;
case "unlock":
var lc = cm.getLockedCount();
if((lc-1) != index){
cm.setLocked(index, false, true);
cm.moveColumn(index, lc-1);
this.grid.fireEvent("columnmove", index, lc-1);
}else{
cm.setLocked(index, false);
}
break;
default:
index = cm.getIndexById(item.id.substr(4));
if(index != -1){
if(item.checked && cm.getColumnCount(true) <= 1){
this.onDenyColumnHide();
return false;
}
cm.setHidden(index, item.checked);
}
}
return true;
},
beforeColMenuShow : function(){
var cm = this.cm, colCount = cm.getColumnCount();
this.colMenu.removeAll();
for(var i = 0; i < colCount; i++){
this.colMenu.add(new Ext.menu.CheckItem({
id: "col-"+cm.getColumnId(i),
text: cm.getColumnHeader(i),
checked: !cm.isHidden(i),
hideOnClick:false
}));
}
},
handleHdCtx : function(g, index, e){
e.stopEvent();
var hd = this.getHeaderCell(index);
this.hdCtxIndex = index;
var ms = this.hmenu.items, cm = this.cm;
ms.get("asc").setDisabled(!cm.isSortable(index));
ms.get("desc").setDisabled(!cm.isSortable(index));
if(this.grid.enableColLock !== false){
ms.get("lock").setDisabled(cm.isLocked(index));
ms.get("unlock").setDisabled(!cm.isLocked(index));
}
this.hmenu.show(hd, "tl-bl");
},
handleHdOver : function(e){
var hd = this.findHeaderCell(e.getTarget());
if(hd && !this.headersDisabled){
if(this.grid.colModel.isSortable(this.getCellIndex(hd))){
this.fly(hd).addClass("x-grid-hd-over");
}
}
},
handleHdOut : function(e){
var hd = this.findHeaderCell(e.getTarget());
if(hd){
this.fly(hd).removeClass("x-grid-hd-over");
}
},
handleSplitDblClick : function(e, t){
var i = this.getCellIndex(t);
if(this.grid.enableColumnResize !== false && this.cm.isResizable(i) && !this.cm.isFixed(i)){
this.autoSizeColumn(i, true);
this.layout();
}
},
render : function(){
var cm = this.cm;
var colCount = cm.getColumnCount();
if(this.grid.monitorWindowResize === true){
Ext.EventManager.onWindowResize(this.onWindowResize, this, true);
}
var header = this.renderHeaders();
var body = this.templates.body.apply({rows:""});
var html = this.templates.master.apply({
lockedBody: body,
body: body,
lockedHeader: header[0],
header: header[1]
});
//this.updateColumns();
this.grid.getGridEl().dom.innerHTML = html;
this.initElements();
this.scroller.on("scroll", this.handleScroll, this);
this.lockedBody.on("mousewheel", this.handleWheel, this);
this.mainBody.on("mousewheel", this.handleWheel, this);
this.mainHd.on("mouseover", this.handleHdOver, this);
this.mainHd.on("mouseout", this.handleHdOut, this);
this.mainHd.on("dblclick", this.handleSplitDblClick, this,
{delegate: "."+this.splitClass});
this.lockedHd.on("mouseover", this.handleHdOver, this);
this.lockedHd.on("mouseout", this.handleHdOut, this);
this.lockedHd.on("dblclick", this.handleSplitDblClick, this,
{delegate: "."+this.splitClass});
if(this.grid.enableColumnResize !== false && Ext.grid.SplitDragZone){
new Ext.grid.SplitDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
}
this.updateSplitters();
if(this.grid.enableColumnMove && Ext.grid.HeaderDragZone){
new Ext.grid.HeaderDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
new Ext.grid.HeaderDropZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
}
if(this.grid.enableCtxMenu !== false && Ext.menu.Menu){
this.hmenu = new Ext.menu.Menu({id: this.grid.id + "-hctx"});
this.hmenu.add(
{id:"asc", text: this.sortAscText, cls: "xg-hmenu-sort-asc"},
{id:"desc", text: this.sortDescText, cls: "xg-hmenu-sort-desc"}
);
if(this.grid.enableColLock !== false){
this.hmenu.add('-',
{id:"lock", text: this.lockText, cls: "xg-hmenu-lock"},
{id:"unlock", text: this.unlockText, cls: "xg-hmenu-unlock"}
);
}
if(this.grid.enableColumnHide !== false){
this.colMenu = new Ext.menu.Menu({id:this.grid.id + "-hcols-menu"});
this.colMenu.on("beforeshow", this.beforeColMenuShow, this);
this.colMenu.on("itemclick", this.handleHdMenuClick, this);
this.hmenu.add('-',
{id:"columns", text: this.columnsText, menu: this.colMenu}
);
}
this.hmenu.on("itemclick", this.handleHdMenuClick, this);
this.grid.on("headercontextmenu", this.handleHdCtx, this);
}
if((this.grid.enableDragDrop || this.grid.enableDrag) && Ext.grid.GridDragZone){
this.dd = new Ext.grid.GridDragZone(this.grid, {
ddGroup : this.grid.ddGroup || 'GridDD'
});
}
/*
for(var i = 0; i < colCount; i++){
if(cm.isHidden(i)){
this.hideColumn(i);
}
if(cm.config[i].align){
this.css.updateRule(this.colSelector + i, "textAlign", cm.config[i].align);
this.css.updateRule(this.hdSelector + i, "textAlign", cm.config[i].align);
}
}*/
this.updateHeaderSortState();
this.beforeInitialResize();
this.layout(true);
// two part rendering gives faster view to the user
this.renderPhase2.defer(1, this);
},
renderPhase2 : function(){
// render the rows now
this.refresh();
if(this.grid.autoSizeColumns){
this.autoSizeColumns();
}
},
beforeInitialResize : function(){
},
onColumnSplitterMoved : function(i, w){
this.userResized = true;
var cm = this.grid.colModel;
cm.setColumnWidth(i, w, true);
var cid = cm.getColumnId(i);
this.css.updateRule(this.colSelector + cid, "width", (w-this.borderWidth) + "px");
this.css.updateRule(this.hdSelector + cid, "width", (w-this.borderWidth) + "px");
this.updateSplitters();
this.layout();
this.grid.fireEvent("columnresize", i, w);
},
syncRowHeights : function(startIndex, endIndex){
if(this.grid.enableRowHeightSync === true && this.cm.getLockedCount() > 0){
startIndex = startIndex || 0;
var mrows = this.getBodyTable().rows;
var lrows = this.getLockedTable().rows;
var len = mrows.length-1;
endIndex = Math.min(endIndex || len, len);
for(var i = startIndex; i <= endIndex; i++){
var m = mrows[i], l = lrows[i];
var h = Math.max(m.offsetHeight, l.offsetHeight);
m.style.height = l.style.height = h + "px";
}
}
},
layout : function(initialRender, is2ndPass){
var g = this.grid;
var auto = g.autoHeight;
var scrollOffset = 16;
var c = g.getGridEl(), cm = this.cm,
expandCol = g.autoExpandColumn,
gv = this;
//c.beginMeasure();
if(!c.dom.offsetWidth){ // display:none?
if(initialRender){
this.lockedWrap.show();
this.mainWrap.show();
}
return;
}
var hasLock = this.cm.isLocked(0);
var tbh = this.headerPanel.getHeight();
var bbh = this.footerPanel.getHeight();
if(auto){
var ch = this.getBodyTable().offsetHeight + tbh + bbh + this.mainHd.getHeight();
var newHeight = ch + c.getBorderWidth("tb");
if(g.maxHeight){
newHeight = Math.min(g.maxHeight, newHeight);
}
c.setHeight(newHeight);
}
if(g.autoWidth){
c.setWidth(cm.getTotalWidth()+c.getBorderWidth('lr'));
}
var s = this.scroller;
var csize = c.getSize(true);
this.el.setSize(csize.width, csize.height);
this.headerPanel.setWidth(csize.width);
this.footerPanel.setWidth(csize.width);
var hdHeight = this.mainHd.getHeight();
var vw = csize.width;
var vh = csize.height - (tbh + bbh);
s.setSize(vw, vh);
var bt = this.getBodyTable();
var ltWidth = hasLock ?
Math.max(this.getLockedTable().offsetWidth, this.lockedHd.dom.firstChild.offsetWidth) : 0;
var scrollHeight = bt.offsetHeight;
var scrollWidth = ltWidth + bt.offsetWidth;
var vscroll = false, hscroll = false;
this.scrollSizer.setSize(scrollWidth, scrollHeight+hdHeight);
var lw = this.lockedWrap, mw = this.mainWrap;
var lb = this.lockedBody, mb = this.mainBody;
setTimeout(function(){
var t = s.dom.offsetTop;
var w = s.dom.clientWidth,
h = s.dom.clientHeight;
lw.setTop(t);
lw.setSize(ltWidth, h);
mw.setLeftTop(ltWidth, t);
mw.setSize(w-ltWidth, h);
lb.setHeight(h-hdHeight);
mb.setHeight(h-hdHeight);
if(is2ndPass !== true && !gv.userResized && expandCol){
// high speed resize without full column calculation
var ci = cm.getIndexById(expandCol);
var tw = cm.getTotalWidth(false);
var currentWidth = cm.getColumnWidth(ci);
var cw = Math.min(Math.max(((w-tw)+currentWidth-2)-/*scrollbar*/(w <= s.dom.offsetWidth ? 0 : 18), g.autoExpandMin), g.autoExpandMax);
if(currentWidth != cw){
cm.setColumnWidth(ci, cw, true);
gv.css.updateRule(gv.colSelector+expandCol, "width", (cw - gv.borderWidth) + "px");
gv.css.updateRule(gv.hdSelector+expandCol, "width", (cw - gv.borderWidth) + "px");
gv.updateSplitters();
gv.layout(false, true);
}
}
if(initialRender){
lw.show();
mw.show();
}
//c.endMeasure();
}, 10);
},
onWindowResize : function(){
if(!this.grid.monitorWindowResize || this.grid.autoHeight){
return;
}
this.layout();
},
appendFooter : function(parentEl){
return null;
},
sortAscText : "Sort Ascending",
sortDescText : "Sort Descending",
lockText : "Lock Column",
unlockText : "Unlock Column",
columnsText : "Columns"
});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -