巨难题:改写GRID的效率,急,解决了另开贴送300分.

tmdfsl 2005-05-13 04:17:06
这是我在asp网页中调用的一个GRID的代码,目前的代码是可用的,不过我觉得效率太差,GRID中的数据录入超过200笔就会要反应30秒以上.我希望能把他改成在10秒以内.请各位高手帮帮忙.
<public:component>
<PUBLIC:ATTACH EVENT="onmousemove" ONEVENT="onMousemoveProc()" FOR="element" />
<PUBLIC:ATTACH EVENT="onmouseup" ONEVENT="onMouseupProc()" FOR="document" />

<PUBLIC:PROPERTY NAME = "ColsTitle" put="getTitle" />
<PUBLIC:PROPERTY NAME = "ColsWidth" put="getWidth" />
<PUBLIC:PROPERTY NAME = "ColsAlignment" put="getAlignment" />
<PUBLIC:PROPERTY NAME = "ColsTitle" put="getTitle" />
<PUBLIC:PROPERTY NAME = "Cols" put="getCols" />
<PUBLIC:PROPERTY NAME = "Font" put="getFont" />

<PUBLIC:METHOD NAME="AddItem" />
<PUBLIC:METHOD NAME="CurRowBuf" />
<PUBLIC:METHOD NAME="EditItem" />
<PUBLIC:METHOD NAME="DelItem" />
<PUBLIC:METHOD NAME="SetGridArray" />
<PUBLIC:METHOD NAME="GetGridArray" />
<PUBLIC:METHOD NAME="Init" />

<script language="vbscript">

dim blnIsArry
dim aryWidth
dim aryTitle
blnIsArry=false
dim aryData
dim aryColsAlignment

//取得陣列值
function getTitle(arytmp)
aryTitle = arytmp
dim strAry
strAry=""
dim i
for i=LBound(arytmp) to UBound(arytmp)
if i <> UBound(arytmp) then
strAry = strAry & arytmp(i) & ","
else
strAry = strAry & arytmp(i)
end if
next

transintoColsTitle(strAry)

end function

//取得陣列值
function getWidth(arytmp)
aryWidth=arytmp
dim strAry
strAry=""
dim i
for i=LBound(arytmp) to UBound(arytmp)
if i <> UBound(arytmp) then
strAry = strAry & arytmp(i) & ","
else
strAry = strAry & arytmp(i)
end if
next

transintoColsWidth(strAry)

end function

//取得陣列值
function getAlignment(arytmp)
dim strAry
strAry=""
dim i
aryColsAlignment=arytmp
for i=LBound(arytmp) to UBound(arytmp)
if i <> UBound(arytmp) then
strAry = strAry & arytmp(i) & ","
else
strAry = strAry & arytmp(i)
end if
next

transintoColsAlignment(strAry)

end function

//AddItem function,傳入參數array
function AddItem(arytmp)
dim strAry
strAry=""
dim i
for i=LBound(arytmp) to UBound(arytmp)

if i <> UBound(arytmp) then
strAry = strAry & arytmp(i) & ","
else
strAry = strAry & arytmp(i)
end if
next

transintoRowData(strAry)

end function

function CurRowBuf()
dim strAry
strAry = getAryCurRow()
if strAry = "" then
CurRowBuf=""
else
CurRowBuf = Split( strAry,",")

end if
end function

function EditItem()
dim strAry
strAry = getAryCurRow()
if strAry = "" then
EditItem=""
else
deleteItem()
EditItem = Split( strAry,",")

end if
end function

function DelItem()
deleteItem()
end function



function GetGridArray()

dim aryRows
ReDim aryRows(element.document.all(strTableID).rows.length-2,element.document.all(strTableID).rows(0).cells.length-1)

dim i,j

if element.document.all(strTableID).rows.length >1 then
//共幾列
for i=1 to element.document.all(strTableID).rows.length-1

//共幾欄
for j=0 to element.document.all(strTableID).rows(0).cells.length-1
aryRows(i-1,j) = Replace(element.document.all(strTableID).rows(i).childNodes(j).childNodes(0).innerHTML," ","")
next
next

