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

📄 list1.1.js

📁 报表打印例子报表打印例子报表打印例子报表打印例子报表打印例子
💻 JS
📖 第 1 页 / 共 2 页
字号:

function SigmaListRow(list,id){
	this.value = list.getRowDataObjById(id);
	this.cells = new Object();
	this.grid = list;
	this.id = id;
	var oThis = this;
	var columns = list.columns;
	for(var i=0;i<columns.length;i++){
		var column = columns[i];
		var cell = new SigmaListCell(oThis,column);
		this.cells[column.name] = cell;
	}

	this.getElement = function(){
		var rows = list.getElement().all("dataTable").rows;
		for(var i=0;i<rows.length;i++){
			var row = rows[i];
			if(row.l_r_id == oThis.id){
				return row;
			}
		}
		return null;
	}

	this.setSelected = function(s){
		var e = oThis.getElement();
		if(e!=null){
			if(s==true){
				e.className = "selected";
			}else{
				e.className = "";
			}
		}
		var selected = oThis.grid.selectedIds;
		if(s==true){
			var element = oThis.getElement();
			if(element!=null){
				var input = element.all("auto_radio");
				if(input==null){
					input = element.all("auto_check");
				}
				if(input!=null){
					input.checked = true;
				}
			}
			if(selected.contains(oThis.id)){
			}else{
				selected[selected.length] = oThis.id;
			}
		}else{
			selected.remove(oThis.id);
		}
		oThis.grid.onSelect();
	}
}

function SigmaListCell(row,column){
	this.grid = row.grid;
	this.column = column;
	this.row = row;

	var oThis = this;
	this.getValue = function(){
		return oThis.grid.getPropertyOfObj(oThis.row.value,oThis.column.name);
	}
}

