Archive for abril 2011

Criando ancoras em HTML e Javascript

Para entender o que é âncora, imagine a seguinte situação, ao clicar em um link “topo” ao final da página, o usuário será direcionado ao início da página. Perceba que, o conceito de âncora é simples, são links estabelecidos em qualquer parte do documento, que servirão como “marcadores de locais”.
Será exemplificado duas formas de se criar âncoras, mas para ambas deve-se conter:
  • Um local definido na página que será a âncora;
  • Um link para direcionar ao local específico;
Âncora em HTML
Primeiramente deve-se definir o local de destino. Você deve incluir a seguinte tag exatamente no local onde quer que o link vá:
<div id="topo"></div>

Deve-se definir o identificador do local (neste caso uma div) marcador da página. Em seguida, pode-se utilizar a tag “a” para criar um link onde irá direcionar para o ponto onde foi definido (div topo).
<a href="#topo">ir topo</a>
Observe que, no href foi colocado o símbolo “#” acompanhado do identificador do componente para qual a página será direcionada, este símbolo fará com que o navegador entenda que o link direcionará uma âncora.
Âncora em Javascript
Da mesma maneira que o HTML, deve-se definir o local de destino e o link da âncora, a diferença , que será utilizado um método Javascript para direcionar a âncora, e utilizar o método onlick no lugar do href, observe.
<script type="text/javascript">
    function ancora(objID) {
        document.getElementById(objID).focus();
    }
</script>


<div id="topo"></div>
<a onclick="ancora('topo');" ></a>
Veja que, o método onlick direciona à função “ancora” e é passado o nome do componente a qual será direcionada a página. Dentro da função, utilizando o getElementById, o componente é “focado”, assim ocorrendo o processo de âncora.
Podem ser incluídas quantas âncoras quiser na mesma página, apenas deve-se diferenciá-las pelo nome.

Selecionar varios registros – CheckBox em GridView

Durante o desenvolvimento de seus projetos, você já pode ter passado pela seguinte situação: tem-se uma coleção de dados exibidas em um GridView e deseja selecionar um ou vários registros para efetuar alguma ação. Nesse artigo, veremos como selecionar vários Checkbox, repetido nas colunas de um GridView e capturar o valor do identificador dessas colunas.
Análise da aplicação
Primeiramente, deve-se entender que, são “n” situações possíveis onde se necessita selecionar vários checkbox, porém, neste exemplo em questão, teremos um gridview contendo algumas categorias, onde se devem selecionar as que terão relacionamento com um determinado cliente. Lembrando que, o foco do artigo não é a criação da aplicação (incluindo criação de banco e inserção de dados).
Populando o GridView
Supondo que tenhamos uma tabela tbCategoria com os seguintes campos: Id (int) e Nome (nvarchar(100)). Os dados desta tabela serão exibidos através de um GridView, que terá as colunas respectivas aos campos e um CheckBox, vejam na figura 1:
Figura 1 – GridView Categorias
Abaixo segue código de criação:
<asp:GridView ID="gvSubCategoria" runat="server" CellPadding="4" DataKeyNames="Id"
        ForeColor="#333333" Width="230px" AutoGenerateColumns="False" GridLines="None"
        DataSourceID="sdsCategorias">
        <RowStyle BackColor="#E3EAEB" />
        <Columns>
            <asp:TemplateField HeaderText="Categorias">
                <ItemTemplate>
                    <asp:CheckBox ID="cbItem" runat="server" />
                    <asp:Label ID="lblIdCategoria" runat="server" Text='<%# Eval("Id") %>' Style="font-family: Arial;
                        font-size: small"></asp:Label>
                    <asp:Label ID="lblNomeCategoria" runat="server" Text='<%# Eval("Nome") %>' Style="font-family: Arial;
                        font-size: small"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#7088c5" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#7C6F57" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView>
    <asp:SqlDataSource ID="sdsCategorias" runat="server" ConnectionString="<%$ ConnectionStrings:csArtigo %>"
        SelectCommand="SELECT [Id], [Nome] FROM [tbCategoria]"></asp:SqlDataSource>
