Foros del Web » Programando para Internet » ASP Clásico »

Combobox dependientes con valores por default ambos

Estas en el tema de Combobox dependientes con valores por default ambos en el foro de ASP Clásico en Foros del Web. Hola amigos, trabajo en una empresa que me pidio un formulario con las opciones basicas de borrado, agregar y actualizar. Los valores son adquiridos por ...
  #1 (permalink)  
Antiguo 09/10/2009, 12:00
 
Fecha de Ingreso: octubre-2009
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Combobox dependientes con valores por default ambos

Hola amigos, trabajo en una empresa que me pidio un formulario con las opciones basicas de borrado, agregar y actualizar. Los valores son adquiridos por medio de combobox y un par que son dependientes.

Los logre hacer funcionar a la perfeccion pero el problema fue cuando me toca hacer la pantalla de update, logre inicializar todos los combos exceptuando uno, el combo que no logre llenar fue el dependiente que se llena por medio de javascript .

Les anexo el Codigo que estoy trabajando:



<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
<meta name="GENERATOR" content="Microsoft FrontPage 12.0"/>

<script type="text/javascript">

<!-- Hide this script from incompatible Web browsers!


function Actualiza(){

if(Relacion.preceptor.value==""){
alert("Ingresa un nombre");
}
else if(Relacion.generacionIni.value==""){
alert("Debes escoger una generacion inicial");
}
else if(Relacion.generacionFin.value==""){
alert("Debes escoger una generacion final")
}

else if(Relacion.Grupo.value==""){
alert("Debes escoger un Grupo");
}
else if(Relacion.Equipo.value==""){
alert("Debes escoger un Equipo");
}
else if(Relacion.zona.value==""){
alert("Escoge un zona de comedor");
}
else if(Relacion.subcatagory.value==""){
alert("Escoge un comedor");
}
//Una vez validados todos los datos procede a enviarlos a updatePreceptor.asp =D
else{

document.Relacion.guarda.value = 3;
document.Relacion.submit();
window.opener.location.reload();
window.close();



}
}






<%
dim rs_ncom
dim querycom

set rs_ncom = server.CreateObject("ADODB.Recordset")

querycom = " select id_comedor,id_zonacomdr,str_nombcomdr from Comedores "&_
" where id_zonacomdr <> 8 " &_
" and id_zonacomdr <= 15"&_
" order by n_orden"

rs_ncom.open querycom,objConn

dim x,y
x=0

%>

