Produzir-los dinamicamente a partir de uma base de dados pode poupar muito tempo e energia.
Neste exemplo, iremos usar ASP 3.0 a gerar dinâmicas dropdown listas a partir de uma base de dados Microsoft Access:
Em um bd chamado,dropdowns com uma tabela chamada table, com os seguintes campos:
ID - autonum
Titulo - text
Comentário - text
O campo ID é definido como uma AutoNumeração, neste caso, os outros dois campos são estabelecidos como campos texto , com o título com um limite de 50 caracteres e comentários com um limite de 255 caracteres.
Agora, o código para construir uma página HTML com uma lista suspensa preenchida com os dados.
CÓDIGO
<%@LANGUAGE="VBSCRIPT" %>
<%
Option Explicit
'-- Variáveis que estamos usando
dim objConn, objRS, objRS2, strSQL
'-- Define objetos
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS2 = Server.CreateObject("ADODB.Recordset")
'-- Database path e Data provider
objConn.ConnectionString = Server.MapPath("dropdowns.mdb")
objConn.Provider = "Microsoft.Jet.OLEDB.4.0"
objConn.Open
'-- Sub Procedure que constrói a dropdown list.
'-- Parâmetros C, R e table são transmitidos quando a sub é construída.
Sub showDropDownList(c, r, table)
'-- SQL Statement
strSQL = "SELECT * FROM " & table & " ORDER BY Title ASC"
'-- Executa SQL e armazena o recordset
Set r = c.Execute(strSQL)
'-- Se temos registros para retornar
if not r.eof = false then
Response.Write "<form name=""form1"">"
Response.Write "<select name=""dropdownlist"">" & vbCrLf
Response.Write "<option selected=""selected"" value="""">Selecione....</option>"
'-- loop e constroi cada entrada de dados como uma opção selecionável
While r.EOF = false
Response.Write "<option value=""dynamic_dropdown_lists.asp"">"
_ & r.Fields("Title").Value & "</option>" & vbCrLf
'-- Move recordset para proximo valor
r.movenext
Wend
end if
Response.Write "</select></form>" & vbCrLf
End Sub
%>
<html>
<head>
<title>Dynamic dropdown</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>Abaixo um exemplo de popular uma drop down list dinamicamente.</p>
<p>
<%
' -- Chame a procedure para construir a drop down list
call showDropDownList(objConn, objRS, "tblDropDownTest")
%>
</p>
</body>
</html>
<%
Option Explicit
'-- Variáveis que estamos usando
dim objConn, objRS, objRS2, strSQL
'-- Define objetos
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS2 = Server.CreateObject("ADODB.Recordset")
'-- Database path e Data provider
objConn.ConnectionString = Server.MapPath("dropdowns.mdb")
objConn.Provider = "Microsoft.Jet.OLEDB.4.0"
objConn.Open
'-- Sub Procedure que constrói a dropdown list.
'-- Parâmetros C, R e table são transmitidos quando a sub é construída.
Sub showDropDownList(c, r, table)
'-- SQL Statement
strSQL = "SELECT * FROM " & table & " ORDER BY Title ASC"
'-- Executa SQL e armazena o recordset
Set r = c.Execute(strSQL)
'-- Se temos registros para retornar
if not r.eof = false then
Response.Write "<form name=""form1"">"
Response.Write "<select name=""dropdownlist"">" & vbCrLf
Response.Write "<option selected=""selected"" value="""">Selecione....</option>"
'-- loop e constroi cada entrada de dados como uma opção selecionável
While r.EOF = false
Response.Write "<option value=""dynamic_dropdown_lists.asp"">"
_ & r.Fields("Title").Value & "</option>" & vbCrLf
'-- Move recordset para proximo valor
r.movenext
Wend
end if
Response.Write "</select></form>" & vbCrLf
End Sub
%>
<html>
<head>
<title>Dynamic dropdown</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>Abaixo um exemplo de popular uma drop down list dinamicamente.</p>
<p>
<%
' -- Chame a procedure para construir a drop down list
call showDropDownList(objConn, objRS, "tblDropDownTest")
%>
</p>
</body>
</html>
Como você pode ver, a lista suspensa é preenchida com os valores de dados, ordenados AZ.
Estamos mostrando frutas e vegetais na lista, sem qualquer separação. Então, o que se quisesse fazer uma distinção entre as frutas e vegetais no interior da lista suspensa, até para quebrar a lista em 2 seções?. Temos de alterar um pouco o nosso código , o que irá filtrar o recordset para Frutas e exibir os resultados e, em seguida, para filtro Vegetais e exibir os resultados.
Em primeiro lugar, vamos acrescentar um novo campo para a nossa tabela de dados, denominado tipo. Nossos dados agora parece com isto:
O campo "Tipo" é um campo de texto, com um limite de 5 caracteres
Precisamos alterar While..Wend loop next, a fim de produzir uma lista suspensa com 2 secções distintas, uma para as frutas e uma de veg. Cada seção serão ordenados A-Z.
CÓDIGO
if r.eof = false then
'-- tag form/select
Response.Write "<form name=""form1"">"
Response.Write "<select name=""dropdownlist"">" & vbCrLf
'-- loop e construir cada entrada de dados como uma opção selecionável
'-- FILTER
r.Filter = ("Type = 'fruta'")
Response.Write "<option selected=""selected"" value="""">Selecione....</option>"
Response.Write "<optgroup label=""Fruita""></optgroup>"
While r.EOF = false
Response.Write "<option value=""dynamic_dropdown_lists.asp"">"
_ & r.Fields("Title").Value & "</option>" & vbCrLf
'-- Move recordset para next value
r.movenext
Wend
r.Filter = adFilterNone
r.Filter = ("Type = 'vegetais'")
Response.Write "<optgroup label=""Vegetais""></optgroup>"
While r.EOF = false
Response.Write "<option value=""dynamic_dropdown_lists.asp"">"
_ & r.Fields("Title").Value & "</option>" & vbCrLf
'-- Move recordset para next value
r.movenext
Wend
end if
'-- tag form/select
Response.Write "<form name=""form1"">"
Response.Write "<select name=""dropdownlist"">" & vbCrLf
'-- loop e construir cada entrada de dados como uma opção selecionável
'-- FILTER
r.Filter = ("Type = 'fruta'")
Response.Write "<option selected=""selected"" value="""">Selecione....</option>"
Response.Write "<optgroup label=""Fruita""></optgroup>"
While r.EOF = false
Response.Write "<option value=""dynamic_dropdown_lists.asp"">"
_ & r.Fields("Title").Value & "</option>" & vbCrLf
'-- Move recordset para next value
r.movenext
Wend
r.Filter = adFilterNone
r.Filter = ("Type = 'vegetais'")
Response.Write "<optgroup label=""Vegetais""></optgroup>"
While r.EOF = false
Response.Write "<option value=""dynamic_dropdown_lists.asp"">"
_ & r.Fields("Title").Value & "</option>" & vbCrLf
'-- Move recordset para next value
r.movenext
Wend
end if
Para o nosso 2 tipos, (Frutas e Vegetais) apresentamos como posições na lista, utilizando a tag HTML <optgroup>. O atributo label define o que será exibido como texto na lista.
A função denominada "filter" está sendo usado para filtrar o nosso objeto recordset ®, para o tipo "Frutas". Tipo é o nome do campo dentro do banco de dados que se referem.
Uma vez que temos o nosso recordset filtrado para todas as frutas, o recordset agora contém apenas registos em que o tipo é Frutas, para que possamos através do loop de todo o recordset e exibir todos os resultados. Para retirarmos o filtro usando o ADO predefinidos constante como adFilterNone.
Este é um exemplo de Dropdown lists dinâmica usando o filter do recordset.

Help














