Trabalhando com GridView e BoundField escondido


por Mauricio Junior em 1/1/2011 0

Hoje vou falar e mostrar como trabalhar com GridView e BoundField escondido. Analisando fóruns, dúvidas e blogs na internet, percebi que muitos precisam de ajuda com o componente. Nesse sentido, resolvi escrever o artigo explicando passo a passo a melhor maneira (sem gato) para trabalhar com BoudField escondido.

Tags: Visual Studio 2010, C#.NET, Plataforma ASP.NET, GridView e BoundField.
Problema

O problema principal é: criar um GridView que tenha todos os campos do banco de dados, porém alguns não precisam ser mostrados ao usuário final. Estes campos que não precisam ser mostrados são necessários para controle interno ou seleção interna. Para ser mais específico, existem dois grids na tela, ao selecionar uma linha do grid, automaticamente o sistema mostra o outro grid de acordo com o que foi selecionado. 

Os dados passados de um grid para o outro não precisam estar à amostra do usuário, ou seja, podem ficar escondidos dentro do grid e com disponibilidade pelo usuário para pegar valores.

Passando do pressuposto que você já fez a sua página, o primeiro passo é colocar todos os campos que deseja no GridView. (Code 1.1)



 

<asp:GridView ID="grdDocumento" runat="server" Width="940px" PageSize="3" BackColor="White"

          BorderColor="#EEEEEE" BorderStyle="Solid" BorderWidth="2px" CellPadding="3"

          CellSpacing="1" GridLines="Horizontal" AllowPaging="True"

        AutoGenerateColumns="False"

        onpageindexchanging="grdDocumento_PageIndexChanging"

        onselectedindexchanged="grdDocumento_SelectedIndexChanged"

        onrowcreated="grdDocumento_RowCreated">

        <PagerSettings Mode="NumericFirstLast" FirstPageText="Primeira" LastPageText="Última" PageButtonCount="5" />

       

        <FooterStyle BackColor="White" ForeColor="#000066" BorderStyle="Solid" />

        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" BorderStyle="Solid" />

        <SelectedRowStyle BackColor="#A0A4AC" Font-Bold="True" ForeColor="White" BorderStyle="Solid" />

        <HeaderStyle BackColor="#D84040" Font-Bold="True" ForeColor="White" BorderStyle="Solid" />

        <AlternatingRowStyle BackColor="#EEEEEE" BorderStyle="Solid" />   

 

        <Columns>

            <asp:CommandField SelectText="»»" ShowCancelButton="False" ShowSelectButton="True">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:CommandField>

            <asp:BoundField DataField="Campo1" HeaderText="Campo1" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo2" HeaderText="Campo2" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo3" HeaderText="Campo3" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo4" HeaderText="Campo4" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="200px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo5" HeaderText="Campo5" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo6" HeaderText="Campo6" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo7" HeaderText="Campo7" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo8" HeaderText="Campo8" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo9" HeaderText="Campo9" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo10" HeaderText="Campo10" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

            <asp:BoundField DataField="Campo11" HeaderText="Campo11" HtmlEncode="False" FooterText="">

                <ItemStyle BorderStyle="Solid" BorderWidth="2px" HorizontalAlign="Center" VerticalAlign="Middle" Width="10px" />

            </asp:BoundField>

        </Columns>

       

</asp:GridView>

 

Code 1.1

Note que coloquei alguns estilos como tamanho, borda, alinhamento horizontal e vertical. Você pode escolher colocar a gosto, o importante é colocar todos os campos em seu GridView.

Existem três métodos específicos que precisam ser criados para o perfeito funcionamento. (Code 2)



 

onpageindexchanging="grdDocumento_PageIndexChanging"

onselectedindexchanged="grdDocumento_SelectedIndexChanged"

onrowcreated="grdDocumento_RowCreated"

 

Code 2

O primeiro método serve para usar paginação, talvez você já saiba disso e nem é o nosso foco mostrar isto neste momento. O segundo método serve para o cliente selecionar uma linha do grid que, automaticamente busca os valores escondidos. O terceiro método serve para esconder os campos que não precisam ser mostrados para o usuário. Ai está o secredo. Lembrando que os valores escondidos não aparecem no HTML, isto é, se for visto o código fonte da página.

