快疯掉了。。。看似简单,确实我入行以来,遇到了最怪的一个问题
时间:2011-09-02
来源:互联网
删除数据的时候,如果表格中只有一条数据(如果有多条数据,没有问题),
那么删除时就会弹出窗体,说: 指定行号为:null。
但是数据能够删除成功(刷新后,就会发现,数据已经删除了),控制台也不报错。
我查了代码,发现是JSP页面的一行代码这出的问题。
如下:
financeTable().deleteRow(rowIndex)
financeTable()是我得到表格对象的用一个js方法,
deleteRow()是公司框架封装的一个由于在页面上删除数据的js方法(只是在页面上删除,数据库里的数据还需要自己去删除一下):
function TableRowSet_deleteRow(rowIndex){
if(rowIndex == null)
rowIndex = this.CurRow;
if ((rowIndex >=0) && (rowIndex < this.count())){
var sts = this.getRowSts(rowIndex);
if((sts!='NN')&& (sts!='N')){
var tmpRow = new Array();
tmpRow.I = this.getRowId(rowIndex);
var tmpCell;
for(var i=0;i<this.getColCount();i++){
tmpCell = new TableRowSet_VCell();
this.copyCell(this.getCell(rowIndex,i)[/color],tmpCell);
tmpRow[tmpRow.length] = (tmpCell);
}
this.deleteRows[this.deleteRows.length] = (tmpRow);
}
for(var i = rowIndex ;i < this.count() - 1; i++){
this.rowHideCols[i] = this.rowHideCols[i + 1]
}
this.rowHideCols[this.count() - 1] = null;
//如果是删除第一行,需求将后续的一行的单元格的属性进行设置 qianghui 20060428
var dataTable = this.getTableObject();
if(rowIndex ==0 && dataTable.rows.length >1){
for(var i = 0;i < this.HeadTable.rows(0).cells.length ;i++){
dataTable.rows(1).cells(i).width = this.HeadTable.rows(0).cells(i).width;
}
}
//如果有儿子节点,将儿子节点的父亲设置为自己的父亲
//同时将后面的节点索引减1
var tmpChildList = this.getChildList(rowIndex);
var tmpParentRowIndex = this.getParentOfRow(rowIndex);
for(var i= tmpChildList.length-1 ;i>=0;i--){
this.setParent(tmpChildList[i],tmpParentRowIndex);
}
if(this.DBTreeColName){
//没有指定DBTree的列
this.setParent(rowIndex,-1);
}
this.recomputerChildRowIndex(this.getTableObject().rows.length - 1,rowIndex,this.getTableObject().rows.length - 1,-1);
this.getTableObject().deleteRow(rowIndex);
if ( this.CurRow > rowIndex)
this.CurRow = this.CurRow - 1;
else if( this.CurRow == rowIndex){
if(this.CurRow == this.count())
this.setRow(this.CurRow - 1);
}
}
this.currentRowChange(this.CurRow,-1);
this.recomputerTotalAll();
this.modifyTotalRowCount(this.totalRowCount - 1);
this.modifyRowSequence(rowIndex);
//hexg ,20060903,更新headdiv的长度
TableRowSet_setHeadDivWidth(this.HeadDiv,this.TableDiv);
}
function TableRowSet_getCell(rowIndex,colIndex){
var tmpRow = this.getRowObj(rowIndex);
if (tmpRow == null)
return null;
if((colIndex == null)||(colIndex<0)||(colIndex >= this.getColCount()))
return null;
if (this.colIsHide[colIndex] ==false ){
return tmpRow.cells(colIndex + this.getRowHeadColCount());
}
else {//获取隐藏的虚拟单元
if(this.rowHideCols[rowIndex] == null){ //从数据Row的属性中提取隐藏列数据
this.rowHideCols[rowIndex] = new Array();
for(var i= this.visioColCount;i< this.getColCount();i++){
this.rowHideCols[rowIndex][i - this.visioColCount] = new TableRowSet_VCell();
var tmpID = "";
eval(" tmpID = tmpRow." + this.colNames[i]);
//如果是属性中包含 的话,则IE会将其转换成字节码为160的字符,16进制为A0
var str_160 = String.fromCharCode(160);
if(tmpID!=null && tmpID.indexOf(str_160)>-1){
tmpID = tmpID.replace(/\xA0/g,' ');
eval("tmpRow." + this.colNames[i] + " = tmpID");
}
var tmpText = "";
eval(" tmpText = tmpRow." + this.colNames[i] +"_DISPLAY");
if(!tmpText){
this.rowHideCols[rowIndex][i - this.visioColCount ].innerText = tmpID;
}else{
this.rowHideCols[rowIndex][i - this.visioColCount ].innerText = tmpText;
this.rowHideCols[rowIndex][i - this.visioColCount ].I = tmpID;
}
}
}
return this.rowHideCols[rowIndex][ colIndex - this.visioColCount];
}
}
function TableRowSet_getRowObj(rowIndex){
if([color=#FF0000]rowIndex == null){
alert(g_I18NMessage("appframe_core","table_row_null")); return null;
}
rowIndex = parseInt(rowIndex);
if ((rowIndex >=0)&&(rowIndex < this.realcount()))
return this.getTableObject().rows(rowIndex);
else
return null;
}
图中标红的代码,就是报错的代码。如果table中只用1行数据,我删除时,公司封装的js方法,回去遍历每隔单元格cell。
当循环到这行数据最后一个单元格时,行号就变成了空。。。我真是郁闷了。别的table删除也是用这个js,没有问题。。。
那么删除时就会弹出窗体,说: 指定行号为:null。
但是数据能够删除成功(刷新后,就会发现,数据已经删除了),控制台也不报错。
我查了代码,发现是JSP页面的一行代码这出的问题。
如下:
financeTable().deleteRow(rowIndex)
financeTable()是我得到表格对象的用一个js方法,
deleteRow()是公司框架封装的一个由于在页面上删除数据的js方法(只是在页面上删除,数据库里的数据还需要自己去删除一下):
function TableRowSet_deleteRow(rowIndex){
if(rowIndex == null)
rowIndex = this.CurRow;
if ((rowIndex >=0) && (rowIndex < this.count())){
var sts = this.getRowSts(rowIndex);
if((sts!='NN')&& (sts!='N')){
var tmpRow = new Array();
tmpRow.I = this.getRowId(rowIndex);
var tmpCell;
for(var i=0;i<this.getColCount();i++){
tmpCell = new TableRowSet_VCell();
this.copyCell(this.getCell(rowIndex,i)[/color],tmpCell);
tmpRow[tmpRow.length] = (tmpCell);
}
this.deleteRows[this.deleteRows.length] = (tmpRow);
}
for(var i = rowIndex ;i < this.count() - 1; i++){
this.rowHideCols[i] = this.rowHideCols[i + 1]
}
this.rowHideCols[this.count() - 1] = null;
//如果是删除第一行,需求将后续的一行的单元格的属性进行设置 qianghui 20060428
var dataTable = this.getTableObject();
if(rowIndex ==0 && dataTable.rows.length >1){
for(var i = 0;i < this.HeadTable.rows(0).cells.length ;i++){
dataTable.rows(1).cells(i).width = this.HeadTable.rows(0).cells(i).width;
}
}
//如果有儿子节点,将儿子节点的父亲设置为自己的父亲
//同时将后面的节点索引减1
var tmpChildList = this.getChildList(rowIndex);
var tmpParentRowIndex = this.getParentOfRow(rowIndex);
for(var i= tmpChildList.length-1 ;i>=0;i--){
this.setParent(tmpChildList[i],tmpParentRowIndex);
}
if(this.DBTreeColName){
//没有指定DBTree的列
this.setParent(rowIndex,-1);
}
this.recomputerChildRowIndex(this.getTableObject().rows.length - 1,rowIndex,this.getTableObject().rows.length - 1,-1);
this.getTableObject().deleteRow(rowIndex);
if ( this.CurRow > rowIndex)
this.CurRow = this.CurRow - 1;
else if( this.CurRow == rowIndex){
if(this.CurRow == this.count())
this.setRow(this.CurRow - 1);
}
}
this.currentRowChange(this.CurRow,-1);
this.recomputerTotalAll();
this.modifyTotalRowCount(this.totalRowCount - 1);
this.modifyRowSequence(rowIndex);
//hexg ,20060903,更新headdiv的长度
TableRowSet_setHeadDivWidth(this.HeadDiv,this.TableDiv);
}
function TableRowSet_getCell(rowIndex,colIndex){
var tmpRow = this.getRowObj(rowIndex);
if (tmpRow == null)
return null;
if((colIndex == null)||(colIndex<0)||(colIndex >= this.getColCount()))
return null;
if (this.colIsHide[colIndex] ==false ){
return tmpRow.cells(colIndex + this.getRowHeadColCount());
}
else {//获取隐藏的虚拟单元
if(this.rowHideCols[rowIndex] == null){ //从数据Row的属性中提取隐藏列数据
this.rowHideCols[rowIndex] = new Array();
for(var i= this.visioColCount;i< this.getColCount();i++){
this.rowHideCols[rowIndex][i - this.visioColCount] = new TableRowSet_VCell();
var tmpID = "";
eval(" tmpID = tmpRow." + this.colNames[i]);
//如果是属性中包含 的话,则IE会将其转换成字节码为160的字符,16进制为A0
var str_160 = String.fromCharCode(160);
if(tmpID!=null && tmpID.indexOf(str_160)>-1){
tmpID = tmpID.replace(/\xA0/g,' ');
eval("tmpRow." + this.colNames[i] + " = tmpID");
}
var tmpText = "";
eval(" tmpText = tmpRow." + this.colNames[i] +"_DISPLAY");
if(!tmpText){
this.rowHideCols[rowIndex][i - this.visioColCount ].innerText = tmpID;
}else{
this.rowHideCols[rowIndex][i - this.visioColCount ].innerText = tmpText;
this.rowHideCols[rowIndex][i - this.visioColCount ].I = tmpID;
}
}
}
return this.rowHideCols[rowIndex][ colIndex - this.visioColCount];
}
}
function TableRowSet_getRowObj(rowIndex){
if([color=#FF0000]rowIndex == null){
alert(g_I18NMessage("appframe_core","table_row_null")); return null;
}
rowIndex = parseInt(rowIndex);
if ((rowIndex >=0)&&(rowIndex < this.realcount()))
return this.getTableObject().rows(rowIndex);
else
return null;
}
图中标红的代码,就是报错的代码。如果table中只用1行数据,我删除时,公司封装的js方法,回去遍历每隔单元格cell。
当循环到这行数据最后一个单元格时,行号就变成了空。。。我真是郁闷了。别的table删除也是用这个js,没有问题。。。
作者: jidu01 发布时间: 2011-09-02
删除数据的时候,如果表格中只有一条数据(如果有多条数据,没有问题),
那么删除时就会弹出窗体,说: 指定行号为:null。
但是数据能够删除成功(刷新后,就会发现,数据已经删除了),控制台也不报错。
我查了代码,发现是JSP页面的一行代码这出的问题。
如下:
financeTable().deleteRow(rowIndex)
financeTable()是我得到表格对象的用一个js方法,
deleteRow()是公司框架封装的一个由于在页面上删除数据的js方法(只是在页面上删除,数据库里的数据还需要自己去删除一下):
function TableRowSet_deleteRow(rowIndex){
if(rowIndex == null)
rowIndex = this.CurRow;
if ((rowIndex >=0) && (rowIndex < this.count())){
var sts = this.getRowSts(rowIndex);
if((sts!='NN')&& (sts!='N')){
var tmpRow = new Array();
tmpRow.I = this.getRowId(rowIndex);
var tmpCell;
for(var i=0;i<this.getColCount();i++){
tmpCell = new TableRowSet_VCell();
this.copyCell(this.getCell(rowIndex,i),tmpCell);
tmpRow[tmpRow.length] = (tmpCell);
}
this.deleteRows[this.deleteRows.length] = (tmpRow);
}
for(var i = rowIndex ;i < this.count() - 1; i++){
this.rowHideCols[i] = this.rowHideCols[i + 1]
}
this.rowHideCols[this.count() - 1] = null;
//如果是删除第一行,需求将后续的一行的单元格的属性进行设置 qianghui 20060428
var dataTable = this.getTableObject();
if(rowIndex ==0 && dataTable.rows.length >1){
for(var i = 0;i < this.HeadTable.rows(0).cells.length ;i++){
dataTable.rows(1).cells(i).width = this.HeadTable.rows(0).cells(i).width;
}
}
//如果有儿子节点,将儿子节点的父亲设置为自己的父亲
//同时将后面的节点索引减1
var tmpChildList = this.getChildList(rowIndex);
var tmpParentRowIndex = this.getParentOfRow(rowIndex);
for(var i= tmpChildList.length-1 ;i>=0;i--){
this.setParent(tmpChildList[i],tmpParentRowIndex);
}
if(this.DBTreeColName){
//没有指定DBTree的列
this.setParent(rowIndex,-1);
}
this.recomputerChildRowIndex(this.getTableObject().rows.length - 1,rowIndex,this.getTableObject().rows.length - 1,-1);
this.getTableObject().deleteRow(rowIndex);
if ( this.CurRow > rowIndex)
this.CurRow = this.CurRow - 1;
else if( this.CurRow == rowIndex){
if(this.CurRow == this.count())
this.setRow(this.CurRow - 1);
}
}
this.currentRowChange(this.CurRow,-1);
this.recomputerTotalAll();
this.modifyTotalRowCount(this.totalRowCount - 1);
this.modifyRowSequence(rowIndex);
//hexg ,20060903,更新headdiv的长度
TableRowSet_setHeadDivWidth(this.HeadDiv,this.TableDiv);
}
function TableRowSet_getCell(rowIndex,colIndex){
var tmpRow = this.getRowObj(rowIndex);
if (tmpRow == null)
return null;
if((colIndex == null)||(colIndex<0)||(colIndex >= this.getColCount()))
return null;
if (this.colIsHide[colIndex] ==false ){
return tmpRow.cells(colIndex + this.getRowHeadColCount());
}
else {//获取隐藏的虚拟单元
if(this.rowHideCols[rowIndex] == null){ //从数据Row的属性中提取隐藏列数据
this.rowHideCols[rowIndex] = new Array();
for(var i= this.visioColCount;i< this.getColCount();i++){
this.rowHideCols[rowIndex][i - this.visioColCount] = new TableRowSet_VCell();
var tmpID = "";
eval(" tmpID = tmpRow." + this.colNames[i]);
//如果是属性中包含 的话,则IE会将其转换成字节码为160的字符,16进制为A0
var str_160 = String.fromCharCode(160);
if(tmpID!=null && tmpID.indexOf(str_160)>-1){
tmpID = tmpID.replace(/\xA0/g,' ');
eval("tmpRow." + this.colNames[i] + " = tmpID");
}
var tmpText = "";
eval(" tmpText = tmpRow." + this.colNames[i] +"_DISPLAY");
if(!tmpText){
this.rowHideCols[rowIndex][i - this.visioColCount ].innerText = tmpID;
}else{
this.rowHideCols[rowIndex][i - this.visioColCount ].innerText = tmpText;
this.rowHideCols[rowIndex][i - this.visioColCount ].I = tmpID;
}
}
}
return this.rowHideCols[rowIndex][ colIndex - this.visioColCount];
}
}
function TableRowSet_getRowObj(rowIndex){
if(rowIndex == null){
alert(g_I18NMessage("appframe_core","table_row_null")); return null;
}
rowIndex = parseInt(rowIndex);
if ((rowIndex >=0)&&(rowIndex < this.realcount()))
return this.getTableObject().rows(rowIndex);
else
return null;
}
图中标红的代码,就是报错的代码。如果table中只用1行数据,我删除时,公司封装的js方法,回去遍历每隔单元格cell。
当循环到这行数据最后一个单元格时,行号就变成了空。。。我真是郁闷了。别的table删除也是用这个js,没有问题。。。
作者: jidu01 发布时间: 2011-09-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28