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

3 selects dependientes

Estas en el tema de 3 selects dependientes en el foro de ASP Clásico en Foros del Web. Hola, necesito hacer 3 selects dependientes y que al refreskar la pagina no se me borren las opciones anteriormente eskogidas.... tengo este kodigo,,, porfa si ...
  #1 (permalink)  
Antiguo 26/01/2005, 15:29
Avatar de Punktruka  
Fecha de Ingreso: enero-2005
Ubicación: Santiago, Chile
Mensajes: 215
Antigüedad: 19 años, 5 meses
Puntos: 0
3 selects dependientes

Hola, necesito hacer 3 selects dependientes y que al refreskar la pagina no se me borren las opciones anteriormente eskogidas....
tengo este kodigo,,, porfa si alguien lo pueda rebizar y me diga donde esta el error..
porrfiiiiiiiiiiiiiiiiiiiiisssss!!!!!!!


<form name="Formulario" method="post" action="Listar_Formulario.asp" target="Main_Frame">

<table width="900" border="0">
<tr>
<td width="359"><font size="2" face="Arial, Helvetica, sans-serif" color="#000031">Formulario</font>


<select name=id_formulario onChange="location.href('Selec_FormPeriodo.asp?id_ formulario=' + Formulario.id_formulario.options[Formulario.id_formulario.selectedIndex].value)">

<%
ses_minera=7


if Request.QueryString("id_formulario") = 0 then
response.write "<option value=0 name=Todos> Todos </option>"
else
response.write "<option> </option>"
response.write "<option value=0 name=Todos> Todos </option>"
end if

Sql_Formulario="select distinct id_formulario from calendario where id_estado=1 and id_minera='"&ses_minera&"' order by id_formulario asc"
Set Rs_Formulario=Createobject("ADODB.Recordset")
Rs_Formulario.Open Sql_Formulario, Connae

Do While not Rs_Formulario.eof

id_formulario = Rs_Formulario("id_formulario")


Sql_FormName="select distinct nombre from formulario where id_formulario="&id_formulario&" order by nombre asc"
Set Rs_FormName=Createobject("ADODB.Recordset")
Rs_FormName.Open Sql_FormName, Connae

Do While not Rs_FormName.eof

Nom_Form = Rs_FormName("nombre")
Var_Ext = Request.QueryString("id_formulario")
Var_Ext = CInt(Var_Ext)

if Var_Ext = id_formulario Then

Response.Write "<option value="&id_formulario&" &nombre="&Nom_Form&" selected> "&Nom_Form&" </option>"
else
Response.Write "<option value="&id_formulario&" &nombre="&Nom_Form&"> "&Nom_Form&" </option>"
end if

Rs_FormName.MoveNext
Loop

Rs_Formulario.MoveNext
Loop%>

</select>
</td>

<%id_formulario = Request.QueryString("id_formulario")
periodo_desde = Request.QueryString("periodo_desde")


if id_formulario = "0" Then %>


<%id_formulario = Request.QueryString("id_formulario")
periodo_desde = Request.QueryString("periodo_desde")
'response.Write(id_formulario)
response.Write(periodo_desde)%>


<td width="300"> <font size="2" face="Arial, Helvetica, sans-serif" color="#000031">Periodo &nbsp; Desde</font>

<select name=periodo_desde onChange="location.href('Selec_FormPeriodo.asp?id_ formulario=0&periodo_desde=' + Formulario.periodo_desde.options[Formulario.periodo_desde.selectedIndex].value)">

<%Sql_Periodo1="select distinct id_periodo, periodo from periodo order by id_periodo asc"
Set Rs_Periodo1=Createobject("ADODB.Recordset")
Rs_Periodo1.Open Sql_Periodo1, Connae

Do While not Rs_Periodo1.eof

id_periodo1 = Rs_Periodo1("id_periodo")
periodo1= Rs_Periodo1("periodo")

separa=split(periodo1," ")
ano1 = separa(0)
mes1 = separa(1)

