dhtmlxgrid_group.js

The dhtmlxgrid_group.js is extension to group rows, not columns.
It is available as part of dhtmlxgrid pro editon, only.

//v.1.6 build 80523

/*
Copyright DHTMLX LTD. dhtmlx.com
To use this component please contact sales@dhtmlx.com to obtain license
*/
dhtmlXGridObject.prototype.unGroup=function(){if (!this._groups)return;this._dndProblematic=false;delete this._groups;delete this._gIndex;if (this._fake)this._mirror_rowsCol();this.forEachRow(function(id){this.rowsAr[id].style.display=’’})
this._reset_view();this.callEvent(“onGridReconstructed”,[])
this.callEvent(“onUnGroup”,[])};dhtmlXGridObject.prototype._mirror_rowsCol=function(){this._fake._groups=this._groups;this._fake._gIndex=this._gIndex;this.rowsBuffer=dhtmlxArray();for (var i=0;i<this.rowsCol.length;i++)if (!this.rowsCol[i]._cntr)this.rowsBuffer.push(this.rowsCol[i]);this._fake.rowsBuffer=dhtmlxArray();for (var i=0;i<this._fake.rowsCol.length;i++)if (!this._fake.rowsCol[i]._cntr)this._fake.rowsBuffer.push(this._fake.rowsCol[i])};dhtmlXGridObject.prototype.groupBy=function(ind){if (this._groups)this.unGroup();this._dndProblematic=true;this._groups=[];this._gIndex=ind;if (this._fake &&!this._realfake){this._fake._groups=[];this._fake._gIndex=this._gIndex};this._nextRow=function(ind,dir){var r=this.rowsCol[ind+dir];if (r && ( r.style.display==“none” || r._cntr)) return this._nextRow(ind+dir,dir);return r};this._key_events.k38_0_0=function(){if (this.editor && this.editor.combo)this.editor.shiftPrev();else{var rowInd = this.row.rowIndex;if (!rowInd)return;var nrow=this._nextRow(rowInd-1,-1);if (nrow)this.selectCell(nrow,this.cell._cellIndex,true)}};if (!this.__sortRowsBG){this.attachEvent(“onFilterStart”,function(){if (!this._groups)return true;this._groups={}});this.attachEvent(“onBeforeSorting”,function(ind,type,dir){if (typeof(this._groups)==“undefined”) return true;if (ind==this._gIndex)this._sortByGroup(ind,type,dir);else this._sortInGroup(ind,type,dir);this.setSortImgState(true,ind,dir)
if (this._fake){this._mirror_rowsCol();this._fake._groups=[];this._fake._reset_view()};return false});this.attachEvent(“onClearAll”,function(){this.unGroup()});this.attachEvent(“onBeforeRowDeleted”,function(id){if (!this._groups)return true;if (!this.rowsAr[id])return true;var val=this.cells(id,this._gIndex).getValue();if (val==="")val=" “;var z=this._groups[val];this._dec_group(z);return true});this.attachEvent(“onCheckbox”,function(id,index,value){this.callEvent(“onEditCell”,[2,id,index,(value?1:0),(value?0:1)])});this.attachEvent(“onEditCell”,function(stage,id,ind,val,oldval){if (!this._groups)return true;if (stage==2 && val!=oldval && ind==this._gIndex){if (oldval===”")oldval=" “;this._dec_group(this._groups[oldval]);var r=this.rowsAr[id];var i=this.rowsCol._dhx_find®
var ni=this._inc_group(val);var n=this.rowsCol[ni];var p=r.parentNode;var o=r.rowIndex;p.removeChild®;if (n)p.insertBefore(r,n);else
p.appendChild®;this.rowsCol._dhx_insertAt(ni,r);if (ni<i)i++;this.rowsCol._dhx_removeAt(i,r);this._fixAlterCss()};return true})
this.__sortRowsBG=true};this._key_events.k13_1_0=this._key_events.k13_0_1=function(){};this._groupExisting();this.callEvent(“onGroup”,[])};dhtmlXGridObject.prototype._sortInGroup=function(col,type,order){var b=this._groups_get();b.reverse();for (var i=0;i<b.length;i++){var c=b[i]._cntr._childs;var a={};for (var j=0;j<c.length;j++)a[c[j].idd]=this.cells3(c[j],col).getValue();this._sortCore(col,type,order,a,c)};this._groups_put(b);this.setSizes();this.callEvent(“onGridReconstructed”,[])
};dhtmlXGridObject.prototype._sortByGroup=function(col,type,order){var b=this._groups_get();var a=[];for (var i=0;i<b.length;i++){b[i].idd=“sort”+i;a[“sort”+i]=b[i]._cntr.text};this._sortCore(col,type,order,a,b);this._groups_put(b);this.callEvent(“onGridReconstructed”,[])
this.setSizes()};dhtmlXGridObject.prototype._inc_group=function(val,hidden){if (val===”")val=" “;if (!this._groups[val]){this._groups[val]={text:val,row:this._addPseudoRow(),count:0,state:hidden?“plus”:“minus”}};var z=this._groups[val];this._fixAlterCss();z.row._cntr=z;var ind=this.rowsCol._dhx_find(z.row)+z.count+1;z.count++;this._updateGroupView(z);return ind};dhtmlXGridObject.prototype._dec_group=function(z){if (!z)return;z.count–;if (z.count==0){z.row.parentNode.removeChild(z.row);this.rowsCol._dhx_removeAt(this.rowsCol._dhx_find(z.row));delete this._groups[z.text]}else
this._updateGroupView(z);if (this._fake && !this._realfake)this._fake._dec_group(this._fake._groups[z.text]);return true};dhtmlXGridObject.prototype._insertRowAt_gA=dhtmlXGridObject.prototype._insertRowAt;dhtmlXGridObject.prototype._insertRowAt=function(r,ind,skip){if (typeof(this._groups)!=“undefined”){if (this._realfake)var val=this._fake._bfs_cells(r.idd,this._gIndex).getValue();else
if (this._bfs_cells3)var val=this._bfs_cells3(r,this._gIndex).getValue();else
var val=this.cells3(r,this._gIndex).getValue();if (!val)val=” “;ind=this._inc_group(val,r.style.display==“none”)};return this._insertRowAt_gA(r,ind,skip)};dhtmlXGridObject.prototype._updateGroupView=function(z){if (this._fake && !this._realfake)return z.row.firstChild.innerHTML=” “;var html=” “;if (this.customGroupFormat)html+=this.customGroupFormat(z.text,z.count);else html+=z.text+” ( “+z.count+” ) “;z.row.firstChild.innerHTML=html};dhtmlXGridObject.prototype._addPseudoRow=function(skip){var r=document.createElement(“TR”);var t=document.createElement(“TD”);r.appendChild(t);t.style.cssText=“vertical-align:middle;font-family:Tahoma;font-size:10pt;font-weight:bold;height:30px;border:0px;border-bottom: 2px solid navy;”;t.colSpan=this._cCount;var that=this;t.onclick=function(e){if (that._fake && that._realfake)that._fake._switchGroupState(that._fake._groups[that.getFirstParentOfType(this,“TR”)._cntr.text].row);else
that._switchGroupState(that.getFirstParentOfType(this,“TR”));(e||event).cancelBubble=“true”};t.ondblclick=function(e){(e||event).cancelBubble=“true”};if (!skip){if (_isKHTML)this.obj.appendChild®
else
this.obj.firstChild.appendChild®
this.rowsCol.push®};return r};dhtmlXGridObject.prototype._groups_get=function(){var b=[];this._temp_par=this.obj.parentNode;this._temp_par.removeChild(this.obj);var a=[];for (var i=this.rowsCol.length-1;i>=0;i–){if (this.rowsCol[i]._cntr){this.rowsCol[i]._cntr._childs=a;a=[];b.push(this.rowsCol[i])}else a.push(this.rowsCol[i]);this.rowsCol[i].parentNode.removeChild(this.rowsCol[i])};return b};dhtmlXGridObject.prototype._groups_put=function(b){this.rowsCol=new dhtmlxArray(0);for (var i=0;i<b.length;i++){var gr=b[i]._cntr;this.obj.firstChild.appendChild(gr.row);this.rowsCol.push(gr.row)
gr.row.idd=null;for (var j=0;j<gr._childs.length;j++){this.obj.firstChild.appendChild(gr._childs[j]);this.rowsCol.push(gr._childs[j])
};delete gr._childs};this._temp_par.appendChild(this.obj)};dhtmlXGridObject.prototype._groupExisting=function(b){if (!this.getRowsNum()) return;var b=[];this._temp_par=this.obj.parentNode;this._temp_par.removeChild(this.obj);var a=[];for (var i=this.rowsCol.length-1;i>=0;i–){var val=this.cells4(this.rowsCol[i].childNodes[this._gIndex]).getValue();if (!val)val=” “;if (!this._groups[val]){this._groups[val]={text:val,row:this._addPseudoRow(true),count:0,state:“minus”};var z=this._groups[val];z.row._cntr=z;this._groups[val]._childs=[];b.push(z.row)
};this._groups[val].count++;this._groups[val]._childs.push(this.rowsCol[i]);this.rowsCol[i].parentNode.removeChild(this.rowsCol[i])};for (var i=0;i<b.length;i++)this._updateGroupView(b[i]._cntr)
this._groups_put(b);if (this._fake && !this._realfake){this._mirror_rowsCol();this._fake._groups=[];this._fake._reset_view()};this.callEvent(“onGridReconstructed”,[])
};dhtmlXGridObject.prototype._switchGroupState=function(row){if (this._fake && !this._realfake)this._fake._switchGroupState(this._fake._groups[row._cntr.text].row)
var z=row._cntr;var ind=this.rowsCol._dhx_find(z.row)+1;z.state=z.state==“minus”?“plus”:“minus”;var st=z.state==“plus”?“none”:”";while(this.rowsCol[ind] && !this.rowsCol[ind]._cntr){this.rowsCol[ind].style.display=st;ind++};this._updateGroupView(z);this.callEvent(“onGroupStateChanged”,[z.row.idd]);this.setSizes()};dhtmlXGridObject.prototype.expandGroup=function(val){if (this._groups[val].state==“plus”);this._switchGroupState(this._groups[val].row)};dhtmlXGridObject.prototype.collapseGroup=function(val){if (this._groups[val].state==“minus”);this._switchGroupState(this._groups[val].row)};dhtmlXGridObject.prototype.expandAllGroups=function(){for(var i in this._groups)if (this._groups[i] && this._groups[i].state==“plus”)this._switchGroupState(this._groups[i].row)};dhtmlXGridObject.prototype.collapseAllGroups=function(){for(var i in this._groups)if (this._groups[i] && this._groups[i].state==“minus”)this._switchGroupState(this._groups[i].row)};//©dhtmlx ltd. www.dhtmlx.com
//v.1.6 build 80523

/*
Copyright DHTMLX LTD. dhtmlx.com
To use this component please contact sales@dhtmlx.com to obtain license