Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lívia Rodrigues

Filtro de pesquisa no Datalist VB.NET

Recommended Posts

Galera, to quebrando a cabeça :/

Eu tenho uma pagina que contem um datalis onde exibo os usuarios cadastrados em um banco. Até ai tudo funciona direitinho.

 

Mas preciso criar um filtro de pesquisa, para que possam ser selecionados os usuarios de acordo com a necessidade do cliente, por exemplo: mostrar apenas usuarios do rj que pertençam a tal categoria e que sejam de tal cidade.

 

Eu tinha feito da seguinte maneira:

Criei um formulario de pesquisa com um dropdownList com os estados e ao selecionar um estado eu o guardo em uma váriavel de sessao:

 

Protected Sub DropDownList3_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DropDownList3.SelectedIndexChanged 

Session("estado") = DropDownList3.SelectedValue

End Sub

Depois no selectCommand do datalist:

 

 SelectCommand="SELECT usuarios.imagem, usuarios.nome,
usuarios.sobrenome, usuarios.data, usuarios.estado, usuarios.cidade, 
Profissionais.atividade_1, Profissionais.atividade_2, Profissionais.atividade_3, 
Profissionais.pretensao_Salarial, Profissionais.sobre  FROM usuarios inner join 
Profissionais on Profissionais.id_usuario=usuarios.id 

WHERE ((usuarios.tipo = 1) AND (usuarios.estado = @estado)) ORDER BY usuarios.cidade"

O problema é que quando eu não seleciono nenhum estado, ele não mostra dado nenhum. Eu preciso que ele mostre os usuários de todos os estados caso um estado não tenha sido selecionado no form de pesquisa.. :/

 

Alguém sabe como fazer isso?

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não trabalho com SelectCommand, se aparecer alguém que trabalha talvez de uma solução melhor.

 

Uma forma que acho que pode dar certo, é adicionar um item em seu dropdownlist, onde o value seja usuarios.estado, desta forma:

 

SeuDropDown.Items.Add(new ListItem("Selecione", "usuarios.estado"));

 

Acho que pode dar certo.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que ta errado é seu select aparentemente.

 

 

Quando a variavel @estado vem sem nenhum valor, você faz um filtro por vazio, ai não irá trazer nada mesmo.

 

coloque uma condição antes do where

 

string query = ""
if (@estado != "")
query = query + "WHERE ((usuarios.tipo = 1) AND (usuarios.estado = @estado)) ORDER BY usuarios.cidade";
else
 query = query + "WHERE (usuarios.tipo = 1) ORDER BY usuarios.cidade";

 

Acredito que dessa forma possa funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que o problema esteja no seu WHERE então para quando você não passar o @estado é só ignorar na sua condição(where) que ele retornará tudo.

 

string query;

query = "SELECT usuarios.imagem, usuarios.nome,
usuarios.sobrenome, usuarios.data, usuarios.estado, usuarios.cidade, 
Profissionais.atividade_1, Profissionais.atividade_2, Profissionais.atividade_3, 
Profissionais.pretensao_Salarial, Profissionais.sobre  FROM usuarios inner join 
Profissionais on Profissionais.id_usuario=usuarios.id ";

if (@estado != "")
query = query + "WHERE ((usuarios.tipo = 1) AND (usuarios.estado = @estado)) ORDER BY usuarios.cidade";
else
 query = query + "WHERE (usuarios.tipo = 1) ORDER BY usuarios.cidade";

SelectCommand= query;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao consegui fazer desse jeito :/

 

eu tentei fazer assim:

Se o dropdown for igual a "Selecione aqui", entao a variavel estado recebe= usuarios.estado

 

no selectcommand ficaria: usuarios.estado=@estado (ou seja, usuarios.estado = usuarios.estado)

Na lógica deveria funcionar, quando eu substituo a variavel @estado por usuarios.estado direto no codigo, funciona

mas quando eu faço com que a variavel receba esse valor não.

 

Parece que quando eu coloco dentro da variavel ele busca no banco estados que tenham o nome= "usuarios.estado" :T

 

Não tem um jeito de colocar um if dentro do meu selectCommand? Se a variavel estado for diferente de vazio selectcommand recebe: (...) ?

 

O codigo atualmente esta assim:

 

 </asp:DataList>
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConnectionString="<%$ ConnectionStrings:workbookConnectionString %>" 
       ProviderName="<%$ ConnectionStrings:workbookConnectionString.ProviderName %>" 

       SelectCommand="SELECT usuarios.imagem, usuarios.nome, usuarios.sobrenome, usuarios.data, usuarios.estado, 
usuarios.cidade, Profissionais.atividade_1, Profissionais.atividade_2, Profissionais.atividade_3, 
Profissionais.pretensao_Salarial, Profissionais.sobre, Profissionais.id_usuario  FROM usuarios inner join 
Profissionais on Profissionais.id_usuario=usuarios.id WHERE ((usuarios.tipo = 1) AND (usuarios.estado = @estado)) 
ORDER BY usuarios.cidade"


       <SelectParameters>

               <asp:SessionParameter  DefaultValue="" Name="estado" 
               SessionField="estado" Type="String" />

       </SelectParameters>
   </asp:SqlDataSource>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, vocês usam código muito estranho para mim ... Pelo que eu percebi, você tem um programa em vb.net com ligação a uma base de dados em access, e quer filtrar os registos por nome/cidade/o que quer que seja. é isso ? porque se for, é muito simples mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.