set Rs_Mes=createobject("ADODB.Recordset")
Sql_Mes="select * from mes where numero_mes='"&mes1&"'"
Rs_Mes.open Sql_Mes,Connae

Do While not Rs_Mes.eof

Nom_Mes1=Rs_Mes("nombre")
Var_Ext = Request.QueryString("id_periodo1")
Var_Ext = CInt(Var_Ext)

response.Write(Var_Ext)
response.Write(periodo_desde)

if id_periodo1 <> periodo_desde Then


Response.Write "<option selected value="&id_periodo1&" &id_formulario="&id_formulario& ">"&id_periodo1&" " &ano1&" "&Nom_Mes1&" </option>"

else
Response.Write "<option value="&id_periodo1&" &id_formulario="&id_formulario&">"&id_periodo1& " "&ano1&" "&Nom_Mes1&" </option>"

end if

Rs_Mes.MoveNext
Loop
Rs_Periodo1.MoveNext
Loop%>
</select>
</td>

<%if Request.QueryString("periodo_desde") <> "" then
periodo_desde = Request.QueryString("periodo_desde")%>



<td width="300"> <font size="2" face="Arial, Helvetica, sans-serif" color="#000031">&nbsp; &nbsp;Hasta</font>

<select name=periodo_hasta>


<% Sql_Periodo2="select distinct id_periodo, periodo from periodo order by id_periodo asc"
Set Rs_Periodo2=Createobject("ADODB.Recordset")
Rs_Periodo2.Open Sql_Periodo2, Connae

id_formulario = Request.QueryString("id_formulario")
periodo_desde = Request.QueryString("periodo_desde")

Do While not Rs_Periodo2.eof

id_periodo2 = Rs_Periodo2("id_periodo")
periodo2= Rs_Periodo2("periodo")

periodo_desde = Request.QueryString("periodo_desde")

separa=split(periodo2," ")
ano2 = separa(0)
mes2 = separa(1)

set Rs_Mes=createobject("ADODB.Recordset")
Sql_Mes="select * from mes where numero_mes='"&mes2&"'"
Rs_Mes.open Sql_Mes,Connae

Nom_Mes2=Rs_Mes("nombre")%>

<option value="<%=id_periodo2%>"><%response.Write(ano2&" "&Nom_Mes2)%></option>
<%Rs_Periodo2.MoveNext
Loop%>
</select>


</td>






<%
end if
  #2 (permalink)  
Antiguo 26/01/2005, 19:37
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
Buf, no me quiero leer todo eso.

Lo que tienes que hacer es, en la segundsa carga de la página, comprobar los valores (el que has mandado anteriormente con form y el que estás sacando de la base de datos) y, si coinciden, haces un

Código:
 response.write("selected")
un saludo.
  #3 (permalink)  
Antiguo 26/01/2005, 20:51
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 19 años, 8 meses
Puntos: 0
select

bueno tengo uno en javascript de tres select dependientes si te sirve lo coloco por aqui, dime y lo coloco
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #4 (permalink)  
Antiguo 27/01/2005, 06:26
 
Fecha de Ingreso: enero-2005
Mensajes: 5
Antigüedad: 19 años, 4 meses
Puntos: 0
Si Stickmaster2004 ponlo porfa, yo postie algo similar y aun no se como mejorarlo.
  #5 (permalink)  
Antiguo 27/01/2005, 07:35
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
hola este post lo coloco tal cual alquien de aqui lo puso, no re cuerdo quien en el momento aqui te va

Código:
 Aqui les paso el codigo para que puedan crear sus combos enlazados de una manera facil y sencilla, se pueden hacer desde 2 hasta n combos enlazados!!!
