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

📄 wdmgrid.js

📁 本系统是一套完整游戏金币交易平台,可以建立一个网站实现游戏金币的在线交易
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*=====================================================
 * Date:2006-04-18  Author:sheng.qy
 =====================================================*/
 
/* 定义明细表格对象TGrid ************开始************************************************************************
 * 参数 1:创建的TGrid实例对象引用名 2:数据库表名(输出), 3:初始化数据库表名(输入), 4:页面表格对象, 5:页面表格行模板
 */
function TGrid(strGridObjName, dbTableName, dbTableNameInit, htmlTable, rowTmpArr) {
	/* 成员变量 */
	this.strGridObjName = strGridObjName;  //创建的TGrid实例对象引用名
	this.dbTableName = dbTableName;  //数据库表名(输入)
	this.dbTableNameInit = dbTableNameInit;  //初始化数据库表名(输入)
	this.htmlTable = htmlTable;  //页面表格对象
	
	this.rowTmpArr = rowTmpArr;  //页面表格行模板
	this.ioMapArr = null;  //输入表字段名与输出表字段名映射数组
	
	this.rowsArr = new Array(); //存储表格里的每一个元素
	this.rowsArrInit = new Array(); //存储表格里的每一个元素的初始值,以便以后使用
	this.totalsArr = new Array(rowTmpArr.length);  //统计字段数组,记录每列的统计值 
	this.preRowsArrLen = 0;  //表格rowsArr上一次操作前的行数	
	this.initRowsCount = 0;  //初始化之后表格的行数

	this.itemSeqColumnNum = 0;  //顺序号所在列的列数,下标从0开始
	
	this.htmlTableHeadRowCountInit = htmlTable.rows.length;  //htmlTable表格表头的行数
	this.htmlTableHeadRowCount = htmlTable.rows.length;  //htmlTable表格表头的行数
	


	/* 成员函数 */
	this.toString = gridToString;  //将TGrid对象转换成字符串
	
	this.appendRow = appendRow;
	this.importRow = importRow;
	this.importRowBatch = importRowBatch;
	this.deleteRow = deleteRow;
	this.deleteRowBatch = deleteRowBatch;
	this.computeTable = computeTable;
	this.computeTotalsArray = computeTotalsArray;
	this.refreshRow = refreshRow;
	this.refreshTable = refreshTable;
	this.dynamicTable = dynamicTable;
	this.initBuildGrid = initBuildGrid;
	this.lockInitRows = lockInitRows;

	this.resetElementsName = resetElementsName;
	
	this.getGridArr = getGridArr;
	this.getTotalsArr = getTotalsArr;
	this.getRowCount = getRowCount;
	this.getRowCountReal = getRowCountReal;
	this.getColumnCount = getColumnCount;
	
	this.focus = focus;
	this.setFieldsNameMap = setFieldsNameMap;  
	
	this.getElementObj = getElementObj;
	
	this.setTableHeadRowCount = setTableHeadRowCount;
	
	//根据x,y坐标得到rowsArr数组中的元素
	this.getGridItemValue = getGridItemValue;
	//根据x,y坐标设置rowsArr数组中的元素
	this.setGridItemValue = setGridItemValue;
	
	this.selectElementOnchange = selectElementOnchange;  //select元素onchange事件对应的函数
	
	
	
	//this.checkGrid = function(){};  //表格验证函数
	
	this.arithmetic = function(){};  //表格对象各字段之间的算法函数
	this.arithmeticInit = function(){};  //表格对象各字段之间的算法函数,用于初始化
	this.setTotals = function(){};  //汇总信息设置函数
	
	this.doBeforeDynamic = function(){};  //创建表格之前的自定义处理
	this.doAfterDynamic = function(){};  //创建表格之后的自定义处理
	

	/*调用成员函数,用于初始化操作*/
	//this.initBuildGrid();  //用于初始化表格,用于查询
	
	/*用于初始化操作,For CRM 2006-06-11*/
	var delFlagHidden = '<input type="hidden" name="C_DELETE_FLAG#" value="0">';  //删除标志,1:已删除,0:未删除
	this.rowTmpArr.push(delFlagHidden);
	//alert(this.rowTmpArr[this.rowTmpArr.length-1]);
}


