Control treeView en asp

Tengo un problemón con el control treeView en asp, te cuento. Quiero hacer un Árbol con este control. No le quiero cargar entero al principio porque son muchísimos registros y tarda mucho tiempo. Lo que quiero hacer es cargar el primer nivel, y después en el elemento que hagas doble click se desplieguen sus hijos. Cuando hago doble click tengo que hacer una consulta a la base de datos para obtener los hijos de este elemento. Trabajando con VBScript no me deja hacer la conexión a la base de datos porque no está trabajando del lado del servidor. He intentado hacer lo siguiente pero tengo varios problemas:
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<OBJECT classid="clsid:0713E8A2-850A-101B-AFC0-4210102A8DA7" height=165 id=Arbol style="HEIGHT: 165px; LEFT: 0px; TOP: 0px; WIDTH: 553px"
width=553 VIEWASTEXT>
<PARAM NAME="_ExtentX" VALUE="14631">
<PARAM NAME="_ExtentY" VALUE="4366">
<PARAM NAME="_Version" VALUE="327682">
<PARAM NAME="HideSelection" VALUE="0">
<PARAM NAME="Indentation" VALUE="1005">
<PARAM NAME="LabelEdit" VALUE="0">
<PARAM NAME="LineStyle" VALUE="0">
<PARAM NAME="PathSeparator" VALUE="\">
<PARAM NAME="Sorted" VALUE="0">
<PARAM NAME="Style" VALUE="7">
<PARAM NAME="ImageList" VALUE="">
<PARAM NAME="BorderStyle" VALUE="0">
<PARAM NAME="Appearance" VALUE="1">
<PARAM NAME="MousePointer" VALUE="0">
<PARAM NAME="Enabled" VALUE="1">
<PARAM NAME="OLEDragMode" VALUE="0">
<PARAM NAME="OLEDropMode" VALUE="0"></OBJECT>
<SCRIPT LANGUAGE="VBSCRIPT">
Sub Arbol_DblClick()
dim elemSel
elemSel = Arbol.SelectedItem.Key
call Expandir_Hijos (elemSel)
end sub
Sub Expandir_Hijos(elemSel)
dim nivel
dim clave
dim pos
dim ceros
dim cadenaceros
dim k
dim nivelhij
dim nivelhijstr
dim poshij
dim BD2
dim rshij
dim sqlhij
dim vozprue
nivel = Cint(Left(elemSel,1)) * 2
clave = mid (elemSel,2,nivel)
ceros = 39 - nivel
cadenaceros = ""
for k = 1 to ceros
cadenaceros = cadenaceros & "0"
next
pos = clave & "%" & cadenaceros
<%
nombrebase="Jurisprudencia"
Set BD2 = Server.CreateObject("ADODB.Connection")
BD2.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='" & nombrebase & "';Data Source=Desar5\segunda"
sqlhij = "SELECT * FROM RESTHE WHERE THEPOS LIKE '" & pos & "'"
Set rshij=Server.CreateObject("ADODB.Recordset")
rshij.Open sqlhij, BD2, adOpenKeyset, adLockOptimistic
%>
nivelhij = Cint(Left(elemSel,1)) + 1
nivelhijstr = " nivelhij "
<%
while rshij.EOF = false
poshij = rshij("THEPOS")
poshij = nivelhijstr & poshij
%>
Arbol.SelectedItem.Expanded = true
Arbol.SelectedItem.EnsureVisible
Arbol.Nodes.Add <%=elemtosel%>, 4, <%=poshij%> , <%=rshij("THEVOZ")%>
<%
rshij.MoveNext
wend
%>
End Sub
</SCRIPT>
<%
dim rs
dim sqlIni
dim ruta
dim des
dim padre
dim ant
dim i
dim BD
dim nombrebase
nombrebase = "Jurisprudencia"
Set BD = Server.CreateObject("ADODB.Connection")
BD.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='" & nombrebase & "';Data Source=Desar5\segunda"
sqlIni = "SELECT * FROM RESTHE WHERE THEPOS LIKE '%00000000000000000000000000000000000000'"
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open sqlIni, BD, 1, 3
i = 1
While rs.EOF = False
%>
<SCRIPT LANGUAGE="VBSCRIPT">
dim voz
dim clave
voz = "<%=rs("THEVOZ")%>"
clave = "1" & "<%=rs("THEPOS")%>"
Arbol. Nodes. Add,, clave, voz
</Script>
<%
i = i + 1
Rs. MoveNext
Wend
%>
</BODY>
</HTML>
La variable "pos" no me la reconoce el asp porque esta en VBScript, y si lo hago todo en VBScript tengo el problema de la conexión a la BD. He probado de todo y no se como hacerlo. Espero que tengas alguna sugerencia. Gracias de antemano. Un saludo. Juan
PD. Estoy trabajado con Visual InterDev

1 respuesta

Respuesta
1
Es problema es que estás mezclando código en cliente y código en servidor. Cuando el navegador solicita una página ASP, el servidor la compila, ejecuta el código y devuelve HTML, que luego es ejecutado en el cliente. En el momento que estás viendo la página, la parte de código ASP ya ha sido ejecutada, y no hay manera de pasarle variables ni nada de eso.
Para hacer lo que quieres, tienes que "jugar" con frames ocultos. Por ejemplo, en el código HTML de la página defines <iframe name="servicio" src="" style="display:none"></iframe>. La función Expandir_hijos, lo que debería hacer es cargar en ese iframe una página ASP que devuelva la información que quieres, y luego procesar la respuesta de esa página. Por ejemplo, después de la asignación de "pos" pones:
self.frames("servicio").location.replace "pagina.asp?pos=" & pos
setTimeout("espera",100)
end sub
"espera" es la siguiente Sub:
Sub espera()
if self.frames("servicio").document.readystate<>"complete" then
settimeout("espera",100)
else
set respuesta=self.frames("servicio").document
elemtosel=respuesta.getelementbytagname("elemtosel")
poshij=respuesta.getelementbytagname("poshij")
rshij=respuesta.getelementbytagname("rshij")
Arbol. Nodes. Add elemtosel, 4, poshij, rshij
...
La página
"página.asp" hará la consulta a la base de datos según el valor recibido en request("pos"), y luego devolverá los resultados de este modo:
response.write "<elemtosel>" & elemtosel & "</elemtosel><poshij>" & poshij & "</poshij><rshij>" & rshij("THEVOZ") & "</rshij>"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas