📄 wdmgrid_old.js
字号:
/*=====================================================
* 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.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; //
//this.checkGrid = function(){}; //表格验证函数
this.arithmetic = function(){}; //表格对象各字段之间的算法函数
this.arithmeticInit = function(){}; //表格对象各字段之间的算法函数,用于初始化
this.setTotals = 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("tr_"+i);
objTr.style.setAttribute("display","none");
break;
}
}
//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]); //调用用户定义的算法函数
//计算表格数组
/*
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++) {
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)
{
//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]); //调用用户定义的算法函数,用于初始化计算
}
//计算
this.arithmetic(this.rowsArr[i], this.rowsArrInit[i]); //调用用户定义的算法函数,用于批量导入时数组时,实时动态计算
var row = this.htmlTable.insertRow();
row.id = "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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -