none
ayuda con un data grid... RRS feed

  • Pregunta

  • hola....

    tengo ya casi una semana tratando de resolver este problema, que no me ha dejado avanzar, es que tengo un datagrid cargado con unos datos de una bd... y se ve asi... el resultado q quiero es calcular mora en el row mora a todas las fechas ya vencidas... tengo la formula de calcular la mora, lo q no se es como aplicar esa mora a los rows, vencidos....

    lo que pienso hacer es restar la fecha actual a las fecha final, y los dias que me den, aplicarles mis calculos, pero como resto la fech vencida a la actual?

    o como el datagrid vio tomara en cuenta cuando esta vencida, y en el row mora aplicara mora.... de verdad este caso es para grandes ligas, y yo apenas soy afficionado a rookie, porfavor necesito una ayuda profunda.

    lunes, 24 de septiembre de 2012 14:24

Respuestas

  • Hola,

    Antes que nada te aconsejo realizar el calculo a nivel del origen de datos (me imagino que es un datatable o una lista genérica), eso te evitaría cambiar algo en la asignación de los datos al Grid.

    La idea general es la siguiente:

    -Recorres el origen de datos, cada fila realizas el cálculo de tu mora y asignas los datos como lo estas haciendo.

    Como llevas los datos a tu Grid ?


    Un saludo, Cristian Pérez

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 14:46
  • Hola Jose2981!

    esta podria ser una posible solucion:

      for (int i = 0; i < dataGridView.RowCount; i++)
                {
                    if (DateTime.Parse(dataGridView.Rows[i].Cells[0].Value.ToString()) >= DateTime.Parse(dataGridView.Rows[i].Cells[1].Value.ToString()))
                    {
                        dataGridView.Rows[i].Cells[2].Style.BackColor = System.Drawing.Color.Aqua;
                    }
                }

    En este pequeño ejemplo evaluo que las fechas  de la columna 0 contra la columna 1 y si es mayor o igual la columna 1 aplico un cambio de color, en el cambio de color ya puedes llamar tu rutina para la formula.

    Saludos, espero sirva de algo :-D


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 16:13
  • Hola que tal, mira si ya tienes ese resultado alojado en una variable ya sea entera o double solamente pegala a la grid y listo

    dataGridView.Rows[i].Cells[#].Value = resultado.ToString();

    # es el numero de la celda en la que lo quieres pegar, dependiendo de tu numeracion de columnas.

    Esta linea va dentro del for y va a pegar ese resultado dependiendo de la interacion que se realice.

    saludos :-)


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:39
  • vota como util si de algo te ah servido! gracias :-)


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:41
  • si puedes copia la o las lineas de codigo en donde te marca ese error y vemos que puede estar mal.

    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:51
  • Oye una pregunta, hasta abajo de los registros tienes un renglón vacío???

    De ser así debes quitárselo, selecciona el data y en su parte superior derecha hay un icono dale clic y deselecciona los check que tiene activados, prueba y dime.

    :-)


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 22:23
  • esta interesante,  pero... como resto esas dos fechas asi el valor q me da en dias, lo calculo la formula q tngo para calcular mora......

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 18:11
  • hey buena esa.... ya tengo la cabeza mas clara.... dejame probar..... no t me vallas porfavor..... si tienes algo mas directo para comunicarnos mejor...

    mi novia y yo tenemos practica final para esta semana, y  no hemos salido este fin de semana x este problema............... si tienes skype...o tango, whatsapp.. o algo mas directo, y no tines ningun problema en dar, perfecto,,, nos encantaria tner un amigo que sepa mas q nosotros,  si no quieres. sta bn.... pero no t vallas dejame probar.....

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 18:57
  • estamos ahora frizados con las multiplicaciones de las celdas y dejar el resultado en otra celda pero q sea la selda

    ya con los datos q me diste tenemos los dias en la grilla, ahora lo q tenemos q hacer es este calculo y el resultado ponerlo en la celda mora

    mira el problema a ver si me entiendes

    • Me tenías que pagar $5,000 el 15 de diciembre.  Han pasado 25 días desde entonces.  Los intereses moratorios que establecimos son del 3% mensual.  Entonces, tomo los $5,000 los multiplico por el 3%.  Eso me da $150.  Esto lo dividido entre 30 y lo multiplico por los 25 días que han pasado.  Por lo tanto me debes $125.oo de intereses moratorios
    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:31
  • ok....
      private void TotalDatosDeudas()
            {
                try
                {
                   double sumAplicado = 0;
                    double sumatoria = 0;
                    double sumpendiente = 0;
                    double SumIntees = 0;
                    double suaplicado = 0;
                    double suMORA = 0;
                    foreach (DataGridViewRow row in DgClienteCuotas.Rows)
                    {
                        sumatoria += Convert.ToDouble(row.Cells[3].Value);                   
                        sumAplicado += Convert.ToDouble(row.Cells[4].Value);
                        sumpendiente += Convert.ToDouble(row.Cells[5].Value);
                        suaplicado += Convert.ToDouble(row.Cells[8].Value);
                       SumIntees += Convert.ToDouble(row.Cells[11].Value);
                        suMORA += Convert.ToDouble(row.Cells[0].Value);                  
                        
                    }
                    TxtCapital.Text = Convert.ToString(Convert.ToDouble(sumatoria));
                    TxtTotalInteres.Text= Convert.ToString(Convert.ToDouble(sumAplicado));
                    txtpendiente.Text = Convert.ToString(Convert.ToDouble(sumpendiente));
                    TxtDecuento.Text = Convert.ToString(Convert.ToDouble(SumIntees));
                   CuotaInteres.Text = Convert.ToString(Convert.ToDouble(suaplicado));
                    txtTotalMora.Text = Convert.ToString(Convert.ToDouble(suMORA));
                    for (int i = 0; i < DgClienteCuotas.RowCount; i++)
                     {
                        if (DateTime.Parse(DgClienteCuotas.Rows[i].Cells[9].Value.ToString()) >= DateTime.Parse(DgClienteCuotas.Rows[i].Cells[7].Value.ToString()))
                        {
                            DgClienteCuotas.Rows[i].Cells[0].Style.BackColor =System.Drawing.Color.Aqua;
                         }
                     }
                     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 22:00
  • NITIDO..... PANA TU ERES, UN MAESTRO DEL KUNG FU.. JAJAAJJAJ..... SOLO ME FALTAN MULTIPLICAR LAS CELDAS DEL DATA GRID PARA SACAR LAS MORAS...... ESTOY UN POCO COMPLICA2..... T ANIMAS A AYUDARME.......?

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 22:38

Todas las respuestas

  • Hola,

    Antes que nada te aconsejo realizar el calculo a nivel del origen de datos (me imagino que es un datatable o una lista genérica), eso te evitaría cambiar algo en la asignación de los datos al Grid.

    La idea general es la siguiente:

    -Recorres el origen de datos, cada fila realizas el cálculo de tu mora y asignas los datos como lo estas haciendo.

    Como llevas los datos a tu Grid ?


    Un saludo, Cristian Pérez

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 14:46
  • acuerdate q solo se va a calcula las fechas vencidas....

    lunes, 24 de septiembre de 2012 14:50
  • Hola Jose2981!

    esta podria ser una posible solucion:

      for (int i = 0; i < dataGridView.RowCount; i++)
                {
                    if (DateTime.Parse(dataGridView.Rows[i].Cells[0].Value.ToString()) >= DateTime.Parse(dataGridView.Rows[i].Cells[1].Value.ToString()))
                    {
                        dataGridView.Rows[i].Cells[2].Style.BackColor = System.Drawing.Color.Aqua;
                    }
                }

    En este pequeño ejemplo evaluo que las fechas  de la columna 0 contra la columna 1 y si es mayor o igual la columna 1 aplico un cambio de color, en el cambio de color ya puedes llamar tu rutina para la formula.

    Saludos, espero sirva de algo :-D


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 16:13
  • esta interesante,  pero... como resto esas dos fechas asi el valor q me da en dias, lo calculo la formula q tngo para calcular mora......

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 18:11
  • puedes hacerlo de la siguiente manera, dentro del for y dependiendo de la condicional que quieras:

    DateTime fechaComienzo, fechaFin;
                    fechaComienzo = DateTime.Parse(dataGridView.Rows[i].Cells[0].Value.ToString());
                    fechaFin = DateTime.Parse(dataGridView.Rows[i].Cells[1].Value.ToString());
                    TimeSpan dias = fechaComienzo - fechaFin;
                    MessageBox.Show(dias.Days.ToString());

    y en lugar de mandar un messagebox pues ahi lo utilizas para lo que necesites. Saludos :-)

    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    lunes, 24 de septiembre de 2012 18:43
  • hey buena esa.... ya tengo la cabeza mas clara.... dejame probar..... no t me vallas porfavor..... si tienes algo mas directo para comunicarnos mejor...

    mi novia y yo tenemos practica final para esta semana, y  no hemos salido este fin de semana x este problema............... si tienes skype...o tango, whatsapp.. o algo mas directo, y no tines ningun problema en dar, perfecto,,, nos encantaria tner un amigo que sepa mas q nosotros,  si no quieres. sta bn.... pero no t vallas dejame probar.....

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 18:57
  • Prueba y me dices que tal,  imagino que igual para hacer operaciones deberás de "parsear" a int para hacer operaciones

    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    lunes, 24 de septiembre de 2012 19:24
  • estamos ahora frizados con las multiplicaciones de las celdas y dejar el resultado en otra celda pero q sea la selda

    ya con los datos q me diste tenemos los dias en la grilla, ahora lo q tenemos q hacer es este calculo y el resultado ponerlo en la celda mora

    mira el problema a ver si me entiendes

    • Me tenías que pagar $5,000 el 15 de diciembre.  Han pasado 25 días desde entonces.  Los intereses moratorios que establecimos son del 3% mensual.  Entonces, tomo los $5,000 los multiplico por el 3%.  Eso me da $150.  Esto lo dividido entre 30 y lo multiplico por los 25 días que han pasado.  Por lo tanto me debes $125.oo de intereses moratorios
    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:31
  • Hola que tal, mira si ya tienes ese resultado alojado en una variable ya sea entera o double solamente pegala a la grid y listo

    dataGridView.Rows[i].Cells[#].Value = resultado.ToString();

    # es el numero de la celda en la que lo quieres pegar, dependiendo de tu numeracion de columnas.

    Esta linea va dentro del for y va a pegar ese resultado dependiendo de la interacion que se realice.

    saludos :-)


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:39
  • vota como util si de algo te ah servido! gracias :-)


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:41
  • tengo un problema al ejecutar este codigo saliendome el sgte mensaje de error:

    Object reference not set to an instance of an object.

    lunes, 24 de septiembre de 2012 21:47
  • si puedes copia la o las lineas de codigo en donde te marca ese error y vemos que puede estar mal.

    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 21:51
  • ok....
      private void TotalDatosDeudas()
            {
                try
                {
                   double sumAplicado = 0;
                    double sumatoria = 0;
                    double sumpendiente = 0;
                    double SumIntees = 0;
                    double suaplicado = 0;
                    double suMORA = 0;
                    foreach (DataGridViewRow row in DgClienteCuotas.Rows)
                    {
                        sumatoria += Convert.ToDouble(row.Cells[3].Value);                   
                        sumAplicado += Convert.ToDouble(row.Cells[4].Value);
                        sumpendiente += Convert.ToDouble(row.Cells[5].Value);
                        suaplicado += Convert.ToDouble(row.Cells[8].Value);
                       SumIntees += Convert.ToDouble(row.Cells[11].Value);
                        suMORA += Convert.ToDouble(row.Cells[0].Value);                  
                        
                    }
                    TxtCapital.Text = Convert.ToString(Convert.ToDouble(sumatoria));
                    TxtTotalInteres.Text= Convert.ToString(Convert.ToDouble(sumAplicado));
                    txtpendiente.Text = Convert.ToString(Convert.ToDouble(sumpendiente));
                    TxtDecuento.Text = Convert.ToString(Convert.ToDouble(SumIntees));
                   CuotaInteres.Text = Convert.ToString(Convert.ToDouble(suaplicado));
                    txtTotalMora.Text = Convert.ToString(Convert.ToDouble(suMORA));
                    for (int i = 0; i < DgClienteCuotas.RowCount; i++)
                     {
                        if (DateTime.Parse(DgClienteCuotas.Rows[i].Cells[9].Value.ToString()) >= DateTime.Parse(DgClienteCuotas.Rows[i].Cells[7].Value.ToString()))
                        {
                            DgClienteCuotas.Rows[i].Cells[0].Style.BackColor =System.Drawing.Color.Aqua;
                         }
                     }
                     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 22:00
  • Oye una pregunta, hasta abajo de los registros tienes un renglón vacío???

    De ser así debes quitárselo, selecciona el data y en su parte superior derecha hay un icono dale clic y deselecciona los check que tiene activados, prueba y dime.

    :-)


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 22:23
  • NITIDO..... PANA TU ERES, UN MAESTRO DEL KUNG FU.. JAJAAJJAJ..... SOLO ME FALTAN MULTIPLICAR LAS CELDAS DEL DATA GRID PARA SACAR LAS MORAS...... ESTOY UN POCO COMPLICA2..... T ANIMAS A AYUDARME.......?

    • Marcado como respuesta Jose2981 lunes, 24 de septiembre de 2012 22:45
    lunes, 24 de septiembre de 2012 22:38
  • Hola jose, mira tuve un ratito libre y me puse a hacer esto a ver si te funciona ok, sino puedes accederlo me dices y lo redireccionamos en otro lado va.

    https://skydrive.live.com/?sc=documents&cid=691a384ad061c9ae#cid=691A384AD061C9AE&id=691A384AD061C9AE%21194&sc=documents

    se llama moratorios ok, saludos y espero te sea de utilidad.


    Si esta respuesta fue de utilidad o resolvio tu dada favor de hacernoslo saber marcando como "Util" o "Marcar como respuesta"

    martes, 25 de septiembre de 2012 3:49