none
Percorrendo um DataGri RRS feed

  • Pergunta

  • Boa tarde pessoal. Mais um vez estou precisando da ajuda de vocês. Olha só
    //------------- Nesse Butão eu Carrego o Meu DataSource.
            private void btnSelecionaCTe_Click(object sender, EventArgs e)
            {
                ConhecimentosBLL obj = new ConhecimentosBLL();
                dgvCTeSelecionados.Visible = true;
                dgvCTeSelecionados.DataSource = obj.PesquisaFilialSerieConhecIntervalo(nNumeroFilial, txtSerieConhecimento.Text, nNumeroCTeInicial, nNumeroCTeFinal);
                Mostra_TabelaCTe();
                try
                {
                    vPesquisa2 = "1";
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Registro na Tabela de Situação de Filiais Inexistente, verifique a Filial Digitada : {0}", ex.Message);
                }
            }
    //---- Nesse ponto estou Acertado o Cabeçalho do meu DataGrid
            private void Mostra_TabelaCTe()
            {
                DataTable dt = new DataTable();
    
                AddOutOfOfficeColumn();
    
                //Adiciona as colunas
                dt.Columns.Add("CódigoID");                 dgvCTeSelecionados.Columns[1].Width = 100;
                dt.Columns.Add("Série CTe");                dgvCTeSelecionados.Columns[2].Width = 100;
                dt.Columns.Add("Número CTe");               dgvCTeSelecionados.Columns[3].Width = 100;
                dt.Columns.Add("Data CTe");                 dgvCTeSelecionados.Columns[4].Width = 100;
                dt.Columns.Add("Cfop");                     dgvCTeSelecionados.Columns[5].Width = 70;
                dt.Columns.Add("Cnpj Remetente");           dgvCTeSelecionados.Columns[6].Width = 150;
                dt.Columns.Add("Cnpj Destinatário");        dgvCTeSelecionados.Columns[7].Width = 150;
                dt.Columns.Add("Cnpj Expedidor");           dgvCTeSelecionados.Columns[8].Width = 150;
                dt.Columns.Add("Cnpj Recebedor");           dgvCTeSelecionados.Columns[9].Width = 150;
                dt.Columns.Add("Cód.Serv.Tomador");         dgvCTeSelecionados.Columns[10].Width = 150;
                dt.Columns.Add("Cnpj Tomador");             dgvCTeSelecionados.Columns[11].Width = 150;
                dt.Columns.Add("Cnpj Despacho");            dgvCTeSelecionados.Columns[12].Width = 150;
                dt.Columns.Add("Cnpj Consignatário");       dgvCTeSelecionados.Columns[13].Width = 150;
                dt.Columns.Add("Números das Notas Fiscais"); dgvCTeSelecionados.Columns[14].Width = 300;
                dt.Columns.Add("Condição Frete");           dgvCTeSelecionados.Columns[15].Width = 120;
                dt.Columns.Add("Data Saida");               dgvCTeSelecionados.Columns[16].Width = 150;
                dt.Columns.Add("Data Chegada");             dgvCTeSelecionados.Columns[17].Width = 150;
                dt.Columns.Add("Data Entrega");             dgvCTeSelecionados.Columns[18].Width = 150;
                dt.Columns.Add("Cód.Natureza Carga");       dgvCTeSelecionados.Columns[19].Width = 150;
                dt.Columns.Add("Natureza da Carga");        dgvCTeSelecionados.Columns[20].Width = 200;
                dt.Columns.Add("Cod.Espécie");              dgvCTeSelecionados.Columns[21].Width = 100;
                dt.Columns.Add("Peso Bruto");               dgvCTeSelecionados.Columns[22].Width = 150;
                dt.Columns.Add("Peso Cubado");              dgvCTeSelecionados.Columns[23].Width = 150;
                dt.Columns.Add("Nro.Volumes");              dgvCTeSelecionados.Columns[24].Width = 100;
                dt.Columns.Add("Metros Cúbicos");           dgvCTeSelecionados.Columns[25].Width = 150;
                dt.Columns.Add("Valor Mercadoria");         dgvCTeSelecionados.Columns[26].Width = 150;
                dt.Columns.Add("Valor da Prestação");       dgvCTeSelecionados.Columns[27].Width = 150;
                dt.Columns.Add("Base do Icms");             dgvCTeSelecionados.Columns[28].Width = 150;
                dt.Columns.Add("Aliquota Icmss");           dgvCTeSelecionados.Columns[29].Width = 150;
                dt.Columns.Add("Valor Icms");               dgvCTeSelecionados.Columns[30].Width = 150;
                dt.Columns.Add("IBGE Inicio Prestação");    dgvCTeSelecionados.Columns[31].Width = 200;
                dt.Columns.Add("IBGE Final da Prestação");  dgvCTeSelecionados.Columns[32].Width = 200;
                dt.Columns.Add("Classif.Trib.Icms");        dgvCTeSelecionados.Columns[33].Width = 150;
                dt.Columns.Add("Aliq.Icms Reduzida");       dgvCTeSelecionados.Columns[34].Width = 150;
                dt.Columns.Add("Base Icms Reduzida");       dgvCTeSelecionados.Columns[35].Width = 150;
                dt.Columns.Add("Base Icms ST Retido");      dgvCTeSelecionados.Columns[36].Width = 150;
                dt.Columns.Add("Icms ST Retido");           dgvCTeSelecionados.Columns[37].Width = 150;
                dt.Columns.Add("Aliq.Icms ST Retido");      dgvCTeSelecionados.Columns[38].Width = 150;
                dt.Columns.Add("Crédito Ort Presumido");    dgvCTeSelecionados.Columns[39].Width = 200;
                dt.Columns.Add("Aliq.Icms Redução");        dgvCTeSelecionados.Columns[40].Width = 150;
                dt.Columns.Add("Base Icms Redução");        dgvCTeSelecionados.Columns[41].Width = 150;
                dt.Columns.Add("Aliq.Icms 1");              dgvCTeSelecionados.Columns[42].Width = 150;
                dt.Columns.Add("Valor Icms 1");             dgvCTeSelecionados.Columns[43].Width = 150;
                dt.Columns.Add("Crédito Ort. Presumido 1"); dgvCTeSelecionados.Columns[44].Width = 200;
                dt.Columns.Add("Icms Devido Outro Estado"); dgvCTeSelecionados.Columns[45].Width = 200;
                dt.Columns.Add("Lotação");                  dgvCTeSelecionados.Columns[46].Width = 100;
                dt.Columns.Add("Número CIOT");              dgvCTeSelecionados.Columns[47].Width = 150;
    
                //---------- Intercalando cores entre as linhas no DataGridView -----------------------------------------
                dgvCTeSelecionados.RowsDefaultCellStyle.BackColor = Color.White;
                dgvCTeSelecionados.AlternatingRowsDefaultCellStyle.BackColor = Color.Aquamarine;
    //           dgvCTeSelecionados.DataSource = dt;
    
                //--------- Campos Formatados a Direita -------------------
                //            dgvCTeSelecionados.Columns[5].DefaultCellStyle.Format = "c";
                dgvCTeSelecionados.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[9].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[18].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[20].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[21].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[22].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                //            dgvCTeSelecionados.Columns[28].DefaultCellStyle.Format = "n";
                //            dgvCTeSelecionados.Columns[28].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[23].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[24].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[25].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[26].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[27].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[28].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[29].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[30].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[31].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[33].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                dgvCTeSelecionados.Columns[34].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
    
                dgvCTeSelecionados.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
                dgvCTeSelecionados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            }
    //----- Nesse ponto estou criando uma coluna para selecionar ou não o meu CT-e. Essa coluna não faz parte da minha Tabela.
    //----- Estou acrescentando no momento de Povoar o meu DataGrid
            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);
            }
    //---Nesse ponto eu preciso percorrer todo o meu DataGrid e verificar se o CTe está marcado ou não
    //---Se está marcado eu transfiro o CTe para uma lista que ainda vou criar.
    //---Eu não estou conseguindo pegar o valor da coluna que eu criei dentro do meu DataGrid, pois ele tem que está marcado ou não
    //---para que eu possa proseguir. 
            private void btnEnviaCTe_Click(object sender, EventArgs e)
            {
                string res = "";
                DataGridViewCell celula = null;
                bool CheckCelula = false;
    
                // vamos percorrer as linhas
                for (int i = 0; i < dgvCTeSelecionados.RowCount; i++)
                {
                    for (int x = 0; x < dgvCTeSelecionados.ColumnCount; x++)
                    {
                        // obtém a célula na coluna x e linha i
                        
                        celula = dgvCTeSelecionados.[x, i];
    
                        if (celula.Value != null)
                            res += celula.Value.ToString() + "\t";
                        else
                            res += "-\t";
                    }
    
                    res += "\n";
                }
    
                // exibe o resultado
                MessageBox.Show(res);
            }
    
    //---Nesse ponto eu preciso percorrer todo o meu DataGrid e verificar se o CTe está marcado ou não
    //---Se está marcado eu transfiro o CTe para uma lista que ainda vou criar.
    //---Eu não estou conseguindo pegar o valor da coluna que eu criei dentro do meu DataGrid, pois ele tem que está marcado ou não
    //---para que eu possa proseguir. 
    

    terça-feira, 16 de junho de 2015 18:15

