none
CheckBox retorna false mesmo estando checked true no GridView RRS feed

  • Pergunta

  • Pessoal,

    Estou com um problema num método de verificação da marcação do checkbox (WebForms C#.NET).

    A população do GridView está no if(! IsPostBack), mas quando vou verificar no:

    foreach(GridViewRow linha in grid.Rows)

    {

     //Recuperar o checkbox

    CheckBox ck = linha.FindControl("chkSelecionado") as CheckBox;

    if(ck.Checked) <<<----  Aqui sempre vem falso, mesmo que na página o checkbox esteja marcado.

    {

    Realizar a tarefa;

    }

    }

    Sendo assim ele não realiza nada... Faz o loop para cada linha perfeitamente, porém não entra no if.

    Grato pela atenção!

    Att, João Paulo Lima


    João Paulo Lima F Dos Santos

    sexta-feira, 20 de abril de 2012 15:33

Respostas

  • Colega,

    Tem que ver um pouco mais do seu código...

    Eu resolvi fazer um exemplo. Teste e veja o funcionamento. Espero que lhe ajude.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Text;
    
    public class Item
    {
        public int Codigo { get; set; }
        public string Nome { get; set; }
    
        public static List<Item> GetProdutos()
        {
            List<Item> produtos = new List<Item>();
            produtos.Add(new Item() { Codigo = 1, Nome = "Coneta" });
            produtos.Add(new Item() { Codigo = 2 , Nome = "Cartao presente" });
            produtos.Add(new Item() { Codigo = 3, Nome = "Borracha" });
    
            return produtos;
        }
    }
    
    public partial class GridView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                grvProdutos.DataSource = Item.GetProdutos();
                grvProdutos.DataBind();
            }
        }
        protected void btnPegarSelecionados_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            foreach(GridViewRow linha in grvProdutos.Rows)
            {
                CheckBox cbx = linha.FindControl("cbxSelecionado") as CheckBox;
    
                if (cbx != null) 
                {
                    if (cbx.Checked)                
                    {
                        sb.AppendLine(string.Format("Produto {0}", linha.Cells[1].Text));
                    }
                }
            }
    
            txtProdutosSelecionados.Text = sb.ToString();
        }
    }

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %>
    
    <!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 runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="grvProdutos" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="Codigo" HeaderText="Codigo" />
                    <asp:BoundField DataField="Nome" HeaderText="Produto" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="cbxSelecionado" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
        <br />
        <asp:Button runat="server" ID="btnPegarSelecionados" Text="Pegar selecionados" 
            onclick="btnPegarSelecionados_Click" />
        <br />
        <br />
        <br />
    
        <asp:TextBox ID="txtProdutosSelecionados" runat="server" TextMode="MultiLine" 
            Height="90px" Width="321px"></asp:TextBox>
        </form>
    </body>
    </html>


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

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


    • Editado Paulo César Viana sexta-feira, 20 de abril de 2012 16:02
    • Marcado como Resposta JPLima sexta-feira, 20 de abril de 2012 17:28
    sexta-feira, 20 de abril de 2012 16:01

Todas as Respostas

  • Colega,

    Tem que ver um pouco mais do seu código...

    Eu resolvi fazer um exemplo. Teste e veja o funcionamento. Espero que lhe ajude.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Text;
    
    public class Item
    {
        public int Codigo { get; set; }
        public string Nome { get; set; }
    
        public static List<Item> GetProdutos()
        {
            List<Item> produtos = new List<Item>();
            produtos.Add(new Item() { Codigo = 1, Nome = "Coneta" });
            produtos.Add(new Item() { Codigo = 2 , Nome = "Cartao presente" });
            produtos.Add(new Item() { Codigo = 3, Nome = "Borracha" });
    
            return produtos;
        }
    }
    
    public partial class GridView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                grvProdutos.DataSource = Item.GetProdutos();
                grvProdutos.DataBind();
            }
        }
        protected void btnPegarSelecionados_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            foreach(GridViewRow linha in grvProdutos.Rows)
            {
                CheckBox cbx = linha.FindControl("cbxSelecionado") as CheckBox;
    
                if (cbx != null) 
                {
                    if (cbx.Checked)                
                    {
                        sb.AppendLine(string.Format("Produto {0}", linha.Cells[1].Text));
                    }
                }
            }
    
            txtProdutosSelecionados.Text = sb.ToString();
        }
    }

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %>
    
    <!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 runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="grvProdutos" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="Codigo" HeaderText="Codigo" />
                    <asp:BoundField DataField="Nome" HeaderText="Produto" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="cbxSelecionado" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
        <br />
        <asp:Button runat="server" ID="btnPegarSelecionados" Text="Pegar selecionados" 
            onclick="btnPegarSelecionados_Click" />
        <br />
        <br />
        <br />
    
        <asp:TextBox ID="txtProdutosSelecionados" runat="server" TextMode="MultiLine" 
            Height="90px" Width="321px"></asp:TextBox>
        </form>
    </body>
    </html>


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

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


    • Editado Paulo César Viana sexta-feira, 20 de abril de 2012 16:02
    • Marcado como Resposta JPLima sexta-feira, 20 de abril de 2012 17:28
    sexta-feira, 20 de abril de 2012 16:01
  • Paulo muito obrigado!!

    O erro não tava no foreach mais sim que eu (fui muito garoto) esqueci de incluir o método de carregar o grid no not IsPostBack...

    Eu tinha colocado:

    if(! IsPostBack)

         1º método;

         CarregarGrid();

    e não me liguei das chaves, já que são duas linhas de código depois do if!

    Mas seu código acima é bem últil par uma outra aplicação que terei que fazer!!

    Obrigado 2 vezes!!!

    Att,


    João Paulo Lima F Dos Santos




    • Editado JPLima sexta-feira, 20 de abril de 2012 20:55
    sexta-feira, 20 de abril de 2012 17:29
  • Legal que você viu o erro. =)

    Isso é comum.

    abraço


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

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

    sexta-feira, 20 de abril de 2012 17:51