O código acima cria um GridView customizado, preenchido através do SqlDataSource “sdsCategorias”, e suas colunas foram criadas dentro de um TemplateField, com intuído de criar um CheckBox “cbItem”, para cada linha de resultado da busca. Pronto, agora que o grid foi preenchido, adicionaremos um button “btnCadastrar”, onde este irá capturar os “id”s das linhas foram selecionadas através do CheckBox.
Após adicionar o botão, em seu método onclick, adicione o seguinte código:
for (int i = 0; i <= gvCategoria.Rows.Count - 1; i++)
        {
            GridViewRow dgItem = gvCategoria.Rows[i];
            CheckBox cb = (CheckBox)dgItem.FindControl("cbItem");

            if (cb.Checked)
            {
                Label lblId = (Label)dgItem.FindControl("lblIdCategoria");
                Label lblNome = (Label)dgItem.FindControl("lblNomeCategoria");
                Response.Write(lblId.Text + " - " + lblNome.Text + "<br />");
            }

        }
Percebam que, foi criado um laço de repetição onde irá percorrer todo resultado exibido no GridView, linha por linha. Foi criado um dgItem do tipo GridViewRow, para que, através do método FindControl possa encontrar o CheckBox “cbItem”.
Utilizando a instrução de controle “if” verificamos se este CheckBox está selecionado, caso esteja, serão criadas duas Labels (lembrando que são Labels por que no GridView foram adicionadas Labels para armazenar os valores de Id e Nome) que receberão seus valores, novamente utilizando o método FindControl do dgItem.
Por fim, foi utilizado o Response.Write para “imprimir” os valores selecionados na grid.
Observe na figura 2 a aplição completa:

Figura 2 – Gridview selecionado
Veja abaixo o código completo do exemplo:
Aspx
<asp:GridView ID="gvCategoria" runat="server" CellPadding="4" DataKeyNames="Id"
        ForeColor="#333333" Width="230px" AutoGenerateColumns="False" GridLines="None"
        DataSourceID="sdsCategorias">
        <RowStyle BackColor="#E3EAEB" />
        <Columns>
            <asp:TemplateField HeaderText="Categorias">
                <ItemTemplate>
                    <asp:CheckBox ID="cbItem" runat="server" />
                    <asp:Label ID="lblIdCategoria" runat="server" Text='<%# Eval("Id") %>' Style="font-family: Arial;
                        font-size: small"></asp:Label>
                    <asp:Label ID="lblNomeCategoria" runat="server" Text='<%# Eval("Nome") %>' Style="font-family: Arial;
                        font-size: small"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#7088c5" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#7C6F57" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView>
    <asp:SqlDataSource ID="sdsCategorias" runat="server" ConnectionString="<%$ ConnectionStrings:csArtigo %>"
        SelectCommand="SELECT [Id], [Nome] FROM [tbCategoria]"></asp:SqlDataSource>
    <br />
    <asp:Button ID="btnCadastrar" runat="server" Text="Cadastrar"
        onclick="btnCadastrar_Click" />
C#
protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnCadastrar_Click(object sender, EventArgs e)
    {
        for (int i = 0; i <= gvCategoria.Rows.Count - 1; i++)
        {
            GridViewRow dgItem = gvCategoria.Rows[i];
            CheckBox cb = (CheckBox)dgItem.FindControl("cbItem");

            if (cb.Checked)
            {
                Label lblId = (Label)dgItem.FindControl("lblIdCategoria");
                Label lblNome = (Label)dgItem.FindControl("lblNomeCategoria");
                Response.Write(lblId.Text + " - " + lblNome.Text + "<br />");
            }

        }
    }
Foi criado assim, um GridView que contem caixas de seleção, e um botão, que escreve na tela os valores que foram selecionados no grid.