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

Combos dinámicos dependientes - AYUDA

Estas en el tema de Combos dinámicos dependientes - AYUDA en el foro de ASP Clásico en Foros del Web. Hola a todo@s !!! Tengo una pag. en donde se llena un combo simple dinámico a partir de otro. Sin embargo necesito llenar uno más; ...
  #1 (permalink)  
Antiguo 23/05/2003, 14:51
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 21 años, 6 meses
Puntos: 0
Combos dinámicos dependientes - AYUDA

Hola a todo@s !!!

Tengo una pag. en donde se llena un combo simple dinámico a partir de otro. Sin embargo necesito llenar uno más; es decir que tengo tres combos de los cuales dos de ellos depende de uno que es el principal.

Alguien me podría dar una mano ???

Gracias,

  #2 (permalink)  
Antiguo 23/05/2003, 14:59
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
espero sea esto

http://www.aspfree.com/authors/salimn/optionex.asp

saludos
  #3 (permalink)  
Antiguo 24/05/2003, 05:11
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 22 años, 4 meses
Puntos: 1
http://faqsdelweb.com/index.php?num=3&f_id=2&s_id=15
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #4 (permalink)  
Antiguo 26/05/2003, 12:55
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 21 años, 6 meses
Puntos: 0
Hola a tod@s !!!

Estuve observando la sugerencia de: bakanzipp, pero necesito que alguien me ayude para poder entender alguna instrucciones...

Tu podrías darme una manito ???

  #5 (permalink)  
Antiguo 26/05/2003, 16:12
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
que problemas tienes con el ejemplo?
  #6 (permalink)  
Antiguo 26/05/2003, 16:54
 
Fecha de Ingreso: mayo-2003
Ubicación: Managua, Nicaragua
Mensajes: 4
Antigüedad: 21 años, 1 mes
Puntos: 0
Hola Lethe

Yo tambien tengo ese mismo problema con 3 combobox que los tengo enlazados a una base en access. He encontrado ejemplos donde he podido enlazar 2 pero el 3ero se me ha hecho imposible. Si logras tenes respuesta espero que la compartas pues ese es un verdadero dolor de cabeza,

Saludos
  #7 (permalink)  
Antiguo 26/05/2003, 17:19
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 22 años, 7 meses
Puntos: 0
Acabo de revisar el codigo de la pagina que apunte y sin duda es solo javascript y los datos de los combos van en duro...por lo tanto no se si eran lo que buscan ya que no hace consultas con la b de datos...

aqui encontre un codigo que enlaza tres combos como esta en aspfacil...pero ni idea si funca...echenle una revision..yo no puedo por tiempo....

Código:
<HTML> 
<HEAD> 
<TITLE>Listas </TITLE> 
</HEAD> 
<BODY> 
<H2><CENTER>Listas </CENTER></H2> 
<FORM NAME="Listas" METHOD="POST" ACTION="receive.asp"> 
<B>Pais</B> 
<SELECT NAME="Categorias" SIZE="1" 
OnChange="ComponerLista (document.forms.Listas.Categorias[selectedIndex].value);"> 
<% 
Dim oConn, rs, SQL, cuenta, categoria 
set oConn=Server.CreateObject("ADODB.Connection") 
set rs=Server.CreateObject("ADODB.Recordset") 
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("bd\Negocios.mdb") 
SQL="SELECT * FROM pa" 
rs.Open SQL, oConn 
cuenta=1 
while not rs.EOF 
%> 
<OPTION VALUE="<%=rs.Fields("IdPais")%>" 
<% if cuenta=1 then%> 
SELECTED 
<%end if%>> 
<%=rs.Fields("Pais")%></OPTION> 
<% 
rs.MoveNext 
cuenta=cuenta+1 
wend 
rs.Close 
%> 
</SELECT> 
<P><B>provincia</B> 
<SELECT NAME="Productos" SIZE="1"> 
</SELECT> 
<br> 
<br> 
ciudad 
<SELECT NAME="Productos2" SIZE="1"> 
</SELECT> 
<br> 
<br> 
<P><INPUT TYPE="submit"></FORM> 
<SCRIPT LANGUAGE="Javascript"> 
<!-- 
function Tupla ( campo1, campo2 ) 
{ 
this.campo1 = campo1; 
this.campo2 = campo2; 
} 
<% 
'Vamos a crear nuestros arrays de productos desde ASP 
'El primer if detecta un cambio en la categoría para 
'crear un nuevo array en Javascript 
SQL="SELECT * FROM Provi " 
rs.Open SQL, oConn 
cuenta=0 
cat="basura" 
while not rs.EOF 
if cat<>rs.Fields("Idpais") then 
' cambio de categoria, empiezo a contar en 0 
cuenta=0 
cat=rs.Fields("Idpais") 
%> 
var opciones<%=cat%> = new Array(); 
<% 
end if 
%> 
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rs.Fields("provincia")%>","<%=rs.Fields("IdProvincia")%>"); 
<% 
cuenta=cuenta+1 
rs.MoveNext 
wend 
%> 
<% 
'Limpiamos objetos 
rs.Close 
set rs=nothing 
oConn.Close 
set oConn=nothing 
%> 
var contador; 
function ComponerLista ( array ) { 
// Compone la lista dependiente a partir 
// del valor de la opcion escogida en la lista "padre" 
BorrarLista(); 
array = eval("opciones" + array); 
for (contador=0; contador<array.length; contador++) 
{ 
// añade elementos nuestro combobox 
var optionObj = new Option( array[contador].campo1, array[contador].campo2); 
Listas.Productos.options[contador] = optionObj; 
} // for 
} // ComponerLista 

