none
HyperLink GridView RRS feed

  • Pergunta

  • Bom dia,

    Estou terminando de fazer um programa Web Applications onde estou com um problema que não consigo resolver.

    Estou fazendo um Grid View e pegando informações do banco, e no meio da tabela do grid tem uma coluna hiperlink com para determinada página.

    Gostaria de fazer o seguinte:

    nesta determinada coluna gostaria que só ouve-se hiperlink quando determinada informação do banco fosse verdadeira.

    Se alguém já fez algo do gênero ou tem algum link com essas informações ficarei muito grato.

    Agradeço desde já.

    terça-feira, 8 de maio de 2012 13:41

Respostas

  • Você pode tratar isso no evento OnRowDataBound, veja:

    .cs

    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Web.UI.WebControls;
    
    namespace WebApplication1
    {
        public class Cliente
        {
            public int ClienteID { get; set; }
            public string Nome { get; set; }
            public string SitePessoal { get; set; }
        }
    
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    List<Cliente> listaDeClientes = new List<Cliente>()
                    {
                        new Cliente{ ClienteID = 1, Nome = "Roberto", SitePessoal= "http://www.meusite.com.br" },
                        new Cliente{ ClienteID = 2, Nome = "Aline" },
                        new Cliente{ ClienteID = 3, Nome = "Ingrid", SitePessoal= "http://www.meusite.com.br" },
                        new Cliente{ ClienteID = 4, Nome = "Alan" },
                    };
    
                    grvClientes.DataSource = listaDeClientes;
                    grvClientes.DataBind();
                }
            }
    
            protected void grvClientes_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    Cliente cliente = (Cliente)e.Row.DataItem;
    
                    if (string.IsNullOrEmpty(cliente.SitePessoal))
                    {
                        e.Row.Cells[2].Text = string.Empty;
                    }
                    else
                    {
                        e.Row.Cells[2].Text = string.Empty;
                        e.Row.Cells[2].Controls.Add(new HyperLink { NavigateUrl = cliente.SitePessoal, Text = "Meu site" });
                    }
                }
            }
        }
    }
    

    .aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView runat="server" ID="grvClientes" OnRowDataBound="grvClientes_RowDataBound">
        </asp:GridView>
        </form>
    </body>
    </html>
    


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 8 de maio de 2012 14:33

Todas as Respostas

  • Você pode tratar isso no evento OnRowDataBound, veja:

    .cs

    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Web.UI.WebControls;
    
    namespace WebApplication1
    {
        public class Cliente
        {
            public int ClienteID { get; set; }
            public string Nome { get; set; }
            public string SitePessoal { get; set; }
        }
    
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    List<Cliente> listaDeClientes = new List<Cliente>()
                    {
                        new Cliente{ ClienteID = 1, Nome = "Roberto", SitePessoal= "http://www.meusite.com.br" },
                        new Cliente{ ClienteID = 2, Nome = "Aline" },
                        new Cliente{ ClienteID = 3, Nome = "Ingrid", SitePessoal= "http://www.meusite.com.br" },
                        new Cliente{ ClienteID = 4, Nome = "Alan" },
                    };
    
                    grvClientes.DataSource = listaDeClientes;
                    grvClientes.DataBind();
                }
            }
    
            protected void grvClientes_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    Cliente cliente = (Cliente)e.Row.DataItem;
    
                    if (string.IsNullOrEmpty(cliente.SitePessoal))
                    {
                        e.Row.Cells[2].Text = string.Empty;
                    }
                    else
                    {
                        e.Row.Cells[2].Text = string.Empty;
                        e.Row.Cells[2].Controls.Add(new HyperLink { NavigateUrl = cliente.SitePessoal, Text = "Meu site" });
                    }
                }
            }
        }
    }
    

    .aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:GridView runat="server" ID="grvClientes" OnRowDataBound="grvClientes_RowDataBound">
        </asp:GridView>
        </form>
    </body>
    </html>
    


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    terça-feira, 8 de maio de 2012 14:33
  • Apenas complementando a dica do Vitor,

    Você pode ainda ter o HyperLink  dentro de um Template. Desta forma basta localizar o mesmo com o método FindControl e fazer o que você quiser.

    Eu acho melhor desta forma, pois se você deixar ficar recuperando ele pelo numero da coluna faz com que toda vez que uma nova coluna for removida ou inserida é necessário alterar o código.

    Com relação a ter ou não o HyperLink , basta que você tire a url e/ou coloque Enable = false ou ainda via CSS faça com que o mesmo fique parecido com um Label quando não tiver que ser utilizado com o link.


    Paulo César Viana
    MCC,MCP,MCTS
    --

    Marque as respostas e contribua para uma melhora no fórum.

    terça-feira, 8 de maio de 2012 15:14