Esta pagina se llama combo.asp
<% response.buffer = true %>
<Script language="VBScript" RUNAT="SERVER">
FUNCTION Genera_OptionCollection(oCollection,CSqlString)
' Esta funcion genera un arreglo con los que recupera de la base de datos para el 2 y 3er combo
Comilla = Chr(34)
SET oHandle=Server.CreateObject("ADODB.Connection")
oHandle.Open "Oracle8"
SET oRegistro = oHandle.Execute(CSqlString) 
Genera_OptionCollection = "<scri" & "pt language='JavaScript'>" & vbCrlf
Genera_OptionCollection = Genera_OptionCollection &_
"var " & oCollection & " = new OptionCollection();" & vbCrlf
oRegistro.MoveFirst
DO UNTIL oRegistro.Eof
' Ejemplo: oSubFuncion.Add("0101","Descripción del Catalogo","01");
Genera_OptionCollection = Genera_OptionCollection &_
oCollection & ".Add(" & Comilla & oRegistro("Child")& Comilla & "," &_
Comilla & oRegistro("ChildCaption")& Comilla & "," &_
Comilla & oRegistro("Parent")& Comilla & ");" & vbCrlf
oRegistro.MoveNext
LOOP 
oRegistro.Close
oHandle.Close 
Genera_OptionCollection = Genera_OptionCollection & "</scr" & "ipt>" & vbCrlf
END FUNCTION
</script>
<HTML>
<HEAD>
<TITLE>Combos</TITLE>
<!--INCLUIR ESTE ARCHIVO, ES EL QUE HACE TODO!!! -->
<script language=Javascript src="optionex.js"></script>
</HEAD>
<BODY>
<% 
' -------------------------- Aqui armo la cadena que llena el segundo combo -----------------------------
CSqlString = "SELECT CSCClave||CSCCapitu Child,CSCDescri ChildCaption,CSCCapitu Parent " &_
"FROM SATCSubCapit " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oSubCapit",CSqlString)
' -------------------------- Aqui armo la cadena que llena el tercer combo -----------------------------
CSqlString = "SELECT CPAClave||CPaSubCap||CPaCapitu Child,CPaDescri ChildCaption,CPaSubCap||CPaCapitu Parent " &_
"FROM SATCPartida " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oPartida",CSqlString)
%>
<form name=forma>
<table>
<tr> 
<td align=right valign=top>Capitulo </td>
<td align=left valign=top> 
<SELECT name="PCapitulo" onchange="UpdateSelect('SubCap','forma',this.options[this.selectedIndex].value,oSubCapit);" style="width:400px;">
<%' Aqui construimos La Lista del primer combo
SET oHandle=Server.CreateObject("ADODB.Connection")
oHandle.Open "Oracle8"
CSqlString = "SELECT CCaClave,SUBSTR(CCaDescri,1,50) CCaDescri " &_
"FROM SaTCCapitulo " &_
"ORDER BY CCaClave"
SET oRegistroCa = oHandle.Execute(CSqlString)
oRegistroCa.MoveFirst
Do UNTIL oRegistroCa.EOF %>
<OPTION Value="<%=oRegistroCa("CCaClave")%>"> 
<%=oRegistroCa("CCaDescri")%> </option>
<% oRegistroCa.MoveNext 
LOOP
oRegistroCa.close 
%>
</SELECT> </td>
</tr>
<tr> 
<td align=right valign=top>Subcapitulo</td>
<td align=left valign=top><SELECT name="SubCap" onchange="UpdateSelect('Partida','forma',this.options[this.selectedIndex].value,oPartida);" style="width:400px;">
<option>[Seleccione un valor]</option>
</select></td> 
</tr>
<tr> 
<td align=right valign=top><font size="2" face="Arial, Helvetica, sans-serif"><strong>Partida</strong></font>:</td>
<td align=left valign=top><SELECT name="Partida" style="width:400px;">
<option>[Seleccione un valor]</option>
</select></td>
</tr>
</table>
</form>
</BODY>
</HTML>

