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.

Comentários Rafael Reis   -

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.

Pode parecer simples a utilização deste tipo de controle no grid, porém quando tive que utilizar me deparei com vários problemas e tive grande dificuldade em encontrar em um único lugar a solução para os problemas. Após a solução, que consegui com a ajuda pricipalmente de pessoas do fórum MSDN, resolvi juntar tudo e compartilhar com todos. Espero que este artigo possa ajudá-los.

Criando o Template Field:


Bom, primeiramente vamos adicionar um TemplateFied do tipo RaddionButton no GridView, conforme mostra o código abaixo:




    
        
    
    

 

Selecionando um único radio Button na GridView:


Ao rodar este código vamos nos deparar com o primeiro problema: “É possível selecionar mais de uma opção mesmo definindo a propriedade groupName. Isso ocorre devido a geração dinâmica da propriedade name do controle input renderizado em html. Para haver a seleção de uma única opção a propriedade name dos radiobuttons precisam ser a mesma, criando-se um grupo.” (2009, Thiago Rogério).

Abaixo temos um breve tutorial de como fazer a seleção única do radiobutton no controle gridview.

1. Adicionar a função javascript no código do programa:


function SetUniqueRadioButton(nameregex, current)    

{
   re = new 
   RegExp(nameregex);
   
   for(i = 0; i < 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;
}



2. Adicionar um template field no gridview com o controle radiobutton:




    
        
    



3. No evento RowDataBound do gridview adicionar a função javascript no onclick do radiobutton:


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);
}



Recuperando o índice da linha selecionado com o radio Button na GridView:
Resolvido o problema da seleção única, vamos nos deparar com outra questão, como obter índice de linha (ou mesmo o valor de um campo) selecionada por RadioButton em uma GridView no ASP.NET. Segundo Paulo César Viana, “ tem N maneiras de fazer isto. Uma delas é usar o evento do RadioButton. Quando acionado você vai recuperar o controle e depois um objeto GridViewRow, atravês da propriedade Parent. No GridViewRow vai ter o índice (index)”.
Abaixo segue o exemplo enviado pelo mesmo e que resolve a questão:


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>


Página Aspx:







    Untitled Page


    <form id="form1">
    <div>
        
            
                
                
                
                    
                        
                    
                
            
        
    
    </div>
    

    
    </form>




Code Behind:


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ís : {2}", row.RowIndex, row.Cells[0].Text, row.Cells[1].Text);

    }
}



Visualização:

https://www.oficinadanet.com.br//imagens/coluna/3420//aspnet.jpg



Tendo isto dá para trabalhar 100% com o RadioButton da GridView.

Referências:
Thiago Rogério. RadioButton em GridView com seleção única. Disponível em: <link> Acesso em: 27 fev. 2012.

Paulo César Viana. Fórum MSDN. Disponível em: <link>

» Assine grátis o nosso RSS e receba tudo antes
» Assine grátis por e-mail | + feedly

Compartilhe no Facebook

Compartilhe no Twitter

 
carregando...

FAÇA UM COMENTÁRIO
Faça um comentário sobre este assunto
Enviar

Os comentários não representam a opinião do Oficina da Net; a responsabilidade é do autor da mensagem

Últimas publicações