Usuário com melhor resposta
CheckBox retorna false mesmo estando checked true no GridView

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
- Movido C. Augusto Proiete [MVP]Moderator sexta-feira, 20 de abril de 2012 15:36 Movido para o forum apropriado (De:C#)
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
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
-
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
-