/*成员函数*/
function gridToString() {
	return  "数据库表名:" + this.dbTableName + "\n" + 
			"页面表格对象:" + this.htmlTable + "\n" + 
			"页面表格行模板数组长度:" + this.rowTmpArr.length + "\n" + 
			"表格存储数组长度:" + this.rowsArr.length + "\n" + 
			"统计字段数组长度:" + this.totalsArr.length + "\n";
}


//Append a empty row in the table
function appendRow() {  
	var fieldsArray = new Array();
	for(var i=0; i<this.rowTmpArr.length; i++) {
		var aElement = document.createElement(this.rowTmpArr[i]);
		if(aElement.type!="none") {
			fieldsArray.push(aElement.value);
			//alert(aElement.value);
		}
		else { 
			fieldsArray.push("0");
		}
	}
	this.rowsArr.push(fieldsArray);
	
	//加入表格初始数组
	var fieldsArrayInit = createArr(fieldsArray);
	this.rowsArrInit.push(fieldsArrayInit);
	//alert(this.rowsArrInit.length);
	
	var tempPreRowLen = this.preRowsArrLen;
	//Build table dynamically
	//this.dynamicTable(false);
	this.dynamicTable(false, this.preRowsArrLen);
	//重新设置前面元素的名称
	//this.resetElementsName(0, tempPreRowLen-1);
}

//导入一行
function importRow(fieldsArray) {	
	//处理按钮和缺省值
	for(var i=0; i<this.rowTmpArr.length; i++) {
		var aElement = document.createElement(this.rowTmpArr[i]);
		
		if(fieldsArray[i]==undefined)  
			fieldsArray[i] = "";
			
		if(fieldsArray[i]=="")  //如果fieldsArray中没定义值,则使用rowTmpArr中的缺省值
			fieldsArray[i] = aElement.value;
			
		if(aElement.type=="button")
			fieldsArray[i] = aElement.value;
	}
	
	//加入表格数组
	this.rowsArr.push(fieldsArray);
	
	//加入表格初始数组
	var fieldsArrayInit = createArr(fieldsArray);
	this.rowsArrInit.push(fieldsArrayInit);
	//alert(this.rowsArrInit.length);
	
	var tempPreRowLen = this.preRowsArrLen;
	//Build table dynamically
	this.dynamicTable(false, this.preRowsArrLen);
	//重新设置前面元素的名称
	//this.resetElementsName(0, tempPreRowLen-1);
}

//批量导入行
function importRowBatch(rowsArray) {	
  for(var k=0; k<rowsArray.length; k++) {
	var fieldsArray = rowsArray[k];
	//处理按钮和缺省值
	for(var i=0; i<this.rowTmpArr.length; i++) {
		var aElement = document.createElement(this.rowTmpArr[i]);
		
		if(fieldsArray[i]==undefined)  
			fieldsArray[i] = "";
			
		if(fieldsArray[i]=="")  //如果fieldsArray中没定义值,则使用rowTmpArr中的缺省值
			fieldsArray[i] = aElement.value;
			
		if(aElement.type=="button")
			fieldsArray[i] = aElement.value;
	}
	
	//加入表格数组
	this.rowsArr.push(fieldsArray);
	
	//加入表格初始数组
	var fieldsArrayInit = createArr(fieldsArray);
	this.rowsArrInit.push(fieldsArrayInit);
	//alert(this.rowsArrInit.length);
  }
  
  var tempPreRowLen = this.preRowsArrLen;
  //Build table dynamically
  this.dynamicTable(false, this.preRowsArrLen);
  //重新设置前面元素的名称
  //this.resetElementsName(0, tempPreRowLen-1);
}


