none
checkbox coluna RRS feed

  • Pergunta

  • Ola,

    Tenho uma gridview em q uma das colunas tem uma checkbox. 

    O problema é : qd tenho dois ou mais registos a partir do primeiro registo a contagem está sempre a zeros, isto é, só conta bem o primeiro registo.

     bool entrar = true;
                bool entrar2 = true;
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    countrow = Convert.ToInt16(row.Cells["checkbox"].Value);
                    bool isSelected = Convert.ToBoolean(row.Cells["checkbox"].Value);
                    if (!isSelected && entrar && countrow < 1 && entrar2)
                    {
                        MessageBox.Show("Selecionar um registo");
                        entrar = false;
                    }
                    else if (isSelected && entrar)
    
                    {
                        string valor = row.Cells["NrProc"].Value.ToString();
                        UpdateEstado(valor);
                        entrar2 = false;
                    }
                }
                if (entrar)
                {
                    BindGrid();
                    MessageBox.Show("Concluido com sucesso");
                }

    sexta-feira, 15 de janeiro de 2016 11:29

Respostas

  • Diogo, veja este exemplo onde no clique de um botão "Processar" eu percorro as linhas do grid, verifico se o check esta marcado, se estiver eu desmarco, caso contrário ele é marcado. Ou seja, inverte a marcação. Veja:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace TesteCheckGrid
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                PreencherGrid();
            }
    
            private void PreencherGrid()
            {
                List<Pessoa> lista = new List<Pessoa>();
                Pessoa pessoa1 = new Pessoa();
                pessoa1.Codigo = 1;
                pessoa1.Nome = "Rogerio";
                lista.Add(pessoa1);
    
                Pessoa pessoa2 = new Pessoa();
                pessoa2.Codigo = 1;
                pessoa2.Nome = "Maria";
                lista.Add(pessoa2);
    
                Pessoa pessoa3 = new Pessoa();
                pessoa3.Codigo = 1;
                pessoa3.Nome = "Luana";
                lista.Add(pessoa3);
    
                Pessoa pessoa4 = new Pessoa();
                pessoa4.Codigo = 1;
                pessoa4.Nome = "Jessica";
                lista.Add(pessoa4);
    
                dataGridView1.DataSource = lista;
            }
    
            private void btnProcessar_Click(object sender, EventArgs e)
            {
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    DataGridViewCheckBoxCell oCell = row.Cells["Check"] as DataGridViewCheckBoxCell;
                    bool bChecked = (null != oCell && null != oCell.Value && true == (bool)oCell.Value);
    
                    if (!bChecked)                
                        row.Cells["Check"].Value = true;                
                    else                
                        row.Cells["Check"].Value = false;                
                }
            }
        }
    }
    

    ANTES

    antes

    DEPOIS

    Espero que te ajude. :)


    Rodrigo Reis Ferreira
    Microsoft Certified

    • Sugerido como Resposta SimorC sábado, 16 de janeiro de 2016 18:22
    • Marcado como Resposta DiogoMBM sábado, 16 de janeiro de 2016 21:12
    sexta-feira, 15 de janeiro de 2016 20:18

Todas as Respostas

  • Qual o evento onde está esse código? O objetivo é executar uma operação em todos os registros cujos checkbox estão marcados?

    Rodrigo Reis Ferreira
    Microsoft Certified

    sexta-feira, 15 de janeiro de 2016 12:41
  • esta num eventclick num botao

    Sim, deve ser executado em todos os registos selecionados, quer seja 1 ou mais

    sexta-feira, 15 de janeiro de 2016 13:50
  • Diogo, veja este exemplo onde no clique de um botão "Processar" eu percorro as linhas do grid, verifico se o check esta marcado, se estiver eu desmarco, caso contrário ele é marcado. Ou seja, inverte a marcação. Veja:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace TesteCheckGrid
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                PreencherGrid();
            }
    
            private void PreencherGrid()
            {
                List<Pessoa> lista = new List<Pessoa>();
                Pessoa pessoa1 = new Pessoa();
                pessoa1.Codigo = 1;
                pessoa1.Nome = "Rogerio";
                lista.Add(pessoa1);
    
                Pessoa pessoa2 = new Pessoa();
                pessoa2.Codigo = 1;
                pessoa2.Nome = "Maria";
                lista.Add(pessoa2);
    
                Pessoa pessoa3 = new Pessoa();
                pessoa3.Codigo = 1;
                pessoa3.Nome = "Luana";
                lista.Add(pessoa3);
    
                Pessoa pessoa4 = new Pessoa();
                pessoa4.Codigo = 1;
                pessoa4.Nome = "Jessica";
                lista.Add(pessoa4);
    
                dataGridView1.DataSource = lista;
            }
    
            private void btnProcessar_Click(object sender, EventArgs e)
            {
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    DataGridViewCheckBoxCell oCell = row.Cells["Check"] as DataGridViewCheckBoxCell;
                    bool bChecked = (null != oCell && null != oCell.Value && true == (bool)oCell.Value);
    
                    if (!bChecked)                
                        row.Cells["Check"].Value = true;                
                    else                
                        row.Cells["Check"].Value = false;                
                }
            }
        }
    }
    

    ANTES

    antes

    DEPOIS

    Espero que te ajude. :)


    Rodrigo Reis Ferreira
    Microsoft Certified

    • Sugerido como Resposta SimorC sábado, 16 de janeiro de 2016 18:22
    • Marcado como Resposta DiogoMBM sábado, 16 de janeiro de 2016 21:12
    sexta-feira, 15 de janeiro de 2016 20:18