function BorrarLista() { 
Listas.Productos.length=0; 
} 
//Inicializamos 
ComponerLista (1); 
--> 
</SCRIPT> 
<br> 
</FORM> 
</BODY> 
</HTML>
  #8 (permalink)  
Antiguo 27/05/2003, 15:36
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 21 años, 6 meses
Puntos: 0
lpbrenes: cuenta con mi apoyo...


bakanzipp: efectivamente mis tres combos deben ser llenados a partir de una B.D. en access; porque son dinámicos todos.

El código que me envías funciona y es justamente el que utilizo para crear el 2do. combo; hasta allí todo va bien, pero tengo problemas para llenar el tercero, porque cuando construyo el sql que le corresponde basándome en el proceso de creación del 2do. combo; en la función: ComponerLista me genera un error en la instrucción: array = eval("opciones" + array);

Hasta ahora no he encontrado la manera de diferenciar las 2 Tuplas para evitar el error en dicha instrucción.



Ya encontré la manera...

Gracias a todos...

lpbrenes: espero que te sirva...


Código:
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>

<BR><BR>
<center>
<strong><font FACE="verdana" SIZE="4">Combos Dinámicos de doble dependencia</font></strong>

<FORM ACTION="" METHOD="POST" NAME="frmRecord">
<BR>
<TABLE BORDER=0 WIDTH="50%" class="DataForm">
	
	<TR>
		<TD WIDTH="45%">
		Proyecto:
		</TD>
		
		<TD WIDTH="71%">
			<%
			'---declaración de variables
			Dim Cnn, SQL, rs
			
			Set Cnn = Server.CreateObject("ADODB.Connection")
			Cnn.Open Application("CadenaConexion") 'conexion abierta
			
			SQL = "SELECT distinct proy.py_codigo, proy.py_titulo "
			SQL = SQL & " FROM Proyectos as proy, Informe_de_Avance_de_Proyecto as iap, Metricas_de_Proyecto as me "
			SQL = SQL & " Where proy.py_codigo = iap.rep_proyecto_cod "
			SQL = SQL & " And proy.py_codigo = me.me_proyecto_cod ORDER BY py_titulo"
			Set rs = Cnn.Execute(SQL) 					
			%>
			<Select Name="combo_proyecto" OnChange="ComponerLista (document.forms.frmRecord.combo_proyecto.value);">
				<%											
				if Not rs.Eof then 
					noRecord = 1
					While Not rs.EOF						
						%>
						<option value="<%=rs("py_codigo")%>"><%=rs("py_titulo")%></option>
						<%
						rs.MoveNext
					Wend					
				else
					noRecord = 0
					%>					
					<option value="Ninguno">Ninguno</option>
				<%end if
				rs.Close
				%>
			</Select>			
		</TD>
	</TR>
	
	<TR>
		<TD WIDTH="17%">
		Fecha de Informe de Avance:
		</TD>
		
		<TD WIDTH="71%">
			<Select Name="combo_fecha" style="display:none">					
			</Select>	
			<INPUT 
			TYPE="TEXT"
			NAME="fecha" 
			SIZE="10"
			maxlength="10"
			value="Ninguno"
			style="display:none"
			>		
		</TD>
	</TR>
		
	<TR>	
	<TR>
		<TD WIDTH="17%">
		Título de la Métrica:
		</TD>
		
		<TD WIDTH="71%">			
			<Select Name="combo_metrica_proyecto" style="display:none">				
			</Select>	
			<INPUT 
			TYPE="TEXT"
			NAME="metrica_proyecto" 
			SIZE="10"
			maxlength="10"
			value="Ninguno"
			style="display:none"
			>		
		</TD>
	</TR>

</TABLE>

</FORM>

</center>

</BODY>

<script language = "JavaScript">
<!--
//-------------------------------------
//--para crear combo número de riesgo
//-------------------------------------
function Tupla ( campo1, campo2 )
{
	this.campo1 = campo1;
	this.campo2 = campo2;	
}

<%
'---Vamos a crear nuestros arrays de proyectos desde ASP
'---El primer if detecta un cambio en el proyecto para
'---crear un nuevo array en Javascript

