none
Filtrar Áreas, Categorias e Subcategorias em GridView por parametros. RRS feed

  • Pergunta

  • Boa tarde Senhores(as),

    Possuo o seguinte cenário:

    Uma pagina com um gridview que lista todas as áreas de minha aplicação, ao clicar no botão DETALHES o usuário é redirecionado para a pagina de CATEGORIAS onde um  Request.QueryString recebe o ID da Área e deve exibir em um GridView todas as categorias existentes naquela área.

    Estou tendo dificuldades no GridView, através da passagem de parâmetros pelo Request.QueryString não consigo filtrar os dados e exibir os dados APENAS daquela área.

    ====================================================================================================

    GridView na pagina de Categorias

    <asp:GridView ID="Lista" runat="server" AllowPaging="true" 
            AutoGenerateColumns="false" PageSize="10" 
            onpageindexchanging="Lista_PageIndexChanging" onsorting="Lista_Sorting" onrowcommand="Lista_RowCommand"
            Width="100%" >

                <Columns>
                    <asp:BoundField DataField="idCategorias" HeaderText="Categorias" 
                        ReadOnly="True" SortExpression="idCategorias" />
                    <asp:BoundField DataField="idAreas" HeaderText="Areas" 
                        SortExpression="idAreas" />
                    <asp:BoundField DataField="cat_nome" HeaderText="Nome" 
                        SortExpression="cat_nome" />
                    <asp:BoundField DataField="cat_descricao" HeaderText="Descricao" 
                        SortExpression="cat_descricao" />
                    <asp:BoundField DataField="cat_observacoes" HeaderText="Observacoes" 
                        SortExpression="cat_observacoes" />
                </Columns>
            </asp:GridView>

    código do arquivo .CS

    Conexao con = new Conexao();
        protected void Page_Load(object sender, EventArgs e)
        {
            int _id = Convert.ToInt16( Request.QueryString["id"] );

            if (!IsPostBack)
            {
                Action_Grid();
            }
        }

        protected void Lista_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            Lista.PageIndex = e.NewPageIndex;
            Action_Grid();
        }
        protected void Action_Grid()
        {
            Lista.DataSource = con.tbcategorias;
            Lista.DataBind();
        }

    segunda-feira, 9 de abril de 2012 16:07

Todas as Respostas

  • Como você cria o DataSource:

    Lista.DataSource = con.tbcategorias;
    Onde é preenchido o
    con.tbcategorias


    Ninguém falou que seria fácil!

    segunda-feira, 9 de abril de 2012 16:23
  • Não entendi o que você quis dizer. Foi uma pergunta ou afirmativa?
    terça-feira, 10 de abril de 2012 18:25
  • Foi uma pergunta, mas acho que me expressei mal.

    O Lista.DataSource é o conteúdo da tabela?

    È isso? Dai vc quer filtrá-lo de acordo com algum parâmtro?


    Ninguém falou que seria fácil!

    terça-feira, 10 de abril de 2012 19:10
  • Sim meu nobre, desejo passar um parâmetro pelo Request.QueryString[] , esse deve ser a identificação da área “idArea” que desejo que sejam exibidas as categorias nela existentes.
    Assim a tabela (GridView) vai demonstrar apenas os itens que possuem essa chave estrangeira.
    Bom, deixe-me tentar te passar mais detalhes da aplicação e de como cheguei a esse DataSource:
    Tenho duas tabelas no banco MySQL relacionadas,

    tbAreas (nome da tabela)
    idAreas (PK)
    are_nome
    are_descricao

    tbCategorias (nome da tabela)
    idCategorias (PK)
    idAreas (FK que vem da tbAreas)
    cat_nome
    cat_descricao

    A connectionString foi nomeada Conexao em meu web.config, na primeira linha do código .CS “Conexao com = new Conexao()” já mostra a declaração dela e o meu Namespace já esta em uso também.
    No trecho 
        protected void Action_Grid()
        {
            Lista.DataSource = con.tbcategorias;
            Lista.DataBind();
        }
    esse datasource é o que já esta trazendo os valores existentes na tabela tbCategorias, porem eis o local aonde eu estou com a tremenda dificuldade em como fazer para filtrar esses dados.
    Tens alguma dica para me auxiliar?
    Grato.
    terça-feira, 10 de abril de 2012 21:39
  • No link: http://ajuda.uolhost.com.br/index.php?p=resposta&res=1226#rmcl têm um exemplo de como se conectar ao Mysql e criar uma fonte da dados.

    Altere o select para:

              string cmdMYSQL = string.Format("SELECT * FROM tbCategorias WHERE idAreas = " + Request.QueryString["idAreas"] );
    

    E use a fonte resultante como DataSource do seu gridview.

    QQ dúvida é só postar!


    Ninguém falou que seria fácil!

    terça-feira, 10 de abril de 2012 21:59
  • o problema está aqui

     int _id = Convert.ToInt16( Request.QueryString["id"] );
    
            if (!IsPostBack)
            {
                Action_Grid();
            }

    com o !ispostback ele não vai entrar para fazer o load na sua grid novamente e para sua consulta vc deve passar o id tb


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    • Marcado como Resposta Harley Araujo quarta-feira, 11 de abril de 2012 12:40
    • Não Marcado como Resposta Harley Araujo quarta-feira, 11 de abril de 2012 12:40
    • Sugerido como Resposta Harley Araujo quarta-feira, 11 de abril de 2012 12:40
    • Não Sugerido como Resposta T3ll3s quarta-feira, 11 de abril de 2012 18:42
    quarta-feira, 11 de abril de 2012 11:52
    Moderador
  • remover o ispostback não altera em nada meu nobre, de qualquer forma tenho que preencher o gridview, esse apenas seria para caso a pagina fosse repostada ele recarregar o gridview.

    O meu objetivo é filtrar os dados do grid para apenas serem exibidas as categorias de uma unica área.

    sexta-feira, 13 de abril de 2012 15:08
  • Meu nobre, não consegui ou não entendi. Tentei mas não funcionou.
    sexta-feira, 13 de abril de 2012 15:09
  • Com disse no post acima vc terá de utilizar uma expressão sql com a cláusula WHERE.

    Não tem como utilizar a tabela direto como vc esta utilizando.


    Ninguém falou que seria fácil!

    sexta-feira, 13 de abril de 2012 15:13