controles do webform e variaveis da query

06/10/2009

Olá,   Tenho um webform com vários dropdownlists, e, quando eu seleciono as opções que eu quero, e clico no botão filtrar, deveria aparecer um gridview com as informações filtradas, mas não está acontecendo.   Eu utilizo um banco de dados MySql, e já instalei o MySqlconnector. Eu testo a conexão com o banco e dá tudo ok.   Eu acho que já sei qual o é o problema, só não sei como resolver.   Quando eu configuro o Sqldatasource que alimenta o gridview, na parte do query builder, eu testo e recebo o retorno conforme os parametros que coloco em cada variavel, por exemplo: @pessoa=Todos.   A grande questão é: quando eu dou ok no query builder, não aparece a tela onde eu associo as variaveis (@algumacoisa) com os controles dropdownlist do webform, ou seja, mesmo que eu selecione as opções, as variaveis estarão sempre vazias, porque não estão recebendo valor nenhum, e assim a gridview não mostra nada.   Para resolver meu problema, eu preciso saber como eu associo as variaveis da query (feita no query builder) com os controles dropdownlist do webform (lembrando que a tela de configuração das variaveis não aparece na configuração da query do mysql) ???   Por favor, tenho urgência nesta questão.   Muito obrigado.   João Luiz
João Teixeira

João Teixeira

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

06/10/2009