Após preencher os dados usando o DataSource e DataBind, o grid passa pelo OnRowCreated que esconde os campos em tempo de execução. Isso faz com que os dados continuem lá de forma escondida e podem ser pegos em outro momento como no SelectedIndexChanged.


OnRowCreated

Para criar o método OnRowCreated, basta selecionar o GridView, clicar em propriedades mais especificamente em Events, escolher o RowCreated clicando duas vezes em cima. (Image 1)



Image 1

        Depois basta verificar a quantidade de colunas existentes no GridView. Depois basta esconder as colunas que o usuário não precisa ver. (Code 3).


 

    protected void grdDocumento_RowCreated(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.Cells.Count == 12)

        {

            e.Row.Cells[6].Visible = false;

            e.Row.Cells[7].Visible = false;

            e.Row.Cells[8].Visible = false;

            e.Row.Cells[9].Visible = false;

            e.Row.Cells[10].Visible = false;

            e.Row.Cells[11].Visible = false;

        }

    }

 

Code 3

Note que foi verificada a quantidade de colunas na célula antes de retirá-las. Retirei seis colunas não necessárias ao usuário, mas preciso delas para controle interno da aplicação. 


SelectedIndexChanged

Com a tela preenchida, o usuário pode clicar e selecionar uma linha específica. Todos os valores pegos podem preencher outros campos, inclusive os escondidos do usuário.  Neste método, além de ter que criar no gridview clicando duas vezes em Events, vou mostrar como pegar os dados escondidos. (Code 4)

A imagem 1 mostra que o “SelectedIndexChanged” foi criado clicando duas vezes.

 

protected void grdDocumento_SelectedIndexChanged(object sender, EventArgs e)

    {

        GridViewRow _linha = grdDocumento.SelectedRow;

 

        String _caminho = _linha.Cells[8].Text + @"\" + _linha.Cells[9].Text;

        _caminho = _caminho.Replace(@"\", "|");

 

        ChamaMeuMetodo(_caminho);

 

    }

 


Code 4

Note que os dados podem ser pegos normalmente usando o comando SelectedRow atribuído para a variável chamada “_linha”. Com a variável eu posso pegar a célula selecionada colocando o número ou “índex” indicado pelo framework. Depois de pegar os valores, posso chamar um método passando o valor. O valor que peguei foi um dos escondidos.

Bom, fico por aqui e qualquer dúvida pode entrar em contato pelo site. Espero que tenha gostado.

voltar   comente  subir

 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Sistema de Login em ASP – Parte V
Construindo o Windows 8
Integração é necessário
Como fazer uma enquete - parte 1
Plataforma Web ou Windows Forms ?
Trabalhando com Session
Importar projetos antigos para o Visual Studio 2010
Vírus - Email com viagra
GridView Parte III
Gravando Erros com Exception - Parte I
Chama método que está dentro do COM PLUS (COM +)
WebServices usando soapHeader
Windows Forms Application – Alterando Arquivo de Configuração Dinamicamente
Teclas de atalho - Visual Studio .NET 2005
Deixando o componente ASP:MENU compatível com qualquer browser
Ler RSS usando o Visual Studio.NET 2005
Microsoft Research Laptop Multi-Touch
Lendo o livro O Efeito Facebook
Adicionar uma coluna em um DataTable
Trabalhando com GridView e RowCommand
Linguagem de programação: Nunca faça isso - C#.NET
Sistema iGas - Controle de Gasolina
Ajax com Visual Studio.NET 2005
Definindo o botão padrão.
Vídeo HTC
Armazenando dados no ViewState – Parte I
Trabalhando com o componente TabContainer
Sair da tela clicando ESC no Windows Forms
Visual SourceSafe - Série 3
Dica Importante SQL Server 2008 Management Studio
Generics usando Object DataSource
Finanças para os filhos
Promo Code do Livro CSharp .NET para Web
Conhecendo o controle Wizard ASP.NET 2.0
MSDN Code Gallery