Aqui pongo el archivo que se llama optionex.js, a este no le tienen que modificar NADA
var NS4 = (document.layers)?true:false;
var IE4 = (document.all)?true:false;
function _struct(child,childcaption,parent){
this.child = child;
this.childcaption = childcaption;
this.parent = parent;
}
function _addobject(child,childcaption,parent){
var obj = new _struct();
obj.child = child;
obj.childcaption = childcaption;
obj.parent = parent;
return(obj);
}
function insertEntry(child,childcaption,parent){
if(child.length > 0 ){ 
for(var i=0;i<this.length;i++)
if(this.items[i].child == child)
return; 
this.items[this.length++] = _addobject(child,childcaption,parent); 
}
}
function OptionCollection(){
this.length=0;
this.items = new Object();
this.Add=insertEntry
}
function clearSelect(oSelect){
var iCount=0;
if(!oSelect) return;
iCount = oSelect.options.length;
for(var i=0;i<iCount;i++){
if(IE4)
oSelect.options.remove(0);
else if(NS4)
oSelect.options[0]=null;
}
}
function agregaOpcion(oSelect,nIndice,cClave,cDescri){
elSelectOption = new Option();
elSelectOption.value = cClave;
elSelectOption.text = cDescri;
if(NS4) oSelect.options[nIndice] = elSelectOption;
else if(IE4) oSelect.options.add(elSelectOption,nIndice);
delete(elSelectOption);
}
function addOptions(oSelect,olist,parent){
var elOption;
var idxSelect=0; 
//check arguments.
if((!olist) || (!oSelect))return; 
if(parent.length <= 0) return;
//now looop through all the list items only entering relevant options.
clearSelect(oSelect); 
//add a blank list
// - elBlankOption = new Option();
// - elBlankOption.text = "";
// - if(NS4) oSelect.options[0] = elBlankOption
// - else if(IE4) oSelect.options.add(elBlankOption,0)
// - elBlankOption.value = "";
for(var i=0;i<olist.length;i++){ 
//only the child entries of the parent 
if(olist.items[i].parent == parent){
if(idxSelect==0){
agregaOpcion(oSelect,0,"","Seleccione un valor de la lista");
idxSelect++;
} 
elOption = new Option();
//now IE and NS have a different way to handle object creation.
if(NS4){
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options[idxSelect] = elOption 
}else if(IE4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options.add(elOption,idxSelect) 
} 
idxSelect++;
delete(elOption);
} 
}
if(oSelect.length<=0){
agregaOpcion(oSelect,0,"","No se encontraron valores coincidentes");
}
oSelect.selectedIndex = 0; 
}
function clearOptions(szSelect,szForm){
if(szSelect.length <= 0 || szForm.length <=0)
alert("error:clearOption must pass arguments"); 
if(IE4)
clearSelect(document.all.item(szSelect));
else if(NS4)
clearSelect(eval('document.' + szForm + '.' + szSelect));
}
function listAllOptions(szSelect,szForm,olist){
var elOption;
var idxSelect=0;
var oSelect = new Object();
//check arguments.
if(!olist)return; 
if(IE4)
oSelect = document.all.item(szSelect);
else if(NS4)
oSelect = eval('document.' + szForm + '.' + szSelect);
if(!oSelect)return; 
//now looop through all the list items entering all
clearSelect(oSelect);
for(var i=0;i<olist.length;i++){ 
elOption = new Option();
//now IE and NS have a different way to handle object creation.
if(NS4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options[idxSelect] = elOption 
}else if(IE4){ 
elOption.value = olist.items[i].child
elOption.text = olist.items[i].childcaption
oSelect.options.add(elOption,idxSelect) 
} 
idxSelect++;
delete(elOption); 
} 
}
function UpdateSelect(szSelect,szForm,szParent,olist){
if(IE4)
addOptions(document.all.item(szSelect),olist,szParent);
else if(NS4)
addOptions(eval('document.' + szForm + '.' + szSelect),olist,szParent);
}
 
 
------------------------------
Otra cosa y muy importante es que el arreglo debe ser unico, por ejemplo:
Esto seria incorrecto, ya que hay dos 01, aunque provengan de padres diferentes
oSubCapit.Add("01","SERVICIOS PERSONALES","1");
oSubCapit.Add("01","SERVICIOS PERSONALES","2");
Esto seria lo correcto, concatenarle al hijo la clave del padre:
oSubCapit.Add("011","SERVICIOS PERSONALES","1");
oSubCapit.Add("012","SERVICIOS PERSONALES","2");
y asi ya se hace unico
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 27/01/2005, 07:54
Avatar de Punktruka  
Fecha de Ingreso: enero-2005
Ubicación: Santiago, Chile
Mensajes: 215
Antigüedad: 19 años, 5 meses
Puntos: 0
oka, muxas gracias por tu respuesta.."TRASGUKABI" pero si te fijas ya hize eso en el kódigo.. y tampoko me resulta...