//根据itemseq删除一行,itemseq下标从1开始
function deleteRow(sItemSeq) {  	
	for(var i=0; i<this.rowsArr.length; i++)
	{
		if(this.rowsArr[i][this.itemSeqColumnNum] == sItemSeq && parseInt(sItemSeq)>parseInt(this.htmlTableHeadRowCount - this.htmlTableHeadRowCountInit))
		{	
			//this.rowsArr.splice(i,1); //Remove from Array
			//this.rowsArrInit.splice(i,1); //Remove from Array
			
			/*For CRM 2006-06-11*/
			this.rowsArr[i][this.rowTmpArr.length-1] = "1";
			var objDelFlag = document.getElementById(this.strGridObjName + "_" + i + "_" + (this.rowTmpArr.length-1));	
			objDelFlag.value = "1";
			var objTr = document.getElementById(this.strGridObjName+"_tr_"+i);	
			objTr.style.setAttribute("display","none");
			
			break;
		}
	}
	
	this.computeTotalsArray();  //重新计算汇总值
	//Build table dynamically
	//this.dynamicTable();
}

//根据行号批量删除行,行号下标从0开始
function deleteRowBatch(rowNumArr) {  	
	if(rowNumArr.length<1) return;

	for(var i=0; i<rowNumArr.length; i++)
	{
		for(var j=0; j<this.rowsArr.length; j++)
		{
			if(parseInt(this.rowsArr[j][this.itemSeqColumnNum]) == rowNumArr[i]+1  && rowNumArr[i]>=parseInt(this.htmlTableHeadRowCount-this.htmlTableHeadRowCountInit))
			{	
				this.rowsArr.splice(j,1); //Remove from Array
				this.rowsArrInit.splice(j,1); //Remove from Array
				break;
			}
		}
		
		//this.htmlTable.deleteRow(j+1);
	}
	
	//Build table dynamically
	this.dynamicTable();
}


//计算表格里的各个字段
function computeTable(obj) {
	var sID = obj.id;
	//alert(sID);
	var xy = sID.split("_");
	var i=0;
	var j=0;
	i = xy[1];
	j = xy[2];
	
	this.rowsArr[i][j] = obj.value;  //设置该输入框对应的数组元素,使它们保持一至
	
	//计算
	this.arithmetic(this.rowsArr[i], this.rowsArrInit[i], i);  //调用用户定义的算法函数
	
	
	//计算表格数组
	/*
	for(var k=0; k<this.rowsArr.length; k++) {
		this.arithmetic(this.rowsArr[k]);  //调用用户定义的算法函数
	}
	*/
	
	//this.refreshTable(sID); //刷新表格
	this.refreshRow(sID, i);  //刷新这一行
	
	this.computeTotalsArray();  //计算汇总
	
}


//计算总计
function computeTotalsArray() {
	var nTotal = 0.0;
	for(var i=0; i<this.totalsArr.length; i++) {
		nTotal = 0.0;
		for(var j=0; j<this.rowsArr.length; j++) {
			if(this.rowsArr[j][this.rowTmpArr.length-1]=="1") continue;  //如果是已删除的行,则不参与计算
			nTotal = nTotal + parseFloat(this.rowsArr[j][i]==""?"0":this.rowsArr[j][i]);
		}
		if(isNaN(nTotal)) nTotal = "";
		this.totalsArr[i] = nTotal;
	}
	this.setTotals(this.totalsArr);  //
}


//刷新表格,使它与数组保持一至
function refreshTable(sIDChange) {
	var sID = ""
	for(var i=0; i<this.rowsArr.length; i++) {
		for(var j=0; j<this.rowsArr[i].length; j++) {
			sID = this.strGridObjName + "_" + i + "_" + j;
			if(sID!=sIDChange) {  //不更新当前正在编辑的输入框, 只更新其它元素
				document.getElementById(sID).value = this.rowsArr[i][j];
			}
			//else if(this.rowsArr[i][j]==0) {  //如果是零,输入则设为空字符串
			//	document.getElementById(sID).value = "";
			//}
			else if(this.rowsArr[i][j]==this.rowsArrInit[i][j]) {  //如果和初始值相等,则设为初始值
				document.getElementById(sID).value = this.rowsArrInit[i][j];
			}
		}
	}
}

