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

3 listas desplegables con datos de BD

Estas en el tema de 3 listas desplegables con datos de BD en el foro de ASP Clásico en Foros del Web. Pues eso, que he estado buscando en el foro y hay muchas consultas sobre este tema, pero la mayoría no aclaran nada (Me refiero integrando ...
  #1 (permalink)  
Antiguo 21/10/2004, 06:17
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 6 meses
Puntos: 1
3 listas desplegables con datos de BD

Pues eso, que he estado buscando en el foro y hay muchas consultas sobre este tema, pero la mayoría no aclaran nada (Me refiero integrando Java Script con ASP).

La idea es una primera lista con datos de una tabla de una BD
La segunda idem que la primera pero según el resultado de esta
La tercera lo mismo pero dependiente del resultado de la segunda.

Hay algunos ejemplos de 3 listas dependientes en los foros, pero solo con valores fijos. La idea es que sean dinámicos y extraidos de una base de datos.

(Por favor antes de remitirme a alguna otra consulta en los foros, revisar que estamos hablando de lo mismo)

Gracias a quien sepa como hacerlo o me diga un link donde encontrar información.
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #2 (permalink)  
Antiguo 21/10/2004, 09:12
 
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 117
Antigüedad: 22 años, 4 meses
Puntos: 0
Hola, yo logre hacer eso, desde un codigo que revice, las lista son leidas desde 3 tablas una de departamentos(estados), provincias y distritos, cada uno depende de la otra tabla.

funciono, pero es lento para cargar, porque se demora en cargar las listas, y el tiempo en comparacion con que se recargue la pagina cada vez que elijo un combo es muchisimo menor.

te envio el codigo de todas maneras:
Al inicio de tu pagina:

<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 = oConn.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>

despues del Title
<!--INCLUIR ESTE ARCHIVO, ES EL QUE CARGA LOS COMBOS!!! -->
<script language=Javascript src="optionex.js"></script>


Esto va despues del body:
<body bgcolor="#cccc99" background="images/mosaico_2x2.gif" onLoad="IniciaTexto(this.form); return true">
<%
' -------------------------- Aqui armo la cadena que llena el segundo combo -----------------------------
CSqlString = "SELECT Cod_Prov Child,Nom_Prov ChildCaption,left(Cod_Prov,2) Parent " &_
"FROM Provincias " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oSubCapit",CSqlString)
Response.Write Genera_OptionCollection("oSubCapit2",CSqlString)
' -------------------------- Aqui armo la cadena que llena el tercer combo -----------------------------
CSqlString = "SELECT Cod_Dist Child,Nom_Dist ChildCaption,left(cod_Dist,4) Parent " &_
"FROM Distritos " &_
"ORDER BY Parent,Child,ChildCaption"
Response.Write Genera_OptionCollection("oPartida",CSqlString)
Response.Write Genera_OptionCollection("oPartida2",CSqlString)
%>

<center>

Y esto va dento de una tabla
<td width="31%" height="30" colSpan="4" style="WIDTH: 31%">
<SELECT id=cmbdepartamento1 style="FONT-SIZE: 8pt; WIDTH: 232px; HEIGHT: 148px" name=cmbdepartamento onchange="UpdateSelect('cmbprovincia','frmgrabar', this.options[this.selectedIndex].value,oSubCapit);UpdateSelect('cmbdistrito','frmg rabar',this.options[this.selectedIndex].value,oPartida);">
<%' Aqui construimos La Lista del primer combo
CSqlString = "SELECT * FROM Departamentos ORDER BY Nom_Dep"
SET oRegistroCa = oconn.Execute(CSqlString)
oRegistroCa.MoveFirst
if trim(ubigeo1)="" or isnull(ubigeo1) then%>
<OPTION Value="" selected>[Seleccione un valor]</option>
<%end if
Do UNTIL oRegistroCa.EOF
if mid(trim(ubigeo1),1,2)= oRegistroCa("COD_DEP") then%>
<OPTION Value="<%=oRegistroCa("COD_DEP")%>" selected><%=oRegistroCa("Nom_Dep")%> </option>
<script language=javascript >
UpdateSelect('cmbprovincia','frmgrabar',frmgrabar. cmbdepartamento1.options[frmgrabar.cmbdepartamento1.selectedIndex].value,oSubCapit);UpdateSelect('cmbdistrito','frmg rabar',frmgrabar.cmbdepartamento1.options[frmgrabar.cmbdepartamento1.selectedIndex].value,oPartida);
</script>
<%else%>
<OPTION Value="<%=oRegistroCa("COD_DEP")%>"><%=oRegistroCa ("Nom_Dep")%> </option>
<%end if
oRegistroCa.MoveNext
LOOP
oRegistroCa.close
%>
</SELECT>
</td>

Y esto va en los otros dos combos

<td width="31%" height="30" colSpan="2" style="WIDTH: 31%">
<SELECT name="cmbprovincia" onchange="UpdateSelect('cmbdistrito','frmgrabar',t his.options[this.selectedIndex].value,oPartida);" style="FONT-SIZE: 8pt; WIDTH: 232px; HEIGHT: 148px">
<option>[Seleccione un valor]</option>
</SELECT>
</td>
<td width="31%" height="30" style="WIDTH: 31%" colSpan=4>
<SELECT id=cmbdistrito1 style="FONT-SIZE: 8pt; WIDTH: 232px; HEIGHT: 148px" name="cmbdistrito">
<option>[Seleccione un valor]</option>
</SELECT>
</td>

En el siguiente mensaje te envio el archivo .js
__________________
<script language=VbScript>
msgbox "Gracias por Leer este mensaje, si puedes respondelo"
</script>
  #3 (permalink)  
Antiguo 21/10/2004, 09:14
 
Fecha de Ingreso: enero-2002
Ubicación: Lima
Mensajes: 117
Antigüedad: 22 años, 4 meses
Puntos: 0
Este es optionex.js:

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,szPar ent);
else if(NS4)
addOptions(eval('document.' + szForm + '.' + szSelect),olist,szParent);
}


Pero como te comente, te recomiendo que hagas varias lecturas al server, yo tuve despues algunos problemas para en los select, poner los selected al recuperar los informacion desde la base de datos, para un regitro existente, mucho mas sencillo fue manejarlo de la manera que te recomiendo.
__________________
<script language=VbScript>
msgbox "Gracias por Leer este mensaje, si puedes respondelo"
</script>
  #4 (permalink)  
Antiguo 21/10/2004, 09:17
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
de todas maneras es cosa de sacar el java scriopt de alguna pagina donde lo hayas visto , y luego construir dicho script dinamicamente con asp segun los datos de la bd.
  #5 (permalink)  
Antiguo 21/10/2004, 12:19
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 6 meses
Puntos: 1
Gracias niltonc, voy a probarlo...
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
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 19:32.