none
Percorrendo um DataGrid Parte II RRS feed

  • Pergunta

  • Pessoal vê se vocês podem me ajudar? Eu criei um datagrid com uma série de CTes solicitados. Nesse datagrid eu acrescentei uma coluna com a seguinte rotina.

            private void AddOutOfOfficeColumn()
            {
                DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();
                {
                    column.HeaderText = "Selecionar";
                    column.Name = "Select";
                    column.AutoSizeMode =
                        DataGridViewAutoSizeColumnMode.DisplayedCells;
                    column.FlatStyle = FlatStyle.Standard;
                    column.ThreeState = true;
    
                    column.CellTemplate.Style.BackColor = Color.Beige;
                }
                dgvCTeSelecionados.Columns.Insert(0, column);
            }

    O meu objetivo é percorrer todo o datagrid e aquele que estiver selecionado eu mando gerar um XML. Eu com ajuda do pessoal aqui do Fórum consegui montar a seguinte rotina.

               foreach (DataGridViewRow row in this.dgvCTeSelecionados.Rows)
                {
                    var celula = row.Cells[0] as DataGridViewCheckBoxCell;
                    bool cSelecionada = (bool)celula.Value;
    
                    row.DefaultCellStyle.BackColor = Color.Red;
       
                    if(cSelecionada) // Verifica se o checkBox está selecionado
                    {
                        //faça sua rotina aqui.
                        string cNumeroCte           = dgvCTeSelecionados[2, dgvCTeSelecionados.CurrentRow.Index].Value.ToString();
                        int nNumero_Conhec          = Convert.ToInt32(dgvCTeSelecionados[2, dgvCTeSelecionados.CurrentRow.Index].Value.ToString());
                        nCodigoNumerico = nNumero_Conhec;
                        cNumeroCte = cNumeroCte.PadLeft(8, '0');
                        string cSerieConhec         = dgvCTeSelecionados[3, dgvCTeSelecionados.CurrentRow.Index].Value.ToString();
                        dDataEmissao                = Convert.ToDateTime(dgvCTeSelecionados[4, dgvCTeSelecionados.CurrentRow.Index].Value.ToString());
    		}
    	}

    Só que está dando um erro postado aqui

    https://www.dropbox.com/s/kxmhq252lk4errg/Captura%20de%20tela%202015-06-22%2022.42.28.png?dl=0

    terça-feira, 23 de junho de 2015 17:22

Respostas

  •             foreach (DataGridViewRow row in this.dataGridView1.Rows)
                {
                    var celula = row.Cells[0] as DataGridViewCheckBoxCell;
                    
                    if (celula.Value == null)
                        continue;
    
                    var valorCelula = (CheckState)Enum.Parse(typeof(CheckState), celula.Value.ToString());
                    bool cSelecionada = valorCelula == CheckState.Checked;
                    
                    row.DefaultCellStyle.BackColor = Color.Red;
    
                    if (cSelecionada) // Verifica se o checkBox está selecionado
                    {
                        //faça sua rotina aqui.
                    }
                }

    Olá,

    O seu checkbox tem a propriedade ThreeState como true, ou seja ele terá três estados: Marcado, Desmarcado e Indeterminado. Por essa razão você precisa converter o valor da celula para o enum CheckState e verificar o seu valor como o código acima.

    A seguinte verificação 

    if (celula.Value == null)
    é necessária pois a ultima linha do grid não tem valor.
    terça-feira, 23 de junho de 2015 17:55

Todas as Respostas

  • Boa tarde,

    eu tenho uma tela com datagrid e usei um for no lugar de foreach pra percorrer a grid e validei da seguinte forma:

    if (Convert.ToBoolean(dgTitulos.Rows[i].Cells[0].Value))

    { codigo }

    terça-feira, 23 de junho de 2015 17:32
  •             foreach (DataGridViewRow row in this.dataGridView1.Rows)
                {
                    var celula = row.Cells[0] as DataGridViewCheckBoxCell;
                    
                    if (celula.Value == null)
                        continue;
    
                    var valorCelula = (CheckState)Enum.Parse(typeof(CheckState), celula.Value.ToString());
                    bool cSelecionada = valorCelula == CheckState.Checked;
                    
                    row.DefaultCellStyle.BackColor = Color.Red;
    
                    if (cSelecionada) // Verifica se o checkBox está selecionado
                    {
                        //faça sua rotina aqui.
                    }
                }

    Olá,

    O seu checkbox tem a propriedade ThreeState como true, ou seja ele terá três estados: Marcado, Desmarcado e Indeterminado. Por essa razão você precisa converter o valor da celula para o enum CheckState e verificar o seu valor como o código acima.

    A seguinte verificação 

    if (celula.Value == null)
    é necessária pois a ultima linha do grid não tem valor.
    terça-feira, 23 de junho de 2015 17:55