Ir para conteúdo
Fórum Script Brasil
  • 0

Combobox


gilson

Pergunta

se alguém poder me dar uma dica, agradeco.

gostaria de carregar um combo, com valores referenciado em outro. tipop assim:

em um combo tenho alguns valores como por exemplo marca de automoveis. ao sair desse combo quero que o combo seguinte so me mostre os valores relacionados com aquela marca do 1 combo.

consegui fazer me entender? obrigado.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Da uma olhada se te ajuda:

Uso de 2 combos ligadas entre si

Escrevo este artigo, pois sei que todos aqueles que estão a começar precisam de algo parecido com aquilo que aqui escrevo. A idéia é ter 2 Combo boxes, em que a segunda é carregada com dados consoante a escolha feita na primeira Combo. Normalmente a solução mais rápida seria o uso de Javascript, mas se tivermos muitos dados isso torna-se muito pesado, porque o uso desde Scripting obriga o carregamento prévio de tudo o que estiver em base de dados, enquanto com a solução em ASP (esta que vou explicar) os dados só são puxados por pedido, e assim a performance final, para grandes soluções fica a beneficiar. O que falha claro, é o fato de ter de ser feito um refresh á página por cada vez que é feita uma nova escolha na primeira combo, mas que julgo ser suportável, pelo menos para mim é.

A base de dados

A base de dados que uso, é novamente em MS-Access, que serve como exemplo e julgo ser de mais fácil acesso, para quem programa nesta linguagem.

Uso 2 tabelas, muito simples com os seguintes esquemas:

Tabela Combo1:

id_combo1 | AutoNumber

nome_combo1 | Text

Tabela Combo2:

id_combo2 | AutoNumber

id_combo1 | Number

nome_combo2 | Text

A segunda tabela como é 'filha' da primeira, cada linha de informação tem de ter a referência do 'pai' da tabela Combo1. e assim quando escolhemos a informação da Combo1, podemos ir á segunda buscar a informação referente com o id da primeira.

Este único ficheiro para o efeito, tem então duas combo boxes, em que a segunda é 'enchida' com dados depois de escolhermos um dos campos da primeira. Claro que o programador pode usar a opção 'onchange' e fazer este passo automaticamente. Eu fiz assim porque julgo de mais fácil compreensão, e depois o programador pode fazer as alterações que julgue necessárias.

Arquivo Combo.ASP:

<%

Sub Combo1()' função que trabalha com a combo inicial

'vamos fazer a declaração de SQL para encher a Combo

SQLStmt = "SELECT id_combo1, nome_combo1 FROM combo1"

'Executamos a declaração na Base de Dados

rs.Open SQLStmt, conn, 2, 1

'vamos construir o HMTL da primeira combo

Response.Write"<font face='Verdana,Arial' size='2'>"

Response.Write"<b>combo inicial </b></font>"

Response.Write"<SELECT name='combo1'>"

'vamos percorrer o RecordSet referente ás cidades

while not rs.EOF

'construímos cada cidade na combo

Response.Write"<OPTION "

'se a escolha anterior for igual à do momento, deixamo-la escolhida

if CInt(Request.Form("combo1"))= rs(0) then

Response.Write"selected "

end if

Response.Write"value='"&rs(0)&"'>"&rs(1)&"</OPTION>"

rs.MoveNext

wend

Response.Write"</SELECT><br><br><br>"

Response.Write"<INPUT type='Submit' value='OK'><br><br><br>"

rs.close

End Sub

Sub Combo2()' aqui construímos a combo referente às freguesias

id_combo1 = Request.Form("combo1")

'se não houver escolha na combo das cidades, é como termos 0

if id_combo1 = "" then

id_combo1 = 0

end if

'vamos fazer a procura de freguesias referentes ao

'id da cidade escolhida

SQLStmt = "SELECT id_combo2, nome_combo2 FROM combo2 "

SQLStmt = SQLStmt & "WHERE id_combo1=" & id_combo1

'executamos o recordset

rs.Open SQLStmt, conn, 2, 1

'construímos a combo das freguesias

Response.Write"<font face='Verdana,Arial' size='2'>"

Response.Write<b>combo secundária </b></font>"

Response.Write"<SELECT name='combo2'>"

while not rs.EOF

Response.Write"<OPTION "

'aqui também se controla se houve escolha antes,

'para não perdermos a sua visualização

if CInt(Request.Form("combo2"))= rs(0) then

Response.Write"selected "

end if

Response.Write"value='"&rs(0)&"'>"&rs(1)&"</OPTION>"

rs.MoveNext

wend

Response.Write"</SELECT>"

rs.close ' fechar o recordset

End Sub

' criação de uma conexão DSNLess

conn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="

conn = conn & Server.Mappath("combos.mdb") & ";"

' inicialização do bjecto do recordset

Set rs = Server.CreateObject("ADODB.Recordset")

' criação do formulário que vai suportar ambas as combos

Response.Write"<FORM name='form1' action='combos.asp'"

Response.Write" method='POST'>"

' vamos chamar a combo 1

Call Combo1()

' e vamos também chamar a combo 2

Call Combo2()

' finalizamos o formulário com a Tag para o efeito

Response.Write"</FORM>"

%>

Boa programação!

Autor: João Vieira - (developer@joaovieira.com)

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe, mas vamos maneirar. Do contrário teremos (dark0 e/ou Eu) fechar o tópico por motivo de discussão.

E vamos ter calma, às vezes deu erro no fórum, no browser, sei lá, e a gente volta e dá submit dinovo, dae quando vê foram criados dois tópicos.

E isso pode ter sido feito num intervalo de tempo distante, dae nem o controle de flood do fórum pode ajudar.

Só isso. biggrin.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...