Ola João,   Para fazer o que quer, basta concatenar os valores recuperados das seleções dos dropDownLists em sua qeury, seria algo assim:     string sql = "select * from categoria "; int codCategoria = Convert.ToInt32("0" + ddlCategoria.selectedValue);   if (codCategoria > 0)    sql +=  "where cod_categoria = " + codCategoria;   Entendeu? Ou você esta usando o wizard? Caso não entenda algo, me avise, ok?   Aguardo Abraços   Att Luiz Maia
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Olá, Luiz Angelo, e obrigado pelo pronto atendimento.   entendi sim, mas estou fazendo a query pelo querybuilder, quando eu edito o sqldatasource... é possivel fazer estas inclusoes dentro no sql, ou eu tenho que trasferir tudo para uma classe externa?   a minha query está assim:   SELECT     cadastro.idcadastro, cadastro.pessoa, cadastro.nome, cadastro.cargo, cadastro.sexo, cadastro.comoconheceu, cadastro.nascimento, YEAR(NOW()) - YEAR(cadastro.nascimento) AS idade   FROM         cadastro   WHERE (cadastro.pessoa = @pessoa OR @pessoa = 'Todos') AND              (cadastro.sexo = @sexo OR @sexo = 'Todos') AND 
             (cadastro.cargo = @cargo OR @cargo = 'Todos') AND 
             (cadastro.comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND              (@idade = 1)               OR                (cadastro.pessoa = @pessoa OR @pessoa = 'Todos') AND              (cadastro.sexo = @sexo OR @sexo = 'Todos') AND
             (cadastro.cargo = @cargo OR @cargo = 'Todos') AND 
             (cadastro.comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND              (@idade = 2) AND 
             (YEAR(NOW()) - YEAR(cadastro.nascimento) >= 15) AND (YEAR(NOW()) - YEAR(cadastro.nascimento) < 25)    Tentei colocar de uma forma organizada para facilitar o entendimento. (cortei o restante da query porque segue o mesmo visual, se eu conseguir alterar este, o resto é facil.)   É o seguinte:   como voce deve perceber, cada linha dos blocos ao lado do "OR" central, representa um campo de um dropdownlist. Então, se o valor do campo pessoa da tabela cadastro for igual a variavel @pessoa que receberá o valor do dropdownlist pessoa, então vai retornar o registro... e assim por diante.   Se eu testo isso no query builder no wizard, eu tenho o retorno dos registros, pois eu preencho manualmente as variaveis @pessoa etc...   Agora, no webform funcionando nao.   eu entendi o que voce propos, e quero saber se consigo fazer isso aqui nesta query, ou teria que fazer isso em outra classe?   Se tenho que fazer isso em outra classe, como fazer? Aí sim o negócio vai complicar para mim!!!   Por favor, se nao der para fazer na query, faça um exemplo pequeno com a primeira parte da minha query para eu entender como isso vai funcionar com a nova classe, o sqldatasource que alimenta o gridview, o proprio gridview e as dropdownlists...   Mais uma vez, muito obrigado.
GOSTEI 0
Luiz Maia

Luiz Maia

06/10/2009

Oi Ari, me mande o codigo onde popula o datasource por favor... Aguardo   Luiz Maia
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Oi, meu nome não é Ari, é João Luiz...   o código está um pedaço no post de baixo, mas vou enviar o codigo todo se vc prefere...     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:antectreinamentoConnectionString %>" SelectCommand="SELECT idcadastro, pessoa, nome, cargo, sexo, comoconheceu, nascimento, YEAR(NOW()) - YEAR(nascimento) AS idade FROM cadastro WHERE (pessoa = @pessoa OR @pessoa = 'Todos') AND (sexo = @sexo OR @sexo = 'Todos') AND (cargo = @cargo OR @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND (@idade = 1) OR (pessoa = @pessoa OR @pessoa = 'Todos') AND (sexo = @sexo OR @sexo = 'Todos') AND (cargo = @cargo OR @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND (@idade = 2) AND (YEAR(NOW()) - YEAR(nascimento) &gt;= 15) AND (YEAR(NOW()) - YEAR(nascimento) &lt; 25) OR (pessoa = @pessoa OR @pessoa = 'Todos') AND (sexo = @sexo OR @sexo = 'Todos') AND (cargo = @cargo OR @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND (@idade = 3) AND (YEAR(NOW()) - YEAR(nascimento) &gt;= 25) AND (YEAR(NOW()) - YEAR(nascimento) &lt; 35) OR (pessoa = @pessoa OR @pessoa = 'Todos') AND (sexo = @sexo OR @sexo = 'Todos') AND (cargo = @cargo OR @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND (@idade = 4) AND (YEAR(NOW()) - YEAR(nascimento) &gt;= 35) AND (YEAR(NOW()) - YEAR(nascimento) &lt; 45) OR (pessoa = @pessoa OR @pessoa = 'Todos') AND (sexo = @sexo OR @sexo = 'Todos') AND (cargo = @cargo OR @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND (@idade = 5) AND (YEAR(NOW()) - YEAR(nascimento) &gt;= 45) AND (YEAR(NOW()) - YEAR(nascimento) &lt; 55) OR (pessoa = @pessoa OR @pessoa = 'Todos') AND (sexo = @sexo OR @sexo = 'Todos') AND (cargo = @cargo OR @cargo = 'Todos') AND (comoconheceu = @comoconheceu OR @comoconheceu = 'Todos') AND (@idade = 6) AND (YEAR(NOW()) - YEAR(nascimento) &gt;= 55)" ProviderName="<%$ ConnectionStrings:antectreinamentoConnectionString.ProviderName %>"> </asp:SqlDataSource>
GOSTEI 0
Luiz Maia

Luiz Maia

06/10/2009

Desculpe João,   Vc atribuiu os parametros? Como abaixo:   // Encloses the keyword in SQL wildcard characters.
titleKeyword = "%" + txtTitleKeyword.Text + "%";
this.OleDbDataAdapter1.SelectCommand.Parameters["Title_Keyword"].Value = titleKeyword;
this.OleDbDataAdapter1.Fill(dsAuthors1);     Aguardo Sem eles, nao funciona, ok?     Abraços Att Luiz Maia
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Olá,   Não atribuí não, é este o meu problema, eu não sei como atribuí-los. O que você chama de parametros, são os "@pessoa, @sexo" que estão na sql e preciso associá-los ao dropdownlist, certo?   Bem, este código abaixo, eu não entendi como funciona... Eu utilizo ele onde? no pageload da pagina do grid view? no código asp.net do webform? na sql? aqui voce colocou this.OleDbDataAdapter... mas eu uso MySql, é esse comando mesmo? Preciso saber como faço esta atribuição.   // Encloses the keyword in SQL wildcard characters.
titleKeyword = "%" + txtTitleKeyword.Text + "%";
this.OleDbDataAdapter1.SelectCommand.Parameters["Title_Keyword"].Value = titleKeyword;
this.OleDbDataAdapter1.Fill(dsAuthors1);   Att,   João Luiz
GOSTEI 0
Luiz Maia

Luiz Maia

06/10/2009

Ola João,   No lugar do Oledb vc deve usar o componente de sua conexão com MySql. E depois vc usa o codigo antes do Bind do GridView.   Ficaria assim:   this.Seu OleDbOleDbDataAdapter1.SelectCommand.Parameters["Pessoa"].Value = codPessoaDropDown; this.Seu OleDbOleDbDataAdapter1.SelectCommand.Parameters["Outros"].Value = codPessoaDropDown;
this.OleDbDataAdapter1.Fill(dsAuthors1);
  Mas para isto vc precisara usar DataApadter, não da para fazer usando o wizard, ok?   Aguardo seu contato, caso não compreenda algo, vamos por partes, ok. Abraços Att Luiz Maia    
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Entendo...    E como eu utilizo data adapter?   crio uma nova classe? insiro um novo dataset? Eu nunca trabalhei com data adapter...   não sei seu funcionamento...   :(
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Luiz,   Eu criei um DataSet e acrescentei as tabelas de cadastro que eu preciso, e percebi que automaticamente ele cria um tableAdapter logo abaixo de cada instancia de tabela.   Agora, como eu faço o restante, na verdade ONDE eu faço o resto do código?   Obrigado.
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Eu consegui criar dentro do dataset, um tableadapter com a instrução sql que eu tinha criado para o sqldatasource. Foi criada uma "tabela" com os campos que eu preciso filtrar e os metodos fill e get. Agora, como e onde eu uso isso? 
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Olá novamente, Consegui de novo, e com uma configuração automática. Na verdade, ao invés de usar o sqldatasource, que não me permite configurar os parametros com os controles do webform, eu utilizei um objectdatasource e consegui configurar os parametros com os controles. Agora está funcionando. De qualquer forma, obrigado pela atenção... 
GOSTEI 0
Luiz Maia

Luiz Maia

06/10/2009

Ok João,   Continuamos a sua disposição para qualquer tipo de dúvidas, ok? Abraços   Att Luiz Maia
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Obrigado pela ajuda, eu iniciei a busca quando voce disse sobre o tableadapter. Foi um pouco difícil, mas funcionou.
GOSTEI 0
POSTAR