Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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";Acredito que dessa forma possa funcionar.
Oi Rafael, desculpa minha ignorância, mas pode explicar melhor?
Eu to inciando em .net e sou uma verdadeira negação.
Onde vai esse código?
Obrigada :)
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;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>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.
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...