Usuário com melhor resposta
Percorrendo um DataGrid Parte II

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
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.- Sugerido como Resposta Bruno Maschio Joaquim terça-feira, 23 de junho de 2015 17:56
- Editado Patrick dos Santos terça-feira, 23 de junho de 2015 17:57
- Marcado como Resposta Garibaldo Luis Guerreiro Chaves quarta-feira, 24 de junho de 2015 02:24
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 }
- Editado Eugenio Junior terça-feira, 23 de junho de 2015 17:33
-
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.- Sugerido como Resposta Bruno Maschio Joaquim terça-feira, 23 de junho de 2015 17:56
- Editado Patrick dos Santos terça-feira, 23 de junho de 2015 17:57
- Marcado como Resposta Garibaldo Luis Guerreiro Chaves quarta-feira, 24 de junho de 2015 02:24