Como usar Radio Button em uma GridView Asp.NET

O intuito deste artigo é apresentar de forma consolidada, várias materiais que peguei na web sobre como utilizar um Template Field do tipo RadioButton em um grid do Asp. Net.

Por | @oficinadanet Programação
<p>O intuito deste artigo &eacute; apresentar de forma consolidada, v&aacute;rias materiais que peguei na web sobre como utilizar um &ldquo;Template Field&rdquo; do tipo RadioButton em um grid do Asp. Net.</p> <p>Pode parecer simples a utiliza&ccedil;&atilde;o deste tipo de controle no grid, por&eacute;m quando tive que utilizar me deparei com v&aacute;rios problemas e tive grande dificuldade em encontrar em um &uacute;nico lugar a solu&ccedil;&atilde;o para os problemas. Ap&oacute;s a solu&ccedil;&atilde;o, que consegui com a ajuda pricipalmente de pessoas do f&oacute;rum MSDN, resolvi juntar tudo e compartilhar com todos. Espero que este artigo possa ajud&aacute;-los.</p> <h2>Criando o Template Field:</h2> <p><br /> Bom, primeiramente vamos adicionar um TemplateFied do tipo RaddionButton no GridView, conforme mostra o c&oacute;digo abaixo:</p> <pre><code> </code></pre> <p>&nbsp;</p> <h2>Selecionando um &uacute;nico radio Button na GridView:</h2> <p><br /> Ao rodar este c&oacute;digo vamos nos deparar com o primeiro problema: &ldquo;&Eacute; poss&iacute;vel selecionar mais de uma op&ccedil;&atilde;o mesmo definindo a propriedade groupName. Isso ocorre devido a gera&ccedil;&atilde;o din&acirc;mica da propriedade name do controle input renderizado em html. Para haver a sele&ccedil;&atilde;o de uma &uacute;nica op&ccedil;&atilde;o a propriedade name dos radiobuttons precisam ser a mesma, criando-se um grupo.&rdquo; (2009, Thiago Rog&eacute;rio).<br /> <br /> Abaixo temos um breve tutorial de como fazer a sele&ccedil;&atilde;o &uacute;nica do radiobutton no controle gridview.<br /> <br /> <strong>1. Adicionar a fun&ccedil;&atilde;o javascript no c&oacute;digo do programa:</strong></p> <pre><code>function SetUniqueRadioButton(nameregex, current) { re = new RegExp(nameregex); for(i = 0; i &lt; document.forms[0].elements.length; i++) { elm = document.forms[0].elements[i] if (elm.type == 'radio') { if (re.test(elm.name)) { elm.checked = false; } } } current.checked = true; }</code></pre> <p><br /> <br /> 2. Adicionar um template field no gridview com o controle radiobutton:</p> <pre><code> </code></pre> <p><br /> <br /> 3. No evento RowDataBound do gridview adicionar a fun&ccedil;&atilde;o javascript no onclick do radiobutton:</p> <pre><code>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { RadioButton rdo = (RadioButton)e.Row.FindControl("RadioButton1"); if (rdo == null) { return; } string script = "SetUniqueRadioButton('GridView1.*nomeGrupo',this)"; rdo.Attributes.Add("onclick", script); }</code></pre> <p><br /> <br /> <strong>Recuperando o &iacute;ndice da linha selecionado com o radio Button na GridView:</strong><br /> Resolvido o problema da sele&ccedil;&atilde;o &uacute;nica, vamos nos deparar com outra quest&atilde;o, como obter &iacute;ndice de linha (ou mesmo o valor de um campo) selecionada por RadioButton em uma GridView no ASP.NET. Segundo Paulo C&eacute;sar Viana, &ldquo; tem N maneiras de fazer isto. Uma delas &eacute; usar o evento do RadioButton. Quando acionado voc&ecirc; vai recuperar o controle e depois um objeto GridViewRow, atrav&ecirc;s da propriedade Parent. No GridViewRow vai ter o &iacute;ndice (index)&rdquo;.<br /> Abaixo segue o exemplo enviado pelo mesmo e que resolve a quest&atilde;o:</p> <pre><code>&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&gt;</code></pre> <p><br /> P&aacute;gina Aspx:</p> <pre><code> Untitled Page <form id="form1"> <div> </div> <br /> </form> </code></pre> <p><br /> <br /> <br /> Code Behind:</p> <pre><code>using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Collections.Generic; using System.Collections.Specialized; public partial class _Default : System.Web.UI.Page { public class Pais { public int Codigo { get; set; } public string Nome { get; set; } } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List lstPaises = new List(); lstPaises.Add(new Pais() { Codigo = 1, Nome = "Brasil" }); lstPaises.Add(new Pais() { Codigo = 2, Nome = "Alemanha" }); lstPaises.Add(new Pais() { Codigo = 3, Nome = "Pais qualquer" }); GridView1.DataSource = lstPaises; GridView1.DataBind(); } } protected void rbtAtivo_CheckedChanged(object sender, EventArgs e) { RadioButton rbtAtivo = (RadioButton)sender; GridViewRow row = (GridViewRow)rbtAtivo.Parent.Parent; Label1.Text = string.Format("Index da linha: {0} | Codigo: {1} , Pa&iacute;s : {2}", row.RowIndex, row.Cells[0].Text, row.Cells[1].Text); } }</code></pre> <p><br /> <br /> Visualiza&ccedil;&atilde;o:</p> <blockquote> <div style="text-align: center;"><img src="http://www.oficinadanet.com.br//imagens/coluna/3420//aspnet.jpg" alt="http://www.oficinadanet.com.br//imagens/coluna/3420//aspnet.jpg" /></div> </blockquote> <p><br /> <br /> Tendo isto d&aacute; para trabalhar 100% com o RadioButton da GridView.<br /> <br /> <strong>Refer&ecirc;ncias:</strong><br /> Thiago Rog&eacute;rio. RadioButton em GridView com sele&ccedil;&atilde;o &uacute;nica. Dispon&iacute;vel em: &lt;<a href="http://www.thiagorogerio.com.br/post/RadioButton-em-GridView-com-selecao-unica.aspx" target="_blank">link</a>&gt; Acesso em: 27 fev. 2012.<br /> <br /> Paulo C&eacute;sar Viana. F&oacute;rum MSDN. Dispon&iacute;vel em: &lt;<a href="http://social.msdn.microsoft.com/Forums/pt-BR/504/thread/97ab3902-0a75-4662-bb9d-04711930600f" target="_blank">link</a>&gt;</p>

Mais sobre: asp.net programação
Share Tweet
Comentários
Carregar comentários
Destaquesver tudo