Shopping Hospedagem Fórum Contato
     
   O portal do desenvolvedor ASP Florianópolis-SC, Terça-feira - 23 de Outubro de 2018  
Busca

Menu do site
Efetuar Login
Usuário:

Senha:

 Esqueceu a senha?
Login automático

 Cadastre-se
Listbox com mais de uma opção
Avaliações: 21   -   Minha nota: Média Geral: 5  

Recebo muitos emails de usuários que gostariam de saber como criar uma Listbox em que o usuário pudesse escolher mais de uma opção.
A grande dúvida da maioria é saber como salvar estas informações, e posteriormente, como carrega-las, de modo que as opções escolhidas fiquem selecionadas.

Vamos neste artigo aprender como fazê-lo.



1- Criando a Listbox

Ó código HTML para criar uma Listbox é simples:

1
2
3
4
5
6
7
8
<select name="ano" size="5" multiple>
<option value="2000">Ano de 2000</option>
<option value="2001">Ano de 2001</option>
<option value="2002">Ano de 2002</option>
<option value="2003">Ano de 2003</option>
<option value="2004">Ano de 2004</option>
<option value="2005">Ano de 2005</option>
</select>

Veja agora a mesma Listbox criada dinamicamente com o ASP:

1
2
3
4
5
<select name="ano" size="5" multiple>
<%For i = 2000 to 2005%>
<option value="<%=i%>">Ano de<%=i%></option>
<%Next%>
</select>

A opção multiple na primeira linha do código indica que a a Listbox, permite que mais de uma opção seja selecionada. Porêm, nem todo usuário sabe que é preciso manter a tecla Ctrl pressionada para selecionar mais de uma opção. Portanto, recomendo que seja informado isto na pagina do site.

Veja abaixo nosso código em funcionamento, tente escolher mais de uma opção.





2- Salvando as opções escolhidas da Listbox

Quando a Listbox e enviada pelo formulário, todas as opções escolhidas são enviadas separadas por uma vígula.
Ex.: 2001, 2003, 2005

Para exibir as informações capturadas desta listbox, usamos o seguinte código:

1
<%=Request.Form("ano")%>


Poderiamos simplesmente salvar estas informações na base de dados da maneira como são capturadas. Mas, como precisaremos capturá-las posteriormente, existem certos casos que podem haver conflito quando as opções contiverem conteúdo semelhante.

Por exemplo, se buscarmos pela opção "21", e na listbox existir também a opção "210", a mesma tambem sera capturada, bem como a opção "21", bem como a opção "2100" e assim por diante, onde houverem ocorrências semelhantes.

Por isto, é necessário antes separarmos as opções, de forma que ao capturá-las, isto não ocorra.

1
2
3
4
5
6
<%
lista = Request.Form("ano")
lista = Replace(lista, " ", "")
lista = Replace(lista, ",", "-")
lista = "-" & lista & "-"
%>

Desta forma, o resultado das informações selecionadas na listbox seria:
Ex.: -2001-2003-2005-

Sendo assim, quando procurada pela opção "-2001-" para saber se a mesma foi selecionada, somente a mesma seria retornada, evitando o provavel conflito de informações mencionado anteriormente.



3- Capturando as opções escolhidas da Listbox

Para deixar uma ou mais opçoes selecionadas, utiliza-se a opção selected na opção desejada. como mostra abaixo:
 
1
2
3
4
5
6
7
8
<select name="ano" size="5" multiple>
<option value="2000">Ano de 2000</option>
<option value="2001" selected>Ano de 2001</option>
<option value="2002">Ano de 2002</option>
<option value="2003" selected>Ano de 2003</option>
<option value="2004">Ano de 2004</option>
<option value="2005" selected>Ano de 2005</option>
</select>

Veja o resultado abaixo, com as opções previamente selecionadas:




Vamos agora ao código ASP que alêm de criar dinamicamente a Listbox, trará as opções salvas, já previamente selecionadas:

1
2
3
4
5
<select name="ano" size="5" multiple>
<%For i = 2000 to 2005%>
<option value="<%=i%>" <%If InStr(objRS("ano"),"-" & i & "-") > 0 Then Response.Write "selected"%>>Ano de<%=i%></option>
<%Next%>
</select>


ATENÇÃO! lembre-se que o campo da base de dados a serem salvas as informações de ser do tipo MEMO, para que possa haver espaço suficiente para salvar todas as informações possíveis de uma Listbox. Caso contrário, pode haver erro na hora de salvar.





4- Código completo

Para quem ainda não sabe como salvar em um banco de dados, segue o código completo:
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

<%
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "Data Source=C:\base_de_dados.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"

If Not IsEmpty(Request.Form) Then
  Set objRS = Server.CreateObject("ADODB.Recordset")
  objRS.CursorLocation = 2
  objRS.CursorType = 0
  objRS.LockType = 3
  strQ = "SELECT * FROM tabela"
  objRS.Open strQ, objCon, , , &H0001
  lista = Request.Form("ano")
  lista = Replace(lista, " ", "")
  lista = Replace(lista, ",", "-")
  lista = "-" & lista & "-"

  objRS("ano") = lista
  objRS.Update
  objRS.Close
  Set objRS = Nothing
%>

Os dados foram atualizados com sucesso.
<br><a href="<%=Request.ServerVariables("SCRIPT_NAME")%>">Clique aqui</a> para visualizar a Listbox

<%
Else
  strQ = "SELECT * FROM tabela"
  Set objRS = objCon.Execute(strQ)
  If Not objRS.EOF Then
%>

<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="post">
<select name="ano" size="5" multiple>
<%For i = 2000 to 2005%>
<option value="<%=i%>" <%If InStr(objRS("ano"),"-" & i & "-") > 0 Then Response.Write "selected"%>>Ano de<%=i%></option>
<%Next%>
</select>

<br><br><input type="submit" value="Enviar">
</form>

<%
  End If
  Set objRS = Nothing
End If

objCon.Close
Set objCon = Nothing
%>

Veja no codigo completo, os códigos de anteriormente na cor laranja.


Espero que este exemplo lhe seja útil.


Fabiano Dias
fabiano@superasp.com.br

www.superasp.com.br
O portal do desenvolvedor ASP




SuperASP do Brasil Ltda

03.066.522/0001-84
Av. Rio Branco 433 - Centro - Florianopolis - SC
Contato

© 2001/2008 - Superasp do Brasil Ltda. Todos os direitos reservados