function sublista(inform, selecteditem){ //esta es la funcion con la que lleno el segundo combobox al realizar el metodo onchange del primer combo
//alert("entro");
inform.subcatagory.length = 0

<%
dim count
count= 0
y=0
do while not rs_ncom.eof
%>

x = <%= trim(y) %>;

subcat = new Array();
subcatagorys = "<%=replace(rs_ncom("str_nombcomdr"),"""","\""")%> ";
subcatagoryof = "<%=replace(rs_ncom("id_zonacomdr"),"""","\""" ) %>";
subcatagoryid = "<%=replace(rs_ncom("id_comedor"),"""","\""") %>";
subcat[x,0] = subcatagorys;
subcat[x,1] = subcatagoryof;
subcat[x,2] = subcatagoryid;

if (subcat[x,1] == selecteditem) {
var option<%= trim(count) %> = new Option(subcat[x,0], subcat[x,2]);
inform.subcatagory.options[inform.subcatagory.length]=option<%= trim(count)%>;
}

<%
count = count + 1
y = y + 1
rs_ncom.movenext
loop
rs_ncom.close
set rs_ncom = nothing
%>

}

// Hide this script from incompatible Web browsers! -->
</script>

<style type="text/css">
<!--
A:visited {color:#324395; text-decoration: none}
A:hover {color:white;background-color: #7D8BBE; text-decoration: none}
A:active {color:red;background-color: white; text-decoration: none}
A:link {color:#324395; text-decoration: none}
BODY {scrollbar-3dlight-color:#CFDCE8;
scrollbar-arrow-color:#304498;
scrollbar-base-color:#B7BFD9;
scrollbar-darkshadow-color:#304498;
scrollbar-face-color:#98A4C8;
scrollbar-highlight-color:#D6DAE9;
scrollbar-shadow-color:#2557A3}

//-->
</style>
<title>IPADE CDI | MEDEX Modificacion para datos del Preceptor</title>
<meta name="ProgId" content="FrontPage.Editor.Document"/>
</head>




<body scroll="auto" >
<div align="center">
<center>
<table width="695" height="265" border="0" style="font-family: Tahoma; font-size: 10pt">

<tr>
<td height="65" colspan="5"><p align="right"><b><font face="Tahoma" size="1"><a href="#" onClick="window.close()">cerrar ventana</a></font></b></td>
</tr>

<tr>
<td height="41" colspan="5" bgcolor="#E7E7F7"><font face="Tahoma" size="1"><img src="images/buppchi100.gif" border="0" width="7" height="7">&nbsp; </font><strong><font size="2" face="Tahoma">Actualización de datos del preceptor</font></strong></td>
</tr>
<form method="get" name="Relacion" id="Relacion" action="updatePreceptor.asp">
<%
dim rs
dim sql,rscom
dim idptr1

idptr1 = request.QueryString("idptr")

set rs = server.CreateObject("ADODB.Recordset")
set rscom = server.CreateObject("ADODB.Recordset")

sql = " select id_preceptor,str_genini,str_genfin,Equipo,nombre_p receptor,zona_com,comedor,"&_
" Grupo from Cdimx_preceptor"&_
" where id_preceptor=" &idptr1


rs.Open sql,condb
'response.Flush
'response.Write sql
%>

<input type="hidden" name="guarda" id="guarda" value="0">
<input type="hidden" name="idpre" id="idpre" value="<%=rs("id_preceptor") %>" />

</td>
<td width="96"><font size="1"><b>Grupo:</b></font>
<%
dim rsCatalogo
set rsCatalogo = server.CreateObject("ADODB.Recordset")
Sql = "select id_grupo, Nombre from c_gruposca where id_grupo in (2,3,4)"
rsCatalogo.Open Sql, condb%>
<select size="1" name="Grupo" style="font-family: Verdana; font-size: 8pt;width:100px; vertical-align:middle;">
<option value="" >---</option>
<%While Not rsCatalogo.EOF%>
<option value="<%=rsCatalogo("Nombre").Value%>" <% If (rsCatalogo("Nombre"))=(rs("Grupo")) Then %> <% Response.Write "Selected" %><%End If%>><%=rsCatalogo("Nombre").Value%></option>
<%
rsCatalogo.MoveNext
Wend
rsCatalogo.Close
%>
</select></td>




<td width="97"><font size="1"><b>Equipo:</b></font>
<select size="1" name="Equipo" style="font-family: Verdana; font-size: 8pt;width:110px; vertical-align:middle;" >
<option value="" >---</option>
<%dim i
for i=1 to 20
%>
<option value="<%=i%>" <% If i=(rs("Equipo")) Then%> <%Response.write "Selected"%> <%End If%>><%=i%></option>
<%
next

%></select>

</td>
</tr>
<tr>
<td height="38"><font size="1"><b>Zona Comedor:</b></font><br/>
<select name="zona" id="zona" onchange="sublista(this.form,zona.value);" >
<option value="" > -- Zona -- </option>
<%
dim queryzon

queryzon = " select id_zonacmdr,str_zonacmdr from c_zona_comedores " &_
" where sede = 6 " &_
" and id_zonacmdr <> 8 " &_
" order by n_orden "

rscom.Open queryzon,objConn

'response.Flush
'response.Write queryzon

while not rscom.EOF


%>
<option value="<%=rscom("id_zonacmdr") %>" <%if rs("zona_com")=rscom("str_zonacmdr") Then %><%Response.write "selected" %><%end if %> ><%=rscom("str_zonacmdr") %></option>
<%'Aqui utilize el if para inicializar el valor con el dato de la base %>
<%rscom.movenext
wend
rscom.close
set rscom = nothing%>


</select>
</td>

</tr>
<tr>

Aqui es donde empieza mi problema no puedo inicializar mi combo pq el html en el momento de ejecucion trae el combo subcatagory vacio y por obvias razones no puedo usar el if que ocupe en todos mis combobox si se dan cuenta.

<td height="38"><font size="1"><b>Comedor:</b></font><br/>
<select id="subcatagory" name="subcatagory">
<option value="" >-- Comedor --</option>
</select>
</tr>

</form>
</table>

<a target="_blank" onclick="javascript:Actualiza();" onMouseOver="guardar.src='images/bocagdaA00.gif';return true;" onMouseOut="guardar.src='images/bocagda_00.gif';return true;">
<img name="guardar" border="0" src="images/bocagda_00.gif" width="104" height="19"/ style="cursor:hand;"></a>
</center>
</div>



<%
conDB.close
set conDB = nothing
%>

La pregunta seria ¿Como logro inicializar el segundo combobox con el valor que traiga la base de datos ?

Espero me puedan ayudar por favor de antemano gracias
  #2 (permalink)  
Antiguo 09/10/2009, 12:51
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Combobox dependientes con valores por default ambos

Cita:
¿Como logro inicializar el segundo combobox con el valor que traiga la base de datos
¿Asi? ¿sin Ajax ni nada?

Pues fácil, solo ejecuta la función que lanzas en el onchange del primer select con una llamada directa al final de la página:

Cita:
...
<script>sublista(document.forms[0],document.getElementById('zona').value);</script>
</body>
  #3 (permalink)  
Antiguo 12/10/2009, 00:08
 
Fecha de Ingreso: octubre-2009
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Combobox dependientes con valores por default ambos

Cita:
Iniciado por Myakire Ver Mensaje
¿Asi? ¿sin Ajax ni nada?

Pues fácil, solo ejecuta la función que lanzas en el onchange del primer select con una llamada directa al final de la página:

Ey muchas gracias voy a probarlo ahora que llegue al trabajo
  #4 (permalink)  
Antiguo 12/10/2009, 10:06
 
Fecha de Ingreso: octubre-2009
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Combobox dependientes con valores por default ambos

Implemente el codigo que me mandaste si inicializa el segundo combobox pero no con el valor de la base de datos es decir:

inicializa el primero correctamente con el valor de la base, pero el codigo que me mandaste solo me inicializa con los elementos del id del primer combo, mas no me inicializa con el valor especifico de la base es decir inicializa el combo implementado con javascript pero con el valor por default.

Si me pudieras decir mas o menos por donde va la solucion te estaria muy agradecido.

De antemano gracias por tu ayuda:)
  #5 (permalink)  
Antiguo 12/10/2009, 12:09
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Combobox dependientes con valores por default ambos

No he revisado tu código a detalle, pero a golpe de vista generas un arreglo con los posibles valores del segundo combo y dependiendo de un ID lo limpias y lo vuelves a generar ¿es así?

Supuse que es así por que en el onchange del combo tienes un onchange="sublista(this.form,zona.value);" > lo que me dice que ocupas el ID para algo, supongo que cambiando el segundo parámetro se hará lo que necesitas, pero la neta tu redacción de la situación actual, por más que la leo no la entiendo:

Cita:
me inicializa con los elementos del id del primer combo, mas no me inicializa con el valor especifico de la base es decir inicializa el combo implementado con javascript pero con el valor por default.
Signos de puntuación ... ideas claras ... considera que uno ni hizo el código que tienes ahí ni conoce como debiese funcionar, entonces ocupas explayarte mucho, pero en realidad bastante para que uno te comprenda.

Supongo que la clave de tu problema, como ya mencioné, es el ID que mandas como segundo parámetro, y de la misma forma supongo que si conservas el ID seleccionado (quizá con algo como: ...

Código:
....
<option value="<%=rsCatalogo("Nombre").Value%>" 
<% If (rsCatalogo("Nombre"))=(rs("Grupo")) Then 
          vId_seleccionado = rsCatalogo("Nombre")
%> <% Response.Write "Selected" %>
<%End If%>><%=rsCatalogo("Nombre").Value%></option>
...
) y mandas ese ID como parámetro en lugar del getElementById('zona').value, se resolvería tu problema, pero la verdad es que solo estoy ... suponiendo, ya que no me queda claro en realidad lo que necesitas.
  #6 (permalink)  
Antiguo 12/10/2009, 15:15
 
Fecha de Ingreso: octubre-2009
Mensajes: 14
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Combobox dependientes con valores por default ambos

Bueno pues antes una disculpa por no darme a entender jeje es solo que soy nuevo expresando problemas de programacion.

Bueno como te decia yo utilizo el javascript con la funcion sublista para llenar el segundo combobox dependiente con el metodo onchange que tiene el primer select.

A partir de este al seleccionar una opcion me llena el segundo combobox con elementos que toma con el llenado de un arreglo que muestro a continuacion:

Código:
function sublista(inform, selecteditem){
            inform.subcatagory.length = 0

        <%
         dim count
            count= 0
            y=0
            do while not rs_ncom.eof
        %>

            x = <%= trim(y) %>;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
            subcat = new Array();
            //en subcatagorys lleno con los elementos creados a partir de la consulta
            subcatagorys = "<%=replace(rs_ncom("str_nombcomdr"),"""","\""")%>";
            //subcatagoryof aqui capto el segundo parametro de la funcion sublista
            subcatagoryof = "<%=replace(rs_ncom("id_zonacomdr"),"""","\""") %>";
            //y por ultimo  subcatagoryid asigna el id del elemento de la sublista 
            subcatagoryid = "<%=replace(rs_ncom("id_comedor"),"""","\""") %>";
            subcat[x,0] = subcatagorys; 
            subcat[x,1] = subcatagoryof;
            subcat[x,2] = subcatagoryid;
            
            if (subcat[x,1] == selecteditem) {
            var option<%= trim(count) %> = new Option(subcat[x,0], subcat[x,2]);//en esta seccion creo el nuevo combobox 
            inform.subcatagory.options[inform.subcatagory.length]=option<%= trim(count)%>;
            
            }
EJEMPLO:

Tengo los datos

Nombre Generacion Grupo Equipo Zona comedor Comedor
Luis alejandro chimal 2007-2009 A 2 Casco Aguascalientes

En la pantalla actualizar se abre con los combo box que poseen la informacion anterior

Del campo nombre a Zona comedor inicializa los valores correctamente al usar la siguiente sentencia:

Código:
<%
        dim rsCatalogo
        set rsCatalogo = server.CreateObject("ADODB.Recordset")
		Sql = "select id_grupo, Nombre from c_gruposca where id_grupo in (2,3,4)"
 		rsCatalogo.Open Sql, condb%>
         <select size="1" name="Grupo" style="font-family: Verdana; font-size: 8pt;width:100px; vertical-align:middle;">
           <option value="" >---</option>
           <%While Not rsCatalogo.EOF%>
           <option value="<%=rsCatalogo("Nombre").Value%>" <% If (rsCatalogo("Nombre"))=(rs("Grupo")) Then %> <% Response.Write "Selected" %><%End If%>><%=rsCatalogo("Nombre").Value%></option>
           <%
			rsCatalogo.MoveNext
		Wend
		rsCatalogo.Close
		%>
         </select>
El texto subrayado de rojo hace una comparacion del valor que tiene el catalogo que llena los combobox contra la informacion que proviene del query principal es decir hago una comparacion de un query primario con los datos de la persona contra un query secundario que funciona como catalogo, cuando son iguales escribe selected en la opcion correspondiente.

dicha funcion solo la puedo aplicar comparando catalogo contra query principal pero en el java script no lo puedo inicializar

Todos los valores se inician correctamente en la pantalla update menos en el campo comedor por ser el combo dependiente del combo de campo Zona comedor. El problema radica en el javascript que anexo, algo asi aparece en mi pantalla:

Nombre Generacion Grupo Equipo Zona comedor Comedor
Luis alejandro chimal 2007-2009 A 2 Casco Argentina
Cuando la informacion correcta deberia ser como aparece en el ejemplo de arriba.

Si pudieran ayudarme estaria super agradecido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:03.