none
Como recorre una fila en un datagridview FOREACH RRS feed

  • Pregunta

  • 

    Estoy desarrollando una factura y cree esto porque si se quiere ingresar un producto que ya se fue ingresado(estos servicios los extraigo de otro datagridview o el formulario detalle servicio)entonces al sumar la cantidad no duplique el resultado eso ya esta resuelto. el problema es que solo aumenta en el primer registro que ingrese ejemplo el servicio 5 tiene 10 horas si aumento 14 mas al servicio 5 que esta en la primera columna aumenta, pero si sigo ingresando servicios ejemplo 2,3,4 sigue y quiero aumentarles sigue duplicando los resultados y no recorre el grid para cumplir la condicion. pero si vuelvo a ingresar horas al servicio 5 lo aumenta.

    private void BtnAgregarDetalle_Click(object sender, EventArgs e)
        {
            frm_DetalleFactura frmseleccionardetalle = new frm_DetalleFactura();
            if (frmseleccionardetalle.ShowDialog() == DialogResult.OK)
            {
    
                    foreach (DataGridViewRow row in dgvFacturadetalle.Rows)
                    {
                        if (frmseleccionardetalle.detalletemporal.IdServicio == Convert.ToInt32(row.Cells["IdServicio"].Value))
                        {
                            double frm = frmseleccionardetalle.detalletemporal.HorasFacturadas;
                            suma = Convert.ToInt32(row.Cells["HorasFacturadas"].Value);
                            x = suma + Convert.ToInt32(frm);
                            row.Cells["HorasFacturadas"].Value = x;
                            break;
                        }
                        else
                        {
                            detallefactura.Add(frmseleccionardetalle.detalletemporal);
                            Actualizar();
                           break;
                        }
                    }
    
            }   

    sábado, 27 de julio de 2019 11:31

Todas las respuestas

  • No se entiende tu explicación. No obstante te hago esta sugerencia.

    private void BtnAgregarDetalle_Click(object sender, EventArgs e)
        {
            frm_DetalleFactura frmseleccionardetalle = new frm_DetalleFactura();
            bool encontrado = fase;
            if (frmseleccionardetalle.ShowDialog() == DialogResult.OK)
            {
                    foreach (DataGridViewRow row in dgvFacturadetalle.Rows)
                    {
                        if (frmseleccionardetalle.detalletemporal.IdServicio == Convert.ToInt32(row.Cells["IdServicio"].Value))
                        {
                            double frm = frmseleccionardetalle.detalletemporal.HorasFacturadas;
                            suma = Convert.ToInt32(row.Cells["HorasFacturadas"].Value);
                            x = suma + Convert.ToInt32(frm);
                            row.Cells["HorasFacturadas"].Value = x;
                            encontrado = true;
                        }                   
                    }
          if(!encontrado)
          {
               detallefactura.Add(frmseleccionardetalle.detalletemporal);
               Actualizar();
          }
    
            }   

    sábado, 27 de julio de 2019 12:03
  • Creo que podras entenderme mejor con esta imagen

    https://drive.google.com/open?id=1vpm_5OinRtC60K92dbCre8s0KrzMwEyx

    en esta parte del codigo

    Convert.ToInt32(row.Cells["IdServicio"].Value))

    siemmpre me almacena el 1er id que fue ingresado

    no vuelve a recorrer la fila para encontrar si existe otro igual


    sábado, 27 de julio de 2019 12:21
  • Hola GELDERO y Anti, colocas un break en cada instancia del If.. siempre saldrá del for.

    Edito: EL código de Anti esta correcto para mí

    Saudos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗


    • Editado Marcelo PF sábado, 27 de julio de 2019 13:08
    sábado, 27 de julio de 2019 12:52
  • YA LOGRE HARCELO, esa era la idea, pero podrias explicarme que sucedio ANTIWORK?

    MUCHAS GRACIAS!



    • Editado GELDER0799 sábado, 27 de julio de 2019 13:13
    sábado, 27 de julio de 2019 13:12
  • Eso mismo pense estaba deteniendo que no pudiera recorrer el datagridview
    sábado, 27 de julio de 2019 13:13
  • La sentencia Break, puesta en el "if" y el "else" hacía salir del Foreach después de la primer vuelta (primera fila del DGV), asi el codigo termina la ejecucion sin procesar el resto de las filas. 
    sábado, 27 de julio de 2019 14:03
  • hola

    la verdad es que la explicacion es pesima, no se entiende nada, podrias editar la pregunta y explicarte mejor?

    Que es `frmseleccionardetalle.detalletemporal` ? es un control o una variable de que tipo?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 27 de julio de 2019 14:34
  • Frmseleccionardetalle es una instancia por el cual mando a traer los datos de otro formulario(detallefactura) para colocarlo en el nuevo formulario(factura)  

    Ya logre que funcione 
    Gracias!

    • Editado GELDER0799 sábado, 27 de julio de 2019 15:59
    • Propuesto como respuesta eRiver1 domingo, 28 de julio de 2019 9:39
    sábado, 27 de julio de 2019 15:59