esta es la parte ke te digo,, donde "id_periodo1" es la variable ke kontiene valor de la base de datos y "periodo_desde" es el nombre del segundo select, ke es donde se supone ke estan los volores de este..

if id_periodo1 = periodo_desde Then


Response.Write "<option selected value="&id_periodo1&" &id_formulario="&id_formulario& ">"&id_periodo1&" " &ano1&" "&Nom_Mes1&" </option>"

else
Response.Write "<option value="&id_periodo1&" &id_formulario="&id_formulario&">"&id_periodo1& " "&ano1&" "&Nom_Mes1&" </option>"

end if

Última edición por Punktruka; 27/01/2005 a las 08:22
  #7 (permalink)  
Antiguo 27/01/2005, 09:27
Avatar de Punktruka  
Fecha de Ingreso: enero-2005
Ubicación: Santiago, Chile
Mensajes: 215
Antigüedad: 19 años, 5 meses
Puntos: 0
ya staaaaaaa

holas,,, ya pude solucionar el problema....el problema esta en la komparacion...
envio el kódigo asp porsi alguna vez alguien lo necesita
gracias.. a kienes me respondieron
***************************************
<form name="Formulario" method="post" action="Listar_Formulario.asp" target="Main_Frame">

<select name=id_formulario onChange="location.href('Selec_FormPeriodo.asp?id_ formulario=' + Formulario.id_formulario.options[Formulario.id_formulario.selectedIndex].value)">

<%
ses_minera=7


if Request.QueryString("id_formulario") = 0 then
response.write "<option value=0 name=Todos> Todos </option>"
else
response.write "<option> </option>"
response.write "<option value=0 name=Todos> Todos </option>"
end if

Sql_Formulario="select distinct id_formulario from calendario where id_estado=1 and id_minera='"&ses_minera&"' order by id_formulario asc"
Set Rs_Formulario=Createobject("ADODB.Recordset")
Rs_Formulario.Open Sql_Formulario, Connae

Do While not Rs_Formulario.eof

id_formulario = Rs_Formulario("id_formulario")


Sql_FormName="select distinct nombre from formulario where id_formulario="&id_formulario&" order by nombre asc"
Set Rs_FormName=Createobject("ADODB.Recordset")
Rs_FormName.Open Sql_FormName, Connae

Do While not Rs_FormName.eof

Nom_Form = Rs_FormName("nombre")
Var_Ext = Request.QueryString("id_formulario")
Var_Ext = CInt(Var_Ext)

if Var_Ext = id_formulario Then

Response.Write "<option value="&id_formulario&" &nombre="&Nom_Form&" selected> "&Nom_Form&" </option>"
else
Response.Write "<option value="&id_formulario&" &nombre="&Nom_Form&"> "&Nom_Form&" </option>"
end if

Rs_FormName.MoveNext
Loop

Rs_Formulario.MoveNext
Loop%>

</select>
</td>

<%id_formulario = Request.QueryString("id_formulario")
periodo_desde = Request.QueryString("periodo_desde")


if id_formulario = "0" Then %>