GetGridArray =aryRows

else
GetGridArray = ""
end if

end function

function SetGridArray(arytmp)
if isarray(arytmp) then
aryData=arytmp
blnIsArry=true
else
blnIsArry=false
end if


end function


function Init()
//判斷是否資料收集齊全,若資料不全則不繪製Grid
If ( strCols = "" ) Or ( Not IsArray(aryTitle) ) Or ( Not IsArray(aryWidth) ) Then
Exit Function
End If

//清空資料
if element.document.all(strTableID).rows.length >1 then

for i=element.document.all(strTableID).rows.length-1 to 1 step -1
element.document.all(strTableID).deleteRow(i)
'element.document.all(strTableID).rows(i).removeNode(true)
next
end if

//把data塞進grid
if blnIsArry=true then
//共幾列
dim strgridID

for i=LBound(aryData,1) to UBound(aryData,1)
'strgridID = "gridrow_" & element.document.all(strTableID).rows.length
set objRow = element.document.all(strTableID).insertRow()

'objRow.id=strgridID
objRow.style.cssText="font-size:13px;color:666666;"
call objRow.attachEvent("onclick",clickfun)

//call objRow.attachEvent("onblur",losefocus)
'共幾欄
for j=LBound(aryData,2) to UBound(aryData,2)
set objCell = objRow.insertCell()

objCell.innerHTML="<div UNSELECTABLE='on' style='font-size:13px;cursor:default ;width:" & cdbl(aryWidth(j))/15 & "px;height:15px;overflow:hidden; text-overflow:ellipsis' >" & aryData(i,j) & " </div>"
objCell.align=aryColsAlignment(j)


next

for j=LBound(aryData,2) to UBound(aryData,2)
if cdbl(aryWidth(j)) = 0 then
element.document.all(strTableID).rows(element.document.all(strTableID).rows.length-1).childNodes(j).style.display="none"
end if
next
next

end if

end function



</script>
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwrtv 2005-05-13
  • 打赏
  • 举报
回复
UP
tmdfsl 2005-05-13
  • 打赏
  • 举报
回复
//滑鼠移動
function onMousemoveProc()
{
try {
if( event.srcElement.id != strTableID && event.srcElement.id != strResizeLine)
{

//偵測ie版本
var strappVersion=navigator.userAgent;
var intVersion;
intVersion = eval(strappVersion.substr( strappVersion.search(/MSIE/i)+5,3));

if(blnMousedown == false && event.srcElement.id != element.id )
{
if(event.srcElement.parentElement.id == strTrID)
{
if(event.offsetX>1 && event.offsetX <element.document.all(strTrID).cells(event.srcElement.id).clientWidth-2)
{
element.document.all(strTrID).cells(event.srcElement.id).style.cursor = 'default';
}
else
{
if(event.srcElement.id != 0)
{
if(intVersion >= 6){
element.document.all(strTrID).cells(event.srcElement.id).style.cursor = 'col-resize';
}
}
else
{
if(event.offsetX >element.document.all(strTrID).cells(0).clientWidth-3){
if(intVersion >= 6){
element.document.all(strTrID).cells(event.srcElement.id).style.cursor = 'col-resize';
}
}

}
}
}
else if(event.srcElement.parentElement.id != strTrID && event.srcElement.parentElement.id != "")
{
if(event.offsetX>1 && event.offsetX <element.document.all(strTrID).cells(event.srcElement.parentElement.id).clientWidth-2)
{
element.document.all(strTrID).cells(event.srcElement.parentElement.id).style.cursor = 'default';
}
else
{
if(event.srcElement.parentElement.id != 0)
{
if(intVersion >= 6){
element.document.all(strTrID).cells(event.srcElement.parentElement.id).style.cursor = 'col-resize';
}
}
else
{
if(event.offsetX >element.document.all(strTrID).cells(0).clientWidth-3){
if(intVersion >= 6){
element.document.all(strTrID).cells(event.srcElement.parentElement.id).style.cursor = 'col-resize';
}
}

}
}
}
}
else if(blnMousedown == true)
{
if(intVersion >= 6){
element.style.cursor = 'col-resize';
}
if(event.button == 1){
element.document.all(strResizeLine).style.left=event.x-1 + element.scrollLeft;
}
}
}
}
catch(e){
alert(e);
}
}



