Usuário com melhor resposta
HyperLink GridView

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á.
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/- Sugerido como Resposta Paulo César Viana terça-feira, 8 de maio de 2012 15:10
- Marcado como Resposta Rodrigo Nogueira de Lima terça-feira, 8 de maio de 2012 17:57
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/- Sugerido como Resposta Paulo César Viana terça-feira, 8 de maio de 2012 15:10
- Marcado como Resposta Rodrigo Nogueira de Lima terça-feira, 8 de maio de 2012 17:57
-
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.