<%id_formulario = Request.QueryString("id_formulario")
periodo_desde = Request.QueryString("periodo_desde")
'response.Write(id_formulario)
'response.Write(periodo_desde)%>


<td width="300"> <font size="2" face="Arial, Helvetica, sans-serif" color="#000031">Periodo &nbsp; Desde</font>

<select name=periodo_desde onChange="location.href('Selec_FormPeriodo.asp?id_ formulario=0&periodo_desde=' + Formulario.periodo_desde.options[Formulario.periodo_desde.selectedIndex].value)">

<%Sql_Periodo1="select distinct id_periodo, periodo from periodo order by id_periodo asc"
Set Rs_Periodo1=Createobject("ADODB.Recordset")
Rs_Periodo1.Open Sql_Periodo1, Connae

Do While not Rs_Periodo1.eof

id_periodo1 = Rs_Periodo1("id_periodo")
periodo1= Rs_Periodo1("periodo")

separa=split(periodo1," ")
ano1 = separa(0)
mes1 = separa(1)

set Rs_Mes=createobject("ADODB.Recordset")
Sql_Mes="select * from mes where numero_mes='"&mes1&"'"
Rs_Mes.open Sql_Mes,Connae

Do While not Rs_Mes.eof

Nom_Mes1=Rs_Mes("nombre")


periodo_desde = Request.QueryString("periodo_desde")
response.Write(periodo_desde)

if id_periodo1 = periodo_desde Then %>
<option value="<%=Rs_Periodo1("id_periodo")%>" <%if request("periodo_desde")<>"" then if cint(request("periodo_desde"))=cint(Rs_Periodo1("i d_periodo")) then response.write "Selected"%>> <%=id_periodo1&" "&ano1&" "&Nom_Mes1%></option>
<%else%>
<option value="<%=Rs_Periodo1("id_periodo")%>" <%if request("periodo_desde")<>"" then if cint(request("periodo_desde"))=cint(Rs_Periodo1("i d_periodo")) then response.write "Selected"%>> <%=id_periodo1&" "&ano1&" "&Nom_Mes1%></option>
<%end if

Rs_Mes.MoveNext
Loop
Rs_Periodo1.MoveNext
Loop%>
</select>
</td>

<%if Request.QueryString("periodo_desde") <> "" then
periodo_desde = Request.QueryString("periodo_desde")%>



<td width="300"> <font size="2" face="Arial, Helvetica, sans-serif" color="#000031">&nbsp; &nbsp;Hasta</font>

<select name=periodo_hasta>


<% Sql_Periodo2="select distinct id_periodo, periodo from periodo order by id_periodo asc"
Set Rs_Periodo2=Createobject("ADODB.Recordset")
Rs_Periodo2.Open Sql_Periodo2, Connae

id_formulario = Request.QueryString("id_formulario")
periodo_desde = Request.QueryString("periodo_desde")

Do While not Rs_Periodo2.eof

id_periodo2 = Rs_Periodo2("id_periodo")
periodo2= Rs_Periodo2("periodo")

periodo_desde = Request.QueryString("periodo_desde")

separa=split(periodo2," ")
ano2 = separa(0)
mes2 = separa(1)

set Rs_Mes=createobject("ADODB.Recordset")
Sql_Mes="select * from mes where numero_mes='"&mes2&"'"
Rs_Mes.open Sql_Mes,Connae

Nom_Mes2=Rs_Mes("nombre")%>

<option value="<%=id_periodo2%>"><%response.Write(ano2&" "&Nom_Mes2)%></option>
<%Rs_Periodo2.MoveNext
Loop%>
</select>


</td>






<%
end if
  #8 (permalink)  
Antiguo 27/01/2005, 09:52
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Sugerencia: Si colocas código, márcalo como tal (hay un botón para ello y manualmente puedes encerrarlo entre [ CODE ] y [ /CODE ] -sin espacios-) para que no ocupe tanto espacio. Es muy pesado intentar ayudar en post como este, con tantas lineas.
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:05.