//滑鼠下壓
function onMousedownProc()
{
try {

if(event.srcElement.parentElement.id == strTrID)
{
if(event.offsetX<2 )
{
if(event.srcElement.id != 0)
{
blnMousedown=true;
element.document.all(strResizeLine).style.display="block";
element.document.all(strResizeLine).style.left=element.document.all(strTableID).rows(0).cells(event.srcElement.id).offsetLeft;
changeID = check_0_width(eval(event.srcElement.id)-1);
}
}
else if(event.offsetX >element.document.all(strTrID).cells(event.srcElement.id).clientWidth-5)
{
blnMousedown=true;
element.document.all(strResizeLine).style.display="block";
element.document.all(strResizeLine).style.left=element.document.all(strTableID).rows(0).cells(event.srcElement.id).offsetLeft+element.document.all(strTableID).rows(0).cells(event.srcElement.id).offsetWidth;
changeID = eval(event.srcElement.id);

}
}
else
{
if(event.offsetX<2 )
{
if(event.srcElement.parentElement.id != 0)
{
blnMousedown=true;
element.document.all(strResizeLine).style.display="block";
element.document.all(strResizeLine).style.left=element.document.all(strTableID).rows(0).cells(event.srcElement.parentElement.id).offsetLeft;
changeID = check_0_width(eval(event.srcElement.parentElement.id)-1) ;
}
}
else if(event.offsetX >element.document.all(strTrID).cells(event.srcElement.parentElement.id).clientWidth-5)
{
blnMousedown=true;
element.document.all(strResizeLine).style.display="block";
element.document.all(strResizeLine).style.left=element.document.all(strTableID).rows(0).cells(event.srcElement.parentElement.id).offsetLeft+element.document.all(strTableID).rows(0).cells(event.srcElement.parentElement.id).offsetWidth;
changeID = eval(event.srcElement.parentElement.id);
}
}

}
catch(e){
alert(e);
}
}

//滑鼠放開
function onMouseupProc()
{
try {
if(blnMousedown == true)
{
element.style.cursor ="default";
element.document.all(strResizeLine).style.display="none";
blnMousedown=false;

if(element.document.all(strTrID).cells(changeID).offsetLeft+10 > eval(element.document.all(strResizeLine).style.left.replace(/px/g, ""))){
resizeColumn(20);
}
else
{
resizeColumn( eval(element.document.all(strResizeLine).style.left.replace(/px/g, "")) - element.document.all(strTrID).cells(changeID).offsetLeft-1 );

}
}
}
catch(e){
alert(e);
}
}
tmdfsl 2005-05-13
  • 打赏
  • 举报
回复
//新增資料到grid裡面
function addData(tmpary)
{

var intCols = eval(strCols);
var i;
//var strgridID ='gridrow_'+ element.document.all(strTableID).rows.length;
objRow = element.document.all(strTableID).insertRow();

//objRow.id=strgridID;
objRow.style.cssText="font-size:13px;color:666666;";
objRow.attachEvent('onclick',clickfun);

for(i=0;i<intCols ;i++)
{
objCell = objRow.insertCell();
objCell.innerHTML="<div UNSELECTABLE='on' style='cursor:default ;width:" + eval(aryColsWidth[i])/15 + "px;height:15px;overflow:hidden; text-overflow:ellipsis' >" + tmpary[i] + " </div>";
objCell.align=aryColsAlignment[i];

}
//寬度設為0時,要把該欄隱藏
for(i=0;i<intCols ;i++)
{
if(eval(aryColsWidth[i]) == 0)
{
element.document.all(strTableID).rows(element.document.all(strTableID).rows.length-1).childNodes(i).style.display="none";
}
}
}

function clickfun()
{
var rowidex = eval(event.srcElement.parentElement.parentElement.rowIndex);

if (rowidex && clickRow == "" )
{
clickRow =rowidex;
element.document.all(strTableID).rows(rowidex).style.backgroundColor= "#FFFF99";
return;
}

if (rowidex && clickRow != rowidex)
{
if(element.document.all(strTableID).rows(clickRow))
{
element.document.all(strTableID).rows(clickRow).style.backgroundColor= "#FFFFFF";
}
element.document.all(strTableID).rows(rowidex).style.backgroundColor= "#FFFF99";
clickRow =rowidex;
}
else if((rowidex && clickRow == rowidex))
{
element.document.all(strTableID).rows(rowidex).style.backgroundColor= "#FFFF99";
}

}



function losefocus()
{
var tmpID =eval(event.srcElement.parentElement.rowIndex);
if(tmpID && tmpID != 0)
{
element.document.all(strTableID).rows(tmpID).style.backgroundColor= "#FFFFFF";
}
}
//取得click列的資料,如果未click,預設為第一個值
function getAryCurRow()
{
var arycurRow = new Array() ;
var intCols = eval(strCols);
var i;

if(clickRow && clickRow != "")
{
if(element.document.all(strTableID).rows.length >1)
{
if(element.document.all(strTableID).rows.length > clickRow)
{
for(i=0;i<intCols;i++)
{
arycurRow[i]=element.document.all(strTableID).rows(clickRow).childNodes(i).childNodes(0).innerHTML;
arycurRow[i] = arycurRow[i].replace(/ /g, "");

}
}
else
{
clickRow=clickRow-1;
for(i=0;i<intCols;i++)
{
arycurRow[i]=element.document.all(strTableID).rows(clickRow).childNodes(i).childNodes(0).innerHTML;
arycurRow[i] = arycurRow[i].replace(/ /g, "");
}
}
}
else
{
return "";
}

}
else
{
if(element.document.all(strTableID).rows.length >1)
{
for(i=0;i<intCols;i++)
{
arycurRow[i]=element.document.all(strTableID).rows(1).childNodes(i).childNodes(0).innerHTML;
arycurRow[i] = arycurRow[i].replace(/ /g, "");
}
}

else
{
return "";
}
}
return arycurRow;
}

function deleteItem()
{
if(clickRow && clickRow != "")
{
if(element.document.all(strTableID).rows.length >1)
{
if(element.document.all(strTableID).rows.length > clickRow)
{
element.document.all(strTableID).rows(clickRow).removeNode(true);
}
else
{
element.document.all(strTableID).rows(clickRow-1).removeNode(true);
clickRow = clickRow-2;
}

}

}
else
{
if(element.document.all(strTableID).rows.length >1)
{
element.document.all(strTableID).rows(1).removeNode(true);
}
}
}


tmdfsl 2005-05-13
  • 打赏
  • 举报
回复
<script language="javascript">
var changeID;
var blnMousedown;
blnMousedown=false;
var strTableID;
strTableID=element.id+ "_otable";
var strTrID;
strTrID=element.id+ "_title1";
strResizeLine = element.id + "_ResizeLine";
var aryColsTitle=new Array() ;
//每個欄位的標題
var aryColsWidth=new Array() ;
//每個欄位的寬度
var aryColsAlignment=new Array() ;
//每個欄位的對齊方式
var strCols="";
//欄位數
var strFont="";
//字型
var strStyle=""
var clickRow="";
//點選列的ID

//把字串分出放入array裡面
function transintoColsTitle(tmpary)
{
aryColsTitle = tmpary.split(",");
isRedraw();

}
//把ColsWidth字串分出放入array裡面
function transintoColsWidth(tmpary)
{
aryColsWidth = tmpary.split(",");
isRedraw();
}

//把alignment字串分出放入array裡面
function transintoColsAlignment(tmpary)
{
var i;

aryColsAlignment = tmpary.split(",");
//在表格產生後,指定align格式
if(element.document.all(strTrID))
{
var intCols=eval(strCols);
for(i=0;i<intCols;i++)
{
element.document.all(strTrID).children(i).align=aryColsAlignment[i];
}
}
}

function transintoRowData(tmpary)
{
var aryRowData = new Array() ;
//資料列
aryRowData = tmpary.split(",");
addData(aryRowData);
}

function getCols(strtmp)
{
strCols = strtmp;
isRedraw();
}

function getFont(tt)
{
//strFont=tt;
//var strTableID=element.id+ "_otable";
//在表格產生後,指定font格式
if(element.document.all(strTableID))
{
element.document.all(strTableID).style.fontFamily=tt;
}
}




function drawTextBox()
{
try
{

var i;
var strHTML="";
//var totalWidth=0;
var intCols=eval(strCols);
/*var numof_0_width=0;
//strHTML += '<div style="overflow:scroll; scrollbar-face-color:white;scrollbar-highlight-color:#CCCCFF ;border-Style:window-inset;border-Width:2px;height:100px;left:10px;top:0px;width:350px;POSITION:ABSOLUTE" >';
for(i=0;i<intCols ;i++)
{
if(eval(aryColsWidth[i]) == 0)
{
numof_0_width += 1;
}
totalWidth += eval(aryColsWidth[i]);
}

totalWidth= totalWidth/15 + numof_0_width;
*/

//var totalWidth=(eval(aryColsWidth[0])+eval(aryColsWidth[1])+eval(aryColsWidth[2]))/15;
strHTML += '<table id= "' + element.id + '_otable" border="1px" cellpadding="0" cellspacing="0" > <tr id="' + element.id + '_title1" bgcolor="#6365CE" style="color:white; font-size :13px ">';
//strHTML += '<table id= "' + element.id + '_otable" border="1px" cellpadding="0" cellspacing="0" width="'+ totalWidth+ 'px" > <tr id="' + element.id + '_title1" bgcolor="#6365CE" style="color:white; font-size :13px ">';

for(i=0; i<intCols ;i++)
{
if(eval(aryColsWidth[i]) == 0)
{
strHTML += '<td width="0px" style="display:none" id="' + i +'">' + aryColsTitle[i] + '</td>';
}
else
{
strHTML += '<td UNSELECTABLE="on" style="word-wrap:break-word;border-right: buttonshadow 1px solid;padding-right: 1px;border-top: buttonhighlight 1px solid;padding-left: 1px;padding-bottom: 1px;border-left: buttonhighlight 1px solid;padding-top: 1px;border-bottom: buttonshadow 1px solid;" width="' + eval(aryColsWidth[i])/15 + 'px" id="' + i +'" ><div UNSELECTABLE="on" style="width:' + eval(aryColsWidth[i])/15 + 'px;height:13px;overflow:hidden; text-overflow:ellipsis" >' + aryColsTitle[i] + '</div></td>';
}

}
strHTML += '</tr></table>';
element.innerHTML=strHTML;
element.document.all(strTrID).attachEvent("onmousedown",onMousedownProc)

var objResizeLine;
objResizeLine = document.createElement("SPAN");
objResizeLine.id = element.id + "_ResizeLine";
var innerHeight = eval(element.style.height.replace(/px/g, ""))-20;
objResizeLine.style.cssText= "position:absolute; height:" + innerHeight + "; z-index:5; width: 1; left: 50; top: 1; background-color:black;display:none;";
element.insertAdjacentElement('afterBegin', objResizeLine);

}
catch(x)
{
alert(x);
}
}




function isRedraw()
{
var i;

if(strCols != "" && aryColsTitle != "" && aryColsWidth != "")
{
drawTextBox();
//在表格未產生前,指定font格式
if(strFont !="")
{
element.document.all(strTableID).style.fontFamily=strFont;

}
//在表格未產生前,指定Align格式
if(aryColsAlignment != "")
{
var intCols=eval(strCols);
for(i=0;i<intCols;i++)
{
element.document.all(strTrID).children(i).align=aryColsAlignment[i];
}
}

}
}

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