'-----------------------------------
' query de Informes de Proyecto
'------------------------------------
SQLInf = "Select rep_proyecto_cod, rep_fecha From Informe_de_Avance_de_Proyecto "
SQLInf = SQLInf & " Order By rep_proyecto_cod, rep_fecha"

set rsInf = CreateObject("ADODB.Recordset")
rsInf.Open SQLInf, Cnn

cuenta = 0
cat = "basura"

While Not rsInf.EOF

	if cat <> rsInf.Fields("rep_proyecto_cod") then		
		'---cambio de proyecto, empiezo a contar en 0
		cuenta = 0
		cat = rsInf.Fields("rep_proyecto_cod")		
	%>
		//además tengo que crear un nuevo array por proyectos
		var opciones<%=cat%> = new Array();
	<%
	end if		
	%>
	opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rsInf.Fields("rep_fecha")%>","<%=rsInf.Fields("rep_fecha")%>");
	<%
	cuenta = cuenta + 1
	rsInf.MoveNext
	
wend

'---Limpiamos objetos
rsInf.Close
set rsInf = nothing
%>



<%
'----------------------------------
' query de Métricas de Proyecto
'----------------------------------
SQLMetrica = "Select me_proyecto_cod, me_metrica From Metricas_de_Proyecto "
SQLMetrica = SQLMetrica & " Order By me_proyecto_cod, me_metrica"
set rsMetrica = CreateObject("ADODB.Recordset")
rsMetrica.Open SQLMetrica, Cnn

x = 0
cod = "basura"
			
While Not rsMetrica.EOF

	if cod <> rsMetrica.Fields("me_proyecto_cod") then
		'---cambio de proyecto, empiezo a contar en 0
		x = 0
		cod = rsMetrica.Fields("me_proyecto_cod")
	%>
		//además tengo que crear un nuevo array por proyectos
		var MatrizMetr<%=cod%> = new Array();
	<%
	end if
	%>				
	MatrizMetr<%=cod%>[<%=x%>]=new Tupla("<%=rsMetrica.Fields("me_metrica")%>","<%=rsMetrica.Fields("me_metrica")%>");
	<%		
	x = x + 1		
	rsMetrica.MoveNext
	
wend

'---Limpiamos objetos
rsMetrica.Close
set rsMetrica = nothing
%>


// Declaración de variable
var contador;


//--------------------------------------------------
// Función que compone dos (2) listas dependientes
//--------------------------------------------------
function ComponerLista ( array ) 
{
	// Limpia opciones del select
	BorrarLista();
	
	// Asigna bandera de cantidad de registro del sql proyecto (1=hay registros 0=no hay)
	cantReg = <%=noRecord%>
	
	// Verifica si hay registros del combo padre
	if (cantReg==0) {
		// Despliega el tag <Input> en campo fecha y métrica
		document.forms.frmRecord.fecha.style.display = "";	
		document.forms.frmRecord.metrica_proyecto.style.display = "";		
		}
	else
		{
		// Despliega el tag <Select> en campo fecha y métrica
		document.forms.frmRecord.combo_fecha.style.display = "";		
		document.forms.frmRecord.combo_metrica_proyecto.style.display = "";	
		
		// Compone la lista dependiente a partir
		// del valor de la opcion escogida en la lista "padre"
		// Evalua el array "opciones" creado en tupla
		array = eval("opciones" + array);			
		for (contador = 0; contador < array.length; contador++) 
			{
			// añade elementos al combobox correspondiente a fecha de informe
			var optionObj = new Option( array[contador].campo1, array[contador].campo1);
			frmRecord.combo_fecha.options[contador] = optionObj;								
			} 
		
		// asigna el codigo de proyecto de la nueva opción seleccionada
		codigo_proy = document.forms.frmRecord.combo_proyecto.options[document.forms.frmRecord.combo_proyecto.selectedIndex].value;
		
		// Compone la lista dependiente a partir
		// del valor de la opcion escogida en la lista "padre"
		// Evalua el array "MatrizMetr" creado en tupla
		Metr = eval("MatrizMetr" + codigo_proy);		
		for (contador = 0; contador < Metr.length; contador++) 
		{
			// añade elementos al combobox correspondiente a métrica de proyecto
			var optionObj1 = new Option( Metr[contador].campo2, Metr[contador].campo2 );
			frmRecord.combo_metrica_proyecto.options[contador] = optionObj1;					
		} 				
		}					
} 


//-----------------------------------
// Función que limpia las opciones 
// de los combos dependientes
//-----------------------------------
function BorrarLista() 
{
	frmRecord.combo_fecha.length = 0;
	frmRecord.combo_metrica_proyecto.length = 0;
}


//Inicializamos
ComponerLista (document.forms.frmRecord.combo_proyecto.value);

-->
</script>


</HTML>

Última edición por Lethe; 27/05/2003 a las 15:36
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 22:35.