⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhtmlxgrid_srnd.js

📁 dhtmlxGrid 是跨浏览器的 JavaScript 表格控制组件(Grid Control)
💻 JS
字号:
/*Copyright Scand LLC http://www.scbr.com
This version of Software is free for using in GNU GPL applications. For other use or to get Professional Edition please contact info@scbr.com to obtain license*/ 
 
 dhtmlXGridObject.prototype.enableSmartRendering = function(mode,totalRows,bufferSize){
 if(!convertStringToBoolean(mode))return;
 this._dload = true;
 if(!this._srdh)this._srdh=20;

 if(!this.deleteRow_WSRD){
 this.deleteRow_WSRD=this.deleteRow;
 this.deleteRow=this.deleteRow_WSRDA;

 this._insertRowAt_WSRD=this._insertRowAt;
 this._insertRowAt=this._insertRowAt_WSRDA;
}


 this._dInc=12;
 this._dl_start=new Array();
 this._limitC=this.limit=totalRows;

 this.multiLine=false;
 this._dloadSize=Math.floor(parseInt(this.entBox.offsetHeight)/this._srdh)+2; this.obj.className+=" row20px";
   this._dpref=bufferSize||this._dloadSize;
   if(this.hdr.childNodes[1])
 this._initD();
 else
 this._initDrF=true;

}
 

 dhtmlXGridObject.prototype._initD = function(){
 if((this.fldSort)&&(this.fldSort.length))
 for(var i=0;i<this.fldSort.length;i++)this.fldSort[i]="na";

 if(this.limit)
 this._fastAddRowSpacer(0,this.limit*this._srdh);


 this._initDrF=false;
}


 
 dhtmlXGridObject.prototype.enableDOMLimit = function(mode,limit){
 if(!convertStringToBoolean(mode))return;
 this._dom_limit=limit||1000;
}

  
 
 dhtmlXGridObject.prototype._checkPref=function(start,direction){
 if(_isKHTML)return start;
 var i=1;
 for(i;i<=this._dpref;i++)
 if(((i*direction+start)<0)||((i*direction+start)>this.limit)||(this.rowsCol[i*direction+start])||(this.rowsBuffer[i*direction+start]))break;
 return start+(i-1)*direction;
}
  
   
 dhtmlXGridObject.prototype._simplifyDom=function(a,b,c){
 var count=0;

 for(var i=0;i<this.obj._rowslength();i++)
 if((i<a)||(i>b)){
 var z=this.obj._rows(i);
 if((!z._rLoad)&&(!z._sRow)){

 if((z.previousSibling)&&((z.previousSibling._sRow)||(z.previousSibling._rLoad)))
{
  var ind=this.rowsCol._dhx_find(z);
 var zprev=z.previousSibling;


 this.rowsBuffer[1][ind]=z;

 zprev._sRow=true;
 z.parentNode.removeChild(z);
 this.rowsAr[this.rowsCol[ind].idd]=null;

 this.rowsCol[ind].idd=id;
 this.rowsCol[ind]=null;

 this._fixHeight(zprev,-this._srdh);
 i--;
}else
 if((z.nextSibling)&&((z.nextSibling._sRow)||(z.nextSibling._rLoad)))
{
  var ind=this.rowsCol._dhx_find(z);
 var zprev=z.nextSibling;


 this.rowsBuffer[1][ind]=z;

 zprev._sRow=true;
 z.parentNode.removeChild(z);
 this.rowsAr[this.rowsCol[ind].idd]=null;

 this.rowsCol[ind].idd=id;
 this.rowsCol[ind]=null;

 this._fixHeight(zprev,-this._srdh);
 i--;
}
 else{
 var ind=this.rowsCol._dhx_find(z);
 this.rowsBuffer[1][ind]=z;
 
 var id='temp_dLoad_'+this._dInc;
 this._dInc++;
 var zn=this._fastAddRow(id,ind,true,ind);

 z.parentNode.removeChild(z);
 zn._sRow=true;
 this._fixHeight(zn,0);

}
 if(this.obj._rowslength()<=this._dom_limit)return;
}
}
}
   
 dhtmlXGridObject.prototype._addFromBufferSR=function(j){
 if((!this.rowsCol[j])||(this.rowsCol[j]._sRow))
 this._splitRowAt(j);
 else
 if((this.rowsBuffer[1][j])&&(this.rowsBuffer[1][j].tagName=="TR")){
 this.rowsCol[j].parentNode.insertBefore(this.rowsBuffer[1][j],this.rowsCol[j]);
 this.rowsCol[j].parentNode.removeChild(this.rowsCol[j]);
 this.rowsCol[j].grid=null;
 this.rowsCol[j]=this.rowsBuffer[1][j];
}


 if(this.rowsBuffer[1][j].tagName=="row"){
 if(this._cssEven){
 if(j%2==1)this.rowsCol[j].className=this._cssUnEven;
 else this.rowsCol[j].className=this._cssEven;
}
 this._fillRowFromXML(this.rowsCol[j],this.rowsBuffer[1][j],-1);

 this.changeRowId(this.rowsCol[j].idd,this.rowsBuffer[1][j].getAttribute("id"));
}
 else{
 this.rowsAr[this.rowsBuffer[1][j].idd]=this.rowsBuffer[1][j];
 this.rowsBuffer[1][j]._sRow=this.rowsBuffer[1][j]._rLoad=false;
}



 this.rowsCol[j]._rLoad=false;
 this.rowsBuffer[1][j]=null;
}

 
 dhtmlXGridObject.prototype._askRealRows=function(pos){
 if(!this.limit){
 this._dl_start[0]=[0,this._dloadSize];
 var loader = new dtmlXMLLoaderObject(this._askRealRows2,this);
 loader.loadXML(this._dload+((this._dload.indexOf("?")!=-1)?"&":"?")+"posStart="+0+"&sn="+(new Date()).valueOf());
 return true;
}
 var gi=pos||Math.floor(this.objBox.scrollTop/this._srdh);
 if((this._dom_limit)&&(this.obj._rowslength()>this._dom_limit))
{
   this._simplifyDom(gi,gi+this._dloadSize);
  }
  if(gi>(this.limit-this._dloadSize))gi=this.limit-this._dloadSize;

 var size=gi+this._dloadSize;
 if(size>this.limit)size=this.rowsCol.length;

 for(var j=gi;j<size;j++)
 if((!this.rowsCol[j])||(this.rowsCol[j]._rLoad)||(this.rowsCol[j]._sRow)){
 if(this.rowsBuffer[1][j])
{
 this._addFromBufferSR(j);
}
 else
{
   if(this._dpref){
 start=this._checkPref(gi,-1);
 count=this._checkPref(size,1)-start;
}
 else
  {count=size-gi;start=gi;}
 this._dl_start[start]=[gi-start,size-gi];
 var loader = new dtmlXMLLoaderObject(this._askRealRows2,this);
 loader.loadXML(this._dload+((this._dload.indexOf("?")!=-1)?"&":"?")+"posStart="+start+"&count="+count+"&sn="+(new Date()).valueOf());
 if(this.onXLS)this.onXLS(this);
 return;
}
}
}


 dhtmlXGridObject.prototype._askRealRows2=function(obj,xml,c,d,e){
 var top=e.getXMLTopNode("rows");
 var rows=e.doXPath("//rows/row",top);
 var z_t=top.getAttribute("total_count");
 if((z_t)&&(!obj._limitC)){
 obj._limitC=obj.limit=parseInt(z_t);
 }

 if(obj._initDrF){
   var hheadCol = e.doXPath("//rows/head",top);
 if(hheadCol.length)
 obj._parseHead(hheadCol);
   obj._initD();
}

 var j=parseInt(top.getAttribute("pos"))||0;
 var llim=(obj._dl_start[j]||[0])[0];
 var tlim=llim+(obj._dl_start[j]||[0,rows.length])[1];

   if(!obj.limit){
 obj.limit=rows.length;
 obj._fastAddRowSpacer(0,obj.limit*obj._srdh);
 if(obj._ahgr)window.setTimeout(function(){obj._askRealRows();},1);
}
  
 for(var i=0;i<rows.length;i++){
   if((i<llim)||(i>tlim))
{
 if(!_isKHTML){
 obj.rowsBuffer[1][j+i]=rows[i];
 obj.rowsBuffer[0][j+i]=rows[i].getAttribute("id");
}
}
 else
  {
 if((!obj.rowsCol[i+j])||(obj.rowsCol[i+j]._sRow))
 obj._splitRowAt(i+j);

 if(obj.rowsCol[i+j]._rLoad){
  if(obj._cssEven){
 if((j+i)%2==1)obj.rowsCol[i+j].className=obj._cssUnEven;
 else obj.rowsCol[i+j].className=obj._cssEven;
}
 obj._fillRowFromXML(obj.rowsCol[i+j],rows[i],-1);

 obj.rowsCol[i+j]._rLoad=false;
 obj.changeRowId(obj.rowsCol[i+j].idd,rows[i].getAttribute("id"));
}
}
}

 if(obj.onXLE)obj.onXLE(this,tlim-llim);
}
 
 dhtmlXGridObject.prototype._splitRowAt=function(ind){
 var id='temp_dLoad_'+this._dInc;
 this._dInc++;
 var z=this.rowsCol[ind];
 if(!z)
{
  var ind2=this._findSParent(ind);


 var delta=ind2[1]-(ind-ind2[0])*this._srdh;
 this._fixHeight(this.rowsCol[ind2[0]],delta);


 var z2=this._fastAddRow(id,ind,true,ind2[0])
 z2._sRow=true;

 this._fixHeight(z2,-1*((ind2[1]-(ind-ind2[0])*this._srdh)-this._srdh));
 return this._splitRowAt(ind);
}
 else
 if(z._sRow){
  if((this.rowsBuffer[1][ind])&&(this.rowsBuffer[1][ind].tagName=="TR"))
(this._fastAddRow(id,ind,true,null,this.rowsBuffer[1][ind]))._rLoad=false;
 else
(this._fastAddRow(id,ind,true))._rLoad=true;
 this.rowsCol[ind+1]=z;
 this._fixHeight(z,this._srdh);
 if(ind==0)this.setSizes();
}

}
 
 dhtmlXGridObject.prototype._findSParent=function(ind){
 for(var i=ind-1;i>=0;i--){
 if(this.rowsCol[i]){
 return [i,(parseInt(this.rowsCol[i].style.height))];
}
}
}
 
 dhtmlXGridObject.prototype._fixHeight=function(z,delta){
 var x=parseInt(z.style.height||this._srdh)-delta;
 if(x==this._srdh){z._sRow=false;z._rLoad=true;}

 z.style.height=x+"px";
 var n=z.childNodes.length;
 for(var i=0;i<n;i++)
 z.childNodes[i].style.height=x+"px";
}
 
 dhtmlXGridObject.prototype._fastAddRowSpacer=function(ind,height){
 var id='temp_dLoad_'+this._dInc;
 this._dInc++;

 var z=this._fastAddRow(id,ind);
 z.style.height=height+"px";
 var n=z.childNodes.length;
 for(var i=0;i<n;i++)
 z.childNodes[i].style.height=height+"px";

 z._sRow=true;
}


 
 dhtmlXGridObject.prototype._fastAddRow=function(id,ind,nonshift,ind2,z){
 var z=z||this._prepareRow(id);


 if(((ind2)||(ind2=="0"))&&(this.rowsCol[ind2].nextSibling))
 this.rowsCol[ind2].parentNode.insertBefore(z,this.rowsCol[ind2].nextSibling);
 else
{
 if((ind==this.limit)||(this.obj._rowslength()==0)||(!this.rowsCol[ind])){
 if(_isKHTML)
 this.obj.appendChild(z);
 else{
 if(!this.obj.firstChild)
 this.obj.appendChild(document.createElement("TBODY"));
 this.obj.childNodes[0].appendChild(z);
}
}
 else
 this.rowsCol[ind2||ind].parentNode.insertBefore(z,this.rowsCol[ind]);
}


 this.rowsAr[id] = z;
 if(!nonshift)
 this.rowsCol._dhx_insertAt(ind,z);
 else
 this.rowsCol[ind]=z;

 return z;
};

 
dhtmlXGridObject.prototype.getAllItemIds = function(separator){
 var ar = new Array(0)
 var z=this.getRowsNum();
 for(i=0;i<z;i++)
 if((this.rowsCol[i])&&(!this.rowsCol[i]._sRow)&&(!this.rowsCol[i]._rLoad))
 ar[ar.length]=this.rowsCol[i].idd;
 else if(this.rowsBuffer[1][i])
 ar[ar.length]=this.rowsBuffer[0][i];

 return ar.join(separator||",")
}

 
dhtmlXGridObject.prototype._insertRowAt_WSRDA = function(r,ind,skip){
 if(ind<0)ind=this.rowsBuffer[0].length;
 if((arguments.length<2)||(ind===window.undefined))
 ind = this.rowsBuffer[0].length  else{
 if(ind>this.rowsBuffer[0].length)
 ind = this.rowsBuffer[0].length;
}

 var ind2=this.rowsBuffer[0][ind]||this.rowsCol[ind].idd;
 this.getRowById(ind2);

 if(!skip)
 if(ind==this.rowsBuffer[0].length){
 if(_isKHTML)
 this.obj.appendChild(r);
 else{
 this.obj.firstChild.appendChild(r);
}
 this.rowsBuffer[0][ind]=r.idd;
 this.rowsBuffer[1][ind]=null;
 ind2=ind;
}
 else
{
 if(!this.rowsCol[ind])
 ind2=(this._findSParent(ind)[0]);
 else ind2=ind;
 this.rowsCol[ind2].parentNode.insertBefore(r,this.rowsCol[ind2]);
 this.rowsBuffer[0]._dhx_insertAt(ind,r.idd);
 this.rowsBuffer[1]._dhx_insertAt(ind,null);
}

 this.limit+=1;
 this.rowsAr[r.idd] = r;
 this.rowsCol._dhx_insertAt(ind2,r);

 if(this._cssEven){
 if(ind%2==1)r.className+=" "+this._cssUnEven;
 else r.className+=" "+this._cssEven;

 if(ind!=(this.rowsCol.length-1))
 this._fixAlterCss(ind+1);
}

 this.doOnRowAdded(r);
 if((this.math_req)&&(!this._parsing_)){
 for(var i=0;i<this.hdr.rows[0].cells.length;i++)
 this._checkSCL(r.childNodes[i]);
 this.math_req=false;
}
 return r;
}
 
dhtmlXGridObject.prototype.deleteRow_WSRDA = function(row_id,node){
 var ind=-1;
 var fixind=null;
 if(this.rowsAr[row_id]){
 ind=this.rowsCol._dhx_find(this.rowsAr[row_id]);
 this.deleteRow_WSRD(row_id,node);
}
 if(ind<0){
 var ind=this.rowsBuffer[0]._dhx_find(row_id);
 if(ind>-1)fixind=this.rowsCol[this._findSParent(ind)[0]];
}

 if(ind>-1)
{
 this.rowsBuffer[0]._dhx_delAt(ind);
 this.rowsBuffer[1]._dhx_delAt(ind);
 this.limit-=1;
 if(fixind)this._fixHeight(fixind,this._srdh);
}
 return true;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -