问题接着上次的,用Page.RegisterStartupScript(Page.GetType().ToString(), js)注册javascript脚本中用到后台vb.net定义的一个二维数组。部分代码:js += "for(i=0;i<" & arrcellsall.Length & ";i++){ "
            js += "  NewHTML+=""<tr>"" ;"
            js += "  for(j=0;j<DataTitles.length;j++){ "
            js += "      NewHTML+=""<td><div> "" + " & arrcellsall(i, j) & " + ""  </div></td>"" ;"
            js += "  } "
            js += "  NewHTML+=""</tr>"" ;"
            js += "} "问题是下标,这里(i,j)显示是在后台定义的,js循环代码中的i,j的值进不了数组下标,怎么办?

解决方案 »

  1.   

    .............这两个循环变量执行的位置不同,执行的对象也不同啊。一个是要在浏览器上有js来执行,一个是要在后台由cs或者vb来执行的你到底想干嘛?
      

  2.   

    我在网上找的一段实现 锁定表格栏位的 js代码,那里面是用数组给单元格赋值的我想用上这功能,但我的数组得要在后台取值,然后再给js赋值啊,要给js赋值就想到用RegisterStartupScript了。前辈有什么更好的解决办法吗?
      

  3.   

    你能不能分清楚哪些是你前台js需要的东西,哪些是你后台cs或者vb需要的东西?我感觉你这些都没分清楚啊。你能不能用最简单的模型把你要干的事情描述清楚?
      

  4.   

    前辈可以到这个网站看一下:http://www.yiloo.com/js/t232.htm我想实现那样的功能,它的代码不分前台后台,直接执行就行。但我想用这个功能,就想到把它的关键部分一段js代码 放到后台取到后台数组的值,再用RegisterStartupScript送到前台执行显示。然后就遇到上面的问题了
    不知道有没有说清楚…
      

  5.   

    刚才为了表达简单省了一点代码,这段完整些:
                js += "for(i=0;i<" & arrcellsall.Length & ";i++){ "
                js += "  NewHTML+=""<tr>"" ;"
                js += "  for(j=0;j<DataTitles.length;j++){ "
                js += "      var h =i;"
                js += "      if (j!=0) {"
                js += "      i = - parseInt(-i*1.0/j);"
                js += "} "            js += "      NewHTML+=""<td><div> "" + " & arrcellsall(i, j) & " + ""  </div></td>"" ;"
                js += "      i = h;"
                js += "  } "
                js += "  NewHTML+=""</tr>"" ;"
                js += "} "            
      

  6.   

    不好意思,这就贴上本来已经有一个table用来显示数据的,但功能太少。
    没办法,只好用数组再存一边了。            Dim i, j As Integer
                Dim arrcellsall(dtwl.Rows.Count + dtwl1.Rows.Count + dtwl2.Rows.Count + 4, 22) As String
                For i = 0 To dtwl.Rows.Count
                    For j = 0 To 21
                        arrcellsall(i, j) = arrcells(i, j)
                    Next
                Next
                For i = dtwl.Rows.Count + 1 To dtwl.Rows.Count + dtwl1.Rows.Count + 1
                    For j = 0 To 21
                        arrcellsall(i, j) = arrcells1(i - dtwl.Rows.Count - 1, j)
                    Next
                Next
                For i = dtwl.Rows.Count + dtwl1.Rows.Count + 2 To dtwl.Rows.Count + dtwl1.Rows.Count + dtwl2.Rows.Count + 2
                    For j = 0 To 21
                        arrcellsall(i, j) = arrcells2(i - dtwl.Rows.Count - dtwl1.Rows.Count - 2, j)
                    Next
                Next            Dim js As String
                js += "<script language='javascript' type=""text/javascript""> "
                js += "var DataTitles=new Array("
                js += "'物料代码  #130 #left'  ,"
                ………………
                js += "'偏差值   #88 #center');"
                js += "var BoxWidth = 800; "
                js += "var ShowLine = 20; "
                js += "var RsHeight = 21; "
                js += "var LockCols = 1 ;"
                js += "function WriteTable(){"
                js += "var iBoxWidth=BoxWidth  ;"
                js += "var NewHTML=""<table border=\""0\"" cellpadding=\""0\"" cellspacing=\""0\""><tr>\"
                js += "<td><div style=\""width:100%;overflow-x:scroll\"">\"
                js += "<table border=\""0\"" cellpadding=\""0\"" cellspacing=\""0\""><tr>"" ;"
                js += "for(i=0;i<DataTitles.length;i++){ "
                js += "  if(i<LockCols){ "
                js += "    var cTitle=DataTitles[i].split(""#"") ;"
                js += "    iBoxWidth-=cTitle[1] ;"
                js += "    var DynTip=((i+1)==LockCols)?""解除锁定"":""锁定此栏位"" ;"
                js += "    NewHTML+=""<td><div class=\""title\"" style=\""width:""+cTitle[1]+""px;height:""+RsHeight+""px\""title=\""""+DynTip+""\"" onclick=\""ResetTable(""+i+"")\"">""+cTitle[0]+""</div></td>"" ;"
                js += "  } "
                js += "} "
                js += "NewHTML+=""</tr>\"
                js += "<tr><td colspan=\""""+LockCols+""\"">\"
                js += "<div id=\""DataFrame1\"" style=\""position:relative;width:100%;overflow:hidden\"">\"
                js += "<div id=\""DataGroup1\"" style=\""position:relative\""></div></div>\"
                js += "</td></tr></table></div></td>\"
                js += "<td valign=\""top\""><div style=\""width:""+iBoxWidth+""px;overflow-x:scroll\"">\"
                js += "<table border=\""0\"" cellpadding=\""0\"" cellspacing=\""0\""><tr>"" ;"
                js += "for(i=0;i<DataTitles.length;i++){ "
                js += "  if(i>=LockCols){ "
                js += "    var cTitle=DataTitles[i].split(""#"") ;"
                js += "    NewHTML+=""<td><div class=\""title\"" style=\""width:""+cTitle[1]+""px;height:""+RsHeight+""px\""title=\""锁定此栏位\"" onclick=\""ResetTable(""+i+"")\"">""+cTitle[0]+""</div></td>"" ;"
                js += "  } "
                js += "} "
                js += "NewHTML+=""</tr>\"
                js += "<tr><td colspan=\""""+(DataTitles.length-LockCols)+""\"">\"
                js += "<div id=\""DataFrame2\"" style=\""position:relative;width:100%;overflow:hidden\"">\"
                js += "<div id=\""DataGroup2\"" style=\""position:relative\""></div>\"
                js += "</div></td></tr></table>\"
                js += "</div></td><td valign=\""top\"">\"
                js += "<div id=\""DataFrame3\"" style=\""position:relative;background:#000;overflow-y:scroll\"" onscroll=\""SYNC_Roll()\"">\"
                js += "<div id=\""DataGroup3\"" style=\""position:relative;width:1px;visibility:hidden\""></div>\"
                js += "</div></td></tr></table>"" ;"
                js += "DataTable.innerHTML=NewHTML ;"
                js += "ApplyData() ;"
                js += "} "            js += "function ApplyData(){"
                js += "var NewHTML=""<table border=\""0\"" cellpadding=\""0\"" cellspacing=\""0\"">"" ;"
                js += "for(i=0;i<" & arrcellsall.Length & ";i++){ "
                js += "  NewHTML+=""<tr>"" ;"
                js += "  for(j=0;j<DataTitles.length;j++){ "
                js += "    if(j<LockCols){ "
                js += "      var cTitle=DataTitles[j].split(""#"") ;"
                js += "      var h =i;"
                js += "      if (j!=0) {"
                js += "      i = - parseInt(-i*1.0/j);"
                js += "      } "
                js += "      NewHTML+=""<td><div class=\""cdata\"" style=\""width:""+cTitle[1]+""px;height:""+RsHeight+""px;text-align:""+cTitle[2]+""\"">"" + " & arrcellsall(5, j) & " + ""  </div></td>"" ;"
                js += "      i = h;"
                js += "    } "
                js += "  } "
                js += "  NewHTML+=""</tr>"" ;"
                js += "} "
                js += "NewHTML+=""</table>"" ;"
                js += "DataGroup1.innerHTML=NewHTML ;"
                js += " "
                js += "var NewHTML=""<table border=\""0\"" cellpadding=\""0\"" cellspacing=\""0\"">"" ;"
                js += "for(i=0;i<" & arrcellsall.Length & ";i++){ "
                js += "  NewHTML+=""<tr>"" ;"
                js += "  for(j=0;j<DataTitles.length;j++){ "
                js += "    if(j>=LockCols){ "
                js += "      var cTitle=DataTitles[j].split(""#"") ;"
                js += "      var h =i;"
                js += "      if (j!=0) {"
                js += "      i = - parseInt(-i*1.0/j);"
                js += "} "
                js += "      NewHTML+=""<td><div class=\""cdata\"" style=\""width:""+cTitle[1]+""px;height:""+RsHeight+""px;text-align:""+cTitle[2]+""\""> "" + " & arrcellsall(5, j) & " + ""  </div></td>"" ;"
                js += "      i = h;"
                js += "    } "
                js += "  } "
                js += "  NewHTML+=""</tr>"" ;"
                js += "} "
                js += "NewHTML+=""</table>"" ;"
                js += "DataGroup2.innerHTML=NewHTML ;"
                js += "DataFrame1.style.pixelHeight=RsHeight*ShowLine ;"
                js += "DataFrame2.style.pixelHeight=RsHeight*ShowLine ;"
                js += "DataFrame3.style.pixelHeight=RsHeight*ShowLine+RsHeight ;"
                js += "DataGroup3.style.pixelHeight=RsHeight*(" & arrcellsall.Length & " +1) ;"
                js += "} "
                js += "function ResetTable(n){ "
                js += "var iBoxWidth=0 ;"
                js += "for(i=0;i<DataTitles.length;i++){ "
                js += "  if(i<(n+1)){ "
                js += "    var cTitle=DataTitles[i].split(""#"") ;"
                js += "    iBoxWidth+=parseInt(cTitle[1]) ;"
                js += "  } "
                js += "} "
                js += "if(iBoxWidth>BoxWidth){ "
                js += "  var Sure=confirm(""\n锁定栏位的宽度大於资料表显示的宽  \n\n度,这可能会造成版面显示不正常。\n\n\n您确定要继续吗?"") ;"
                js += "}else{ "
                js += "  Sure=true ;"
                js += "} "
                js += "if(Sure){ "
                js += "  LockCols=(LockCols==n+1)?0:n+1 ;"
                js += "  WriteTable() ;"
                js += "} "
                js += "} "
                js += "function SYNC_Roll(){ "
                js += "DataGroup1.style.posTop=-DataFrame3.scrollTop ;"
                js += "DataGroup2.style.posTop=-DataFrame3.scrollTop; "
                js += "} "
                js += "window.onload=WriteTable ;"
                js += "</script>"            Page.RegisterStartupScript(Page.GetType().ToString(), js)
      

  7.   

    你在vb循环外面写vb的循环变量有啥用啊我到现在都不明白你这个ij到底是vb的ij还是js的ij
      

  8.   

    开始我没想到i,j会有这个歧义的,后来发现数组里i,j一直是空值才知道循环里的变量i,j传不到数组里。
      

  9.   

    这压根就没有歧义这里的ij根本就是串不起来的所有在js字符串里面的ij都是在浏览器端执行的,在vb中只是一个“ij”的字符串而已。真正在vb中执行的是vb自己的ij。
      

  10.   

    确实有点乱 O(∩_∩)O最上面定义的i,j是用来给数组赋值用的,没打算用在js里。因为对函数RegisterStartupScript不了解,导致上面的尴尬,请见谅。
      

  11.   

    RegisterStartupScript只不过是从vb里面往页面上输入js代码而已,跟执行js有啥关系?你自己把循环变量搞清楚就行了。关键是你要分清哪些是js的循环变量,哪些是vb的循环变量。PS:你的循环变量写在vb循环外面,则vb将只执行一次。
      

  12.   

    到现在还是不清楚你到底想干嘛,不过有一点是可以肯定的,你没搞清楚浏览器运行代码和后台运行代码。你现在唯一能做的就是,把那一大段js放到vb的for循环里面试试看