function SigmaList (){
	this.columns = null;
	this.data = [];
	this.dataIndexer = null;
	this.context = null;
	this.element = document.createElement("div");
	this.element.className = "SigmaList";
	this.element.style.height = "100%";
	this.element.style.overflow = "auto";
	this.columnHeaders = new Object();
	this.rowHeight = 20;
	this.headerHeight = 20;
	this.selectedIds = new Array();
	this.from = 0;
	SigmaObject.call(this);
	var idSequence = this.getId()*60000;

	this.getNextRowId = function(){
		idSequence ++;
		return idSequence;
	}
	
	this.destroy = function(){
		delete oThis.data;
		oThis.data.removeAll();
	}

	this.rows = new Object();


	this.getRowDataObjById = function(id){
		if(oThis.dataIndexer == null){
			oThis.dataIndexer = new Object();
			for(var i=0;i<oThis.data.length;i++){
				var rowData = oThis.data[i];
				oThis.dataIndexer[rowData.l_r_id] = rowData;
			}
		}
		return oThis.dataIndexer[id];
	}

	

	this.getSelectedRows = function(){
		var r = new Array();
		for(var i=0;i<oThis.selectedIds.length;i++){
			var row = oThis.getRow(oThis.selectedIds[i]);
			r[r.length] = row;
		}
		return r;
	}

	this.getValueOfSelectedRows = function(){
		var rows = oThis.getSelectedRows();
		var array = new Array();
		for(var i=0;i<rows.length;i++){
			array[i] = rows[i].value;
		}
		return array;
	}

	var sb = [];
	sb[sb.length] = '<div id="headerArea" style="border:0;overflow:hidden;position:relative;height:20;width:100%;"> ';
	sb[sb.length] = '<table id="headTable" cellspacing=0 cellpadding=0 border=0 style="z-index:-1;table-layout:fixed;position:relative;"></table>';
	sb[sb.length] = '</div>';
	sb[sb.length] = '</div>';
	sb[sb.length] = '<div id="listBox" class="listBox" style="width:99%;overflow:auto;">';
	sb[sb.length] = '<div id="listArea" style="z-index:1;height:2;">';
	sb[sb.length] = '</div>';
	sb[sb.length] = '</div>';
	
	this.element.innerHTML = sb.join("");
	this.headTable = this.element.all("headTable");
	this.sTop = 0;
	this.element.all("listBox").onscroll = function(){
		if(this.scrollTop==oThis.sTop){
			oThis.headTable.style.left = - this.scrollLeft;
		}else{
			oThis.sTop = this.scrollTop;
			var from = this.scrollTop/oThis.rowHeight;
			var y = this.scrollTop % oThis.rowHeight
			if(y>0){
				from++;
			}
			var s = (""+from).split(".");
			from = parseInt(s[0]);
		
			oThis.paintCurrentRows(from);
			oThis.element.all("dataTable").style.top = this.scrollTop;
		}
	}
	
	this.getElement = function(){
		return this.element;
	}
	
	var oThis = this;

	this.setContext = function(context){
		oThis.context = context;
	}

	this.resize = function(){
		var hArea = oThis.element.all("headerArea");
		oThis.headerHeight = oThis.getHeadDepth() * oThis.rowHeight;
		hArea.style.height = oThis.headerHeight;
		var box = oThis.element.all("listBox");
		box.style.height = oThis.element.offsetHeight - oThis.headerHeight-2;
		box.style.width = oThis.element.offsetWidth -2;
		var area = oThis.element.all("listArea");
		area.style.width = oThis.element.all("headTable").offsetWidth -2;
		
	}

	this.resizeArea = function(){
		var area =  oThis.element.all("listArea");
		var h = 0;
		h = oThis.data.length * oThis.rowHeight;
		
		if(h==0)
			h=1;

		if(oThis.context.sum!=null && oThis.context.sum.length>0){
			area.style.height = h + oThis.rowHeight;
		}else{
			area.style.height = h;
		}
		
	}


	this.headDepth = 0;
	this.getHeadDepth = function(){
		if(oThis.headDepth == 0 ){
			var max = 0;
			for(var i=0;i<oThis.columns.length;i++){
				var column = oThis.columns[i];
				var cDepth = oThis.calcColDepth(column,1);
				if(cDepth>max){
					max = cDepth;
				}
			}
			oThis.headDepth = max;
		}
		return oThis.headDepth;
	}

	this.calcColDepth = function(column,currentDepth){
		if(column.children!=null && column.children.length>0){
			var max = currentDepth;
			for(var i=0;i<column.children.length;i++){
				var child = column.children[i];
				var cDepth = oThis.calcColDepth(child,currentDepth+1);
				if(cDepth>max){
					max = cDepth;
				}
			}
			column.colSpan = column.children.length;
			column.depth = currentDepth;
			return max;
		}else{
			column.colSpan = 1;
			column.depth = currentDepth;
			return currentDepth;
		}
	}
	this.getOrderedColumns = function(){
		return oThis.columns;
	}

	

	this.bindHeader = function(columns){
		this.headDepth = 0;
		oThis.columnHeaders = new Array();
		oThis.element.style.width = oThis.element.offsetWidth;
		this.columns = columns;
		
		var rows = [];
		var depth = oThis.getHeadDepth();
		var colGroup = document.createElement("colgroup");
		colGroup.id = "colgroup_"+oThis.getId();
		
		for(var i=0;i<depth;i++){
			var row = this.headTable.insertRow();
			rows[i] = row;
		}
		
		var start = 0;
		if(oThis.context.checkBox){
			var cell = rows[0].insertCell(start);
			cell.innerText = " ";
			cell.className = "header";
			cell.rowSpan = rows.length;
			start++;
			var col = document.createElement("col");
			col.width = 40;
			colGroup.appendChild(col);
		}else if(oThis.context.radioBox){
			var cell = rows[0].insertCell(start);
			start++;
			cell.className = "header";
			cell.rowSpan = rows.length;
			cell.innerText = " ";
			var col = document.createElement("col");
			col.width = 40;
			colGroup.appendChild(col);
		}
		if(oThis.context.sequence){
			var cell = rows[0].insertCell(start);
			cell.innerText = "序号";
			cell.className = "header";
			cell.rowSpan = rows.length;
			start++;
			var col = document.createElement("col");
			col.width = 40;
			colGroup.appendChild(col);
		}
		var list_id =  oThis.getId() ;
		for(var i=0;i<oThis.columns.length;i++){
			var column = oThis.columns[i];
			var cell = rows[0].insertCell(start+i);
			cell.column = column;
			cell.className = "header";
			if(column.children==null || column.children.length<1){
				cell.rowSpan = rows.length;
				var width =getColumnWidth(column);
				oThis.columnHeaders[column.name] = cell;
				var s = [];
				s[s.length] = '<div id="title_'+ column.name+'" style="padding-top:3px;float:left;cursor:hand;height:100%;width:'+(width-4)+'px;" onclick="list_onSortByColumn('+list_id+',\''+column.name+'\');">'+column.caption+'</div>';
				s[s.length] = '<div id="col_' + column.name + '" style="float:right;cursor:E-RESIZE;height:100%;width:3px;" onmousedown="list_startResize('+list_id+',\''+column.name+'\')"></div>';
				cell.innerHTML = s.join("");
				var col = document.createElement("col");
				col.width = width;
				col.id = "col_"+column.name;
				colGroup.appendChild(col);
			}else{
				cell.rowSpan = 1;
				cell.colSpan = column.children.length;
				cell.column = column;
				cell.innerHTML = column.caption;
				oThis.columnHeaders[column.name] = cell;
				var width =getColumnWidth(column);
				for(var j=0;j<column.children.length;j++){
					var cColumn = column.children[j];
					cColumn.parent = column;
					var cCell = rows[1].insertCell();
					oThis.columnHeaders[cColumn.name] = cCell;
					cCell.rowSpan = 1;
					cCell.className = "header";
					var width =getColumnWidth(cColumn);
					
					cCell.column = cColumn; 
					var s = [];
					s[s.length] = '<div id="title_'+ cColumn.name+'" style="float:left;padding:3px;cursor:hand;height:100%;width:'+(width-4)+'px;" onclick="list_onSortByColumn('+list_id+',\''+cColumn.name+'\');">'+cColumn.caption+'</div>';
					s[s.length] = '<div id="col_' + cColumn.name + '" style="float:right;cursor:e-resize;width:3px;height:100%;" onmousedown="list_startResize('+list_id+',\''+cColumn.name+'\')"></div>';
					cCell.innerHTML = s.join("");
					var col = document.createElement("col");
					col.width = width;
					col.id = "col_"+cColumn.name;
					colGroup.appendChild(col);
				}
			}
		}
		
		oThis.headTable.appendChild(colGroup);
		oThis.resize();
	}

	this.getValue = function(){
		return oThis.data;
	}


	this.sortByColumn = function(column){
		var v= this.data;
		if(column.order=="asc"){
			column.order = "desc";
		}else{
			column.order = "asc";
		}	
		v.sort(
			function comp(r1,r2){
				return oThis.compRowByColumn(r1,r2,column);
			}
		);
		oThis.bindData(v);
		oThis.element.all("listBox").scrollTop = 0;
	}

	this.compRowByColumn = function(row1,row2,column){
		var v1 = oThis.getValueOfCell(row1,column);
		var v2 = oThis.getValueOfCell(row2,column);
		var r = 0;
		if(column.mode=="number" || column.mode=="money"){
			r = v1-v2;
		}else if(column.mode=="check"){
			if(v1==null) v1=false;
			if(v2==null) v2=false;
			if(v1==v2){
				r = 0;
			}else{
				r = v1>v2?1:-1;
			}
		}else{
			if(typeof(v1)=="number"){
				r = v1 - v2;
			}else
				r = v1.localeCompare(v2);
		}
		if(column.order=="desc"){
			return -r;
		}
		return r;
	}


	this.bindData = function(data){
		sumData = null;
		_list_sumrow_str = null;
		oThis.data = data;
		oThis.rows = new Object();
		oThis.dataIndexer = null;
		oThis.selectedIds = [];
		for(var i=0;i<data.length;i++){
			data[i].l_r_id = oThis.getNextRowId();
		}

		oThis.resizeArea();
		var columnsNum = oThis.columns.length+1;
		if(oThis.context.checkBox){
			columnsNum++;
		}else if(oThis.context.radioBox){
			columnsNum++;
		}
		if(oThis.context.sequence){
			columnsNum++;
		}
		oThis.resetScroll();
		oThis.paintCurrentRows(0);
	}
	
	this.getContext = function(){
		return oThis.context;
	}

	this.resetScroll = function(){
		oThis.element.all("listBox").scrollLeft = 0;
		oThis.element.all("listBox").scrollTop = 0;
	}

	var visibleHeight = null;
	var visibleRowsAmount = null;
	this.getVisibleRowsAmount = function(){
		if(visibleRowsAmount==null){
			var h = oThis.getVisibleHeight();			
			visibleRowsAmount = oThis.divide(h,oThis.rowHeight);
			if(oThis.context.sum!=null && oThis.context.sum.length>0){
				visibleRowsAmount-=1;
			}
		}
		return visibleRowsAmount;
	}

	this.getVisibleHeight = function(){
		if(visibleHeight==null){
			visibleHeight = oThis.element.all("listBox").offsetHeight;
		}
		return visibleHeight;
	}


	this.divide = function(a,b){
		var r = ""+a/b;
		var s = r.split(".");
		return parseInt(s[0]);
	}

	var _list_colsStr = null;
	this.clearColsStr = function(){
		_list_colsStr = null;
	}
	this.getColsStr = function(){
		if(_list_colsStr==null){
			var sb = [];
			sb[sb.length] = '<colgroup id="data_cols_'+oThis.getId()+'">';
			if(oThis.context.checkBox==true){
				sb[sb.length] = '<col width="40"/>';
			}else if(oThis.context.radioBox==true){
				sb[sb.length] = '<col width="40" />';
			}
			if(oThis.context.sequence==true){
				sb[sb.length] = '<col width="40"/>';
			}
			var cols = oThis.getLeafColumns();
			for(var i=0;i<cols.length;i++){
				sb[sb.length] = '<col width="' + getColumnWidth(cols[i]) + '" id="' + 'col_'+cols[i].name + '"/>';
			}
			sb[sb.length] = '</colgroup>';
			_list_colsStr = sb.join("");
		}
		return _list_colsStr;
	}

	this.paintCurrentRows = function(from){
		var listArea = oThis.element.all("listArea");
		var sb = new Array();
		sb[sb.length] = '<table id="dataTable" cellspacing=0 cellpadding=0 border=0 style="table-layout:fixed;position:relative;">';
		
		sb[sb.length] = oThis.getColsStr();
		var rowsAmount = oThis.getVisibleRowsAmount();
		var end = from + rowsAmount;
		if(end>oThis.data.length){
			end = oThis.data.length;
		}
		this.from = from;
		for(var i=from;i<end;i++){
			var rowData = oThis.data[i];
			rowData._index = i;
			sb[sb.length] = oThis.paintRow(rowData);
		}
		if(oThis.data!=null && oThis.data.length>0 && oThis.context.sum!=null && oThis.context.sum.length>0){
			sb[sb.length] = oThis.paintSumRow();
		}
		sb[sb.length] = '</table>';
		
		listArea.innerHTML = sb.join("");
		oThis.refreshStateOfSelectedRow();
	}

	var sumData = null;
	this.getSumData = function(){
		if(sumData==null){
			var data = oThis.data;
			var sumColumns = oThis.context.sum;
			for(var i=0;i<data.length;i++){
				var rowData = data[i];
				for(var j=0;j<sumColumns.length;j++){
					var sumCol = sumColumns[j];
					if(sumCol.sumValue==null||i==0)
						sumCol.sumValue = 0;	
					if(sumCol.exp==null)		
						sumCol.sumValue = sumCol.sumValue + parseFloat(oThis.getPropertyOfObj(rowData,sumCol.colName));
				}
			}
			
			for(var j=0;j<sumColumns.length;j++){
				var sumCol = sumColumns[j];
				if(sumCol.sumValue==null||i==0)
					sumCol.sumValue = 0;	
				
				if(sumCol.exp!=null){
					sumCol.sumValue = eval(sumCol.exp);
				}
			}
			sumData = sumColumns;
		}
		return sumData;
	}

	
	this.getColSum = function(sumRowData,colName){
		var sumValue = 0;
		for(var j=0;j<sumRowData.length;j++){
			var sumCol = sumRowData[j];
			if(sumCol.colName == colName){

⌨️ 快捷键说明

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