none
Suma de columnas en una matriz RRS feed

  • Pregunta

  • Buenas gente, estoy haciendo un proyecto y tengo este problemilla, en un gridview por cada registro que llena mi tabla, creo en una misma columna 3 select (esto lo hago de manera dinamica, los selects se llenan del 0 al 100), y un boton que se llama calcular, entonces, al momento de darle click al boton, este debe sumar el select1 + select2 y el resultado ponerlo en la columna select3, esto lo hago por medio de javascript, pero al momento de calcular y pasarle el valor al select3, me queda en 0 y la verdad que ya le he dado varias vueltas y nose que podra ser el error que estoy cometiendo y/o la sentencia que me hace falta, dejo el codigo para que me entiendan mejor:

    $("#Calcular").on('click', function () {
            var N =  [];
            var Dato = 0;

            //Extracción dinámica del valor de todos los combos
            for (var i = 1; i <= 3; i++)
            {
                N[i] = new Array(2);
                $("#Grid table tbody tr select[id=N"+i+"]").each(function (){
                    N[i][j] = $(this).val();
                    j++;
                    Dato = j;
                });
                j = 0;
            }

            //Calculo dinámico para el combo 3
            for (var j = 1; j <= Dato; j++)
            {
                for (var i = 1; i <= 3; i++)
                {
                    var Combo = $("#Grid table tbody tr select[id=N" + i + "]").attr('id');//Capturo el id de cada combo para evaluarlo
                    if (Combo == 'N3') // Si el id del combo es N3 entonces que calcule su valor
                    {
                        N[i][j - 1] = (N[i,1])*060) + (N[i,2])*0.40);
                        $("#Grid table tbody tr select[id=N" + i + "]").val(Math.round(N[i][j - 1]));// Asigno el valor calculado al combo
                    }
                }
            }
    });

    POR EJEMPLO:

    TENGO DOS REGISTROS:

    PRIMER REGISTRO COMBO1(VALOR QUE TIENE = 100) COMBO2(VALOR QUE TIENE 94) COMBO3(VALOR SE CALCULARA DINAMICAMENTE)

    SEGUNDO REGISTRO COMBO1(VALOR QUE TIENE = 75) COMBO2(VALOR QUE TIENE 84) COMBO3(VALOR SE CALCULARA DINAMICAMENTE)

    AL MOMENTO DE DARLE CLICK AL BOTON CALCULAR EL VALOR QUE CALCULA ES EL MISMO PARA LOS DOS REGISTRO. ESPERO Y PUEDAN AYUDARME CON ESTE DILEMA, DE ANTE MANO, GRACIAS :)

    martes, 1 de julio de 2014 22:21

Respuestas

  • hola

    la verdad hay algunas cosas que no entiendo

    - si aqui filtras

    $("#Grid table tbody tr select[id=N" + i + "]").attr('id');

    usando [id=N" + i + "] o sea ya limitas el atributo id que sentido tinee despues obtener ese mismo atributo

    esta claro que si aqui [id=N" + i + "] i toma el valor de 3 entonces al recuperar el atributo id tendras un N3, digo no tiene sentido

    - despues veo que usas

    $("#Grid table tbody tr select[id=N"+i+"]").each(function (){

    pero tambien crear un array de de dos dimensiones para colocar los valores

    pero porque haces esto si podrias descrubir de forma dinamica y recorrer los <select> directamente sumando sus valores, para que el array ?

    si necesitas diferenciar cada select podrias ponerle algun class especial para usarlo de filtro y directamente recorriendo en un .each() los controles que sean del tipo 1, 2 o 3 pero lo diferencias con un class no por el id


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta MustardLink miércoles, 2 de julio de 2014 15:04
    miércoles, 2 de julio de 2014 0:40

Todas las respuestas

  • hola

    la verdad hay algunas cosas que no entiendo

    - si aqui filtras

    $("#Grid table tbody tr select[id=N" + i + "]").attr('id');

    usando [id=N" + i + "] o sea ya limitas el atributo id que sentido tinee despues obtener ese mismo atributo

    esta claro que si aqui [id=N" + i + "] i toma el valor de 3 entonces al recuperar el atributo id tendras un N3, digo no tiene sentido

    - despues veo que usas

    $("#Grid table tbody tr select[id=N"+i+"]").each(function (){

    pero tambien crear un array de de dos dimensiones para colocar los valores

    pero porque haces esto si podrias descrubir de forma dinamica y recorrer los <select> directamente sumando sus valores, para que el array ?

    si necesitas diferenciar cada select podrias ponerle algun class especial para usarlo de filtro y directamente recorriendo en un .each() los controles que sean del tipo 1, 2 o 3 pero lo diferencias con un class no por el id


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta MustardLink miércoles, 2 de julio de 2014 15:04
    miércoles, 2 de julio de 2014 0:40
  • Hola Leandro, gracias por responder, te explico por partes, la razon por la cual estoy trabajando de este modo:

    "$("#Grid table tbody tr select[id=N"+i+"]").each(function (){

    "

    Lo hago de este modo porque en el proyecto que estoy trabajando el cual es un proyecto de calificaciones segun el formato de acta, este dicho formato varia, es decir, por ejemplo, hay un formato que tiene Nota1,Nota2,Nota3, donde Nota 3 es el calculo entre Nota1 y Nota2, entonces por esa razon nose cuantos selects voy a construir en la tabla, a manera de ejemplo, puse que podian ser 3, pero a como pueden ser 3 pueden 5 o hasta 8, es por eso que depende de cuantos selects esten en mi tabla, yo debo capturar los valores que tengan seleccionados.

    $("#Grid table tbody tr select[id=N" + i + "]").attr('id'); en esta parte, te debo ser honesto, no trabaja de este modo, trabja asi: $("#Grid table tbody tr select[id=N" + i + "]").attr('name'); en donde el atributo name de cada select guarda una formula que yo extraigo de la tabla formato, entonces, como ejemplo, Nota1 y Nota2 no tienen formula entonces en el atributo name de cada uno le pongo valor 0 pero Nota 3 si tiene formula, entonces en el atributo le paso la formula, es por eso que hago esa parte en el codigo que puse.

    Puede que lo este trabajando de una manera demasiado complicada, te agradeceria que me explicaras mas a fondo la forma en la que tu me dices que es mejor trabjarlo con clases especiales, cualquier sugerencia es bienvenida, Gracias por contestar, saludos :)

    miércoles, 2 de julio de 2014 1:31
  • HOLA LEANDRO, TE CUENTO QUE YA PUDE SOLUCIONAR MI PROBLEMA, GRACIAS POR LA SUGERENCIA QUE ME DISTE, LA ANALIZARE Y VERE SII LA PUEDO IMPLEMENTAR, GRACIAS NUEVAMENTE :D
    miércoles, 2 de julio de 2014 15:05