//刷新表格中的一行,使它与数组保持一至, rowNum:行号,下标从0开始
function refreshRow(sIDChange, rowNum) {
	var sID = ""
	var oElement;
	var i=rowNum;
		
		for(var j=0; j<this.rowsArr[i].length; j++) {
			sID = this.strGridObjName + "_" + i + "_" + j;
			oElement = document.getElementById(sID);
			if(sID!=sIDChange) {  //不更新当前正在编辑的输入框, 只更新其它元素
				if(oElement.type=="select-one") { 
				
				}
				else {
					oElement.value = this.rowsArr[i][j];
				}
			}
			//else if(this.rowsArr[i][j]==0) {  //如果是零,输入则设为空字符串
			//	oElement.value = "";
			//}
			else if(this.rowsArr[i][j]==this.rowsArrInit[i][j]) {  //如果和初始值相等,则设为初始值
				oElement.value = this.rowsArrInit[i][j];
			}
		}
		
		
}


//动态构建表格,参数: 1.是否是初始化构建; 2.从第几行开始构建(下标从0开始)
function dynamicTable(isInitBuild, startRowCount)
{	
	this.doBeforeDynamic();


	//alert(startRowCount);
	if(isInitBuild == undefined) isInitBuild = false;
	if(startRowCount == undefined) startRowCount = parseInt(this.htmlTableHeadRowCount - this.htmlTableHeadRowCountInit);
	
	
	//Remove all rows of the table 
	for(i=startRowCount; i<this.preRowsArrLen; i++)
	{
		//this.htmlTable.deleteRow(1);
		this.htmlTable.deleteRow(this.htmlTableHeadRowCount);	
	}
	
	//Output new Table
	for(i=startRowCount; i<this.rowsArr.length; i++)
	{
		//如果是初始化生成表
		if(isInitBuild == true) {
			this.arithmeticInit(this.rowsArr[i], this.rowsArrInit[i], i);  //调用用户定义的算法函数,用于初始化计算
		}
			
		//计算
		this.arithmetic(this.rowsArr[i], this.rowsArrInit[i], i);  //调用用户定义的算法函数,用于批量导入时数组时,实时动态计算
	
	
		var row = this.htmlTable.insertRow();
		row.id = this.strGridObjName + "_tr_"+i;
		//alert(row.id);
		for(j=0; j<this.rowTmpArr.length; j++) {
			//构造HTML元素
			var aElement = document.createElement(this.rowTmpArr[j]);
			
			if(aElement.type!="none") {  //如果是输入框,则进行相应处理
				
				if(aElement.type=="select-one") {  //如果是select
				  //var oSelect = document.all(aElement.name);
				  //alert(aElement.name + ";" + aElement.id);
				  var oSelect = document.getElementById(aElement.name);
				  
				  //alert(oSelect);
					
				  if(oSelect!=null) {  //如果document里有对应名称的select元素,则根据它生成select元素
					var oOptions = oSelect.options;
					//alert(oOptions);
					
					for(var m=0; m<oOptions.length; m++) {
				  			var sOptValue = '';
							var sOptText = '';
							
							sOptValue = oOptions[m].value;
							sOptText = oOptions[m].text;
							
				  			//创建option元素
							var oOption = document.createElement("OPTION");
							aElement.options.add(oOption);
							oOption.innerText = sOptText;
							oOption.value = sOptValue;
							
							//alert(this.rowsArr[i][j]+"aaa");
							//alert(sOptValue+"bbb");
							if(sOptValue==(this.rowsArr[i][j]+"")) { 
								//alert(this.rowsArr[i][j]);
								oOption.selected = true;
							}
							else if(this.rowsArr[i][j]=="" && oOptions[m].selected) {
								oOption.selected = true;
								this.rowsArr[i][j] = oOption.value;
							}
							
							
					}		

⌨️ 快捷键说明

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