Respostas

  • Olá Garibaldo, tente o seguinte código.

    foreach (DataGridViewRow row in this.dgvCTeSelecionados.Rows) { var celula = row.Cells[0] as DataGridViewCheckBoxCell; bool estaMarcada = (bool)celula.Value; if(estaMarcada) // Verifica se o checkBox está selecionado { //faça sua rotina aqui. }

    else

    {

    } }



    domingo, 21 de junho de 2015 17:19

Todas as Respostas

  • Pelo que eu analisei seu código, você sempre insere essa sua coluna para selecionar em primeiro lugar, ou seja, index = 0.

    Sendo assim, na hora que você está iterando sobre as Rows, você pode pegar a coluna pelo index 0 e verificar se ela está marcada, segue exemplo.

    for (int i = 0; i < dgvCTeSelecionados.RowCount; i++)
                {
    
                    DataGridViewCheckBoxColumn checkBoxColumn = dgvCTeSelecionados[0,i] as DataGridViewCheckBoxColumn;
    
                    if(checkBoxColumn.TrueValue) // Verifica se o checkBox está selecionado
                    {
                        //faça sua rotina aqui.
                    }
    
                    for (int x = 0; x < dgvCTeSelecionados.ColumnCount; x++)
                    {
                        // obtém a célula na coluna x e linha i
                        
                        celula = dgvCTeSelecionados.[x, i];
    
                        if (celula.Value != null)
                            res += celula.Value.ToString() + "\t";
                        else
                            res += "-\t";
                    }
    
                    res += "\n";
                }

    terça-feira, 16 de junho de 2015 19:34
  • Boa noite Bruno, nessa linha não está reconhecendo essa parte 

    dgvCTeSelecionados[0,i] as DataGridViewCheckBoxColumn;
     DataGridViewCheckBoxColumn checkBoxColumn = dgvCTeSelecionados[0,i] as DataGridViewCheckBoxColumn;
    
    Nessa outra linha também não está reconhecendo 
    checkBoxColumn.TrueValue
     if(checkBoxColumn.TrueValue) // Verifica se o checkBox está selecionado

    O que pode ser?

    terça-feira, 16 de junho de 2015 22:38
  • Veja esse artigo abaixo que poderá te ajudar.

    http://ecode10.com/artigo/1927/Trabalhando-com-GridView-e-RowDataBound


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    terça-feira, 16 de junho de 2015 22:53
  • Boa noite Bruno, nessa linha não está reconhecendo essa parte 

    dgvCTeSelecionados[0,i] as DataGridViewCheckBoxColumn;
     DataGridViewCheckBoxColumn checkBoxColumn = dgvCTeSelecionados[0,i] as DataGridViewCheckBoxColumn;
    Nessa outra linha também não está reconhecendo 
    checkBoxColumn.TrueValue
     if(checkBoxColumn.TrueValue) // Verifica se o checkBox está selecionado

    O que pode ser?

    Como assim não está reconhecendo, está dando erro?
    quarta-feira, 17 de junho de 2015 00:32
  • Isso mesmo o C# não está reconhecendo, está aparecendo uma linha vermelha sublinhando a Linha.
    domingo, 21 de junho de 2015 17:05
  • Olá Garibaldo, tente o seguinte código.

    foreach (DataGridViewRow row in this.dgvCTeSelecionados.Rows) { var celula = row.Cells[0] as DataGridViewCheckBoxCell; bool estaMarcada = (bool)celula.Value; if(estaMarcada) // Verifica se o checkBox está selecionado { //faça sua rotina aqui. }

    else

    {

    } }



    domingo, 21 de junho de 2015 17:19
  • Bruno essa rotina ainda está apresentando problemas. Deixei uma imagem do erro no DropBox>

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

    Garibaldo

    terça-feira, 23 de junho de 2015 01:51
  • @Garibaldo 

    o teu codigo esta confuso! Tu precisas organizar o maximo possivel.

    por exemplo por que voce seta a propiedade width =200? qundo voce pode fazer assim:

    // Configure the details DataGridView so that its columns automatically

     // adjust their widths when the data changes. detailsDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

    Voce nao precisa deste codigo todo:

    dgvCTeSelecionados.Columns[1].Width = 100;

    A flower cannot blossom without sunshine, and man cannot live without love.

    terça-feira, 23 de junho de 2015 12:04
    Moderador
  • Levi bom dia

    detailsDataGridView não está sendo reconhecido pelo C#? A palavravra está ficando sublinhada com uma linha vermelha.

    terça-feira, 23 de junho de 2015 15:03
  • Levi vê se você pode 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 15:49