none
Determinar numeración entre dos datagridview RRS feed

  • Pregunta

  • Hola como va. Les consulto lo siguiente tengo 2 grid en el primero lleva una N cantidad de filas y en el grid 2 N cantidad de filas ejemplifico

    Grid 1 = fila 1,2,3,4

    Grid 2=fila 1,2,3,4,5...57

    luego divido la cantidad del grid 2 en la cantidad del grid 1 lo que me da como resultado entero 14

    Entonces mis consultas seria 1-como le asigno a la fila 1 del grid 1 los numeros del 1 al 14 del grid 2, fila 2 del grid 1 los numeros del 15 al 28 del grid 2,fila 3 del grid 1 los numeros del 29 al 42 del grid 2 y fila 4 del grid 1 los numeros del 43 al 56 del grid 2

    y 2 la diferencia o sea 57 - 56 =1 ese uno asignarselo al ultimo numero de la fila del grid 1 en este caso la fila 4 quedaria desde el 43 hasta el 57

    espero se entienda desde ya gracias

    martes, 6 de marzo de 2018 15:21

Respuestas

  • Sea descriptivo y generoso con variables.  Hace que el código sea más prolijo y por lo tanto fácil de leer.

    int totalCajas = Convert.ToInt32(txtBRemProTotal.Text);
    int totalRemitos = dataGridView1.Rows.Count;
    int cajasPorRemito = totalCajas / totalRemitos;
    Func<int, int> remanente = numBloque => numBloque == totalRemitos  ? totalCajas % totalRemitos : 0;
    
    //Índice de fila de grilla2.
    int indiceCaja = 0; //Empezamos desde la primera fila.
    //Hacemos lo mismo para cada remito.
    for(int numRemito = 1; numRemito <= totalRemitos; ++numRemito)
    {
        //Aquí está la magia.
        int cajasAsignables = cajasPorRemito + remanente(numRemito);
        for (int numCaja = 0; numCaja < cajasAsignables; ++numCaja)
        {
            DataGridViewRow r = dataGridView2.Rows[indiceCaja++];
            // Procese aquí la fila que acabamos de obtener.
            ...
        }
    }


    Jose R. MCP
    Code Samples


    • Editado webJoseModerator martes, 6 de marzo de 2018 21:49
    • Marcado como respuesta EnzoTuc40 martes, 6 de marzo de 2018 22:26
    martes, 6 de marzo de 2018 21:48
    Moderador

Todas las respuestas

  • Casi se entiende todo.  Necesito la definición de qué es, para usted, "asignar a una fila de la grilla 1 múltiples valores numéricos".  ¿Guardar la lista separada por comas en una columna particular?  ¿O significa algo más?

    Ah, ¿qué es esto:  Windows Forms, WPF, ASP.net webforms o ASP.net MVC?  Si es MVC, ¿qué grilla está utilizando?


    Jose R. MCP
    Code Samples


    martes, 6 de marzo de 2018 16:17
    Moderador
  • Casi se entiende todo.  Necesito la definición de qué es, para usted, "asignar a una fila de la grilla 1 múltiples valores numéricos".  ¿Guardar la lista separada por comas en una columna particular?  ¿O significa algo más?

    Ah, ¿qué es esto:  Windows Forms, WPF, ASP.net webforms o ASP.net MVC?  Si es MVC, ¿qué grilla está utilizando?


    Jose R. MCP
    Code Samples


    Hola Jose gracias por tu respuesta. Explico en el el formulario es winform, y las grillas son datgridview, ahora bien explico el proceso, llega un remito con cajones de limones del campo, se los vuelca en una maquina y esta clasifica que cantidad salio para el uso, por ejemplo un remito puede traer 60 cajas y la maquina clasifica 40 y descarta 20,  cada caja que sale va enumerada ejemplo 1 al 40 hasta aquí no había problema, este año se decidió volcar múltiples remitos del mismo productor entonces el remito numero 2 puede volcar 60 cajas pero salen solo 30 clasificadas, entonces al proceso se le suman las 40 mas las 30 y las 70 cajas resultantes se las divide en cada remito lo que da 35 cajas por remito. En el datagridview1 se cargan la N cantidad de remitos y en el datagridview2 se cargan la cantidad de cajas resultantes sin saber cual pertenece a cada remito porque se mezclan, entonces cuando termina el proceso lo que quiero es verificar cuantos remitos ingresaron y cuantas cajas salieron entonces del promedio se asigna a cada remito, y usando este mismo ejemplo el remito 1 debería tener asignadas las cajas desde la caja 1 hasta la caja 35 y el remito 2 desde la caja 36 hasta la 70 espero se entienda y de nuevo gracias
    martes, 6 de marzo de 2018 16:38
  • Ok, entonces cada fila en grilla1 es un remito del mismo proveedor, y cada fila de gilla2 es, ¿qué?  ¿1 caja?

    Jose R. MCP
    Code Samples

    martes, 6 de marzo de 2018 16:45
    Moderador
  • Ok, entonces cada fila en grilla1 es un remito del mismo proveedor, y cada fila de gilla2 es, ¿qué?  ¿1 caja?

    Jose R. MCP
    Code Samples

    Es correcto grilla 2 son las cajas
    martes, 6 de marzo de 2018 18:44
  • Ok, entiendo lo que es cada cosa:  Una fila en grilla1 representa un remito de un proveedor (todas las filas son del mismo proveedor); una fila en grilla2 representa una caja.  Lo que sigo sin saber es qué desea usted almacenar ¿en grilla1:  ¿Los promedios, o crear una relación maestro/detalle entre los registros de grilla1 y grilla2?

    Jose R. MCP
    Code Samples

    martes, 6 de marzo de 2018 21:00
    Moderador
  • Ok, entiendo lo que es cada cosa:  Una fila en grilla1 representa un remito de un proveedor (todas las filas son del mismo proveedor); una fila en grilla2 representa una caja.  Lo que sigo sin saber es qué desea usted almacenar ¿en grilla1:  ¿Los promedios, o crear una relación maestro/detalle entre los registros de grilla1 y grilla2?

    Jose R. MCP
    Code Samples

    Hola Jose lo que pretendo hacer es guardar en una tabla que quede asi

    Columnas      REMITO         CAJA

                            1                  1

                            1                  2

                            1                  3

                            2                  4

                            2                  5

                            2                  6

                            3                  7

                            3                  8


    martes, 6 de marzo de 2018 21:06
  • Ok, confirmación entonces:  Usted desea crear una relación maestro/detalle entre las filas de grilla1 y grilla2, donde grilla1 sería la fuente de registros maestros y grilla2 la fuente de registros de detalle.  La asignación se hace simplemente repartiendo la totalidad de los registros en grilla2 equitativamente entre los registros de grilla1, y cualquier remanente se le asigna al último registro de grilla1.

    ¿Entendí al 100% su problema?


    Jose R. MCP
    Code Samples

    martes, 6 de marzo de 2018 21:12
    Moderador
  • Ok, confirmación entonces:  Usted desea crear una relación maestro/detalle entre las filas de grilla1 y grilla2, donde grilla1 sería la fuente de registros maestros y grilla2 la fuente de registros de detalle.  La asignación se hace simplemente repartiendo la totalidad de los registros en grilla2 equitativamente entre los registros de grilla1, y cualquier remanente se le asigna al último registro de grilla1.

    ¿Entendí al 100% su problema?


    Jose R. MCP
    Code Samples

    exacto es tal cual lo describió, hice unas pruebas y logro repartir el las cajas pero no consigo asignar el remanente no se si este bien pero dejo el codigo

    int porRemito = Convert.ToInt32(txtBRemProTotal.Text);
                    porRemito = porRemito / dataGridView1.Rows.Count;
                    int cantRE = Convert.ToInt32(txtBRemProTotal.Text);
                    cantRE = cantRE / porRemito;
                    
                    int n = 0;
                    while (n < cantRE)
                    {
                        List<DataGridViewRow> temp = new List<DataGridViewRow>();
                        int cantBI = 0;
                        for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
                        {
                            for (int j = 0; j <= dataGridView2.Rows.Count - 1; j++)
                            {
                                cantBI++;
                                if (cantBI <= porRemito)
                                {
                                    MessageBox.Show("" + dataGridView1.Rows[i + n].Cells[0].Value.ToString() + "--" + dataGridView2.Rows[j].Cells[1].Value.ToString());
                                    temp.Add(dataGridView2.Rows[j]);
                                    
                                }
                            }
                        }
                        foreach (var row in temp)
                        {
                            dataGridView2.Rows.Remove(row);
                        }
                        n++;
                    }

    martes, 6 de marzo de 2018 21:24
  • Sea descriptivo y generoso con variables.  Hace que el código sea más prolijo y por lo tanto fácil de leer.

    int totalCajas = Convert.ToInt32(txtBRemProTotal.Text);
    int totalRemitos = dataGridView1.Rows.Count;
    int cajasPorRemito = totalCajas / totalRemitos;
    Func<int, int> remanente = numBloque => numBloque == totalRemitos  ? totalCajas % totalRemitos : 0;
    
    //Índice de fila de grilla2.
    int indiceCaja = 0; //Empezamos desde la primera fila.
    //Hacemos lo mismo para cada remito.
    for(int numRemito = 1; numRemito <= totalRemitos; ++numRemito)
    {
        //Aquí está la magia.
        int cajasAsignables = cajasPorRemito + remanente(numRemito);
        for (int numCaja = 0; numCaja < cajasAsignables; ++numCaja)
        {
            DataGridViewRow r = dataGridView2.Rows[indiceCaja++];
            // Procese aquí la fila que acabamos de obtener.
            ...
        }
    }


    Jose R. MCP
    Code Samples


    • Editado webJoseModerator martes, 6 de marzo de 2018 21:49
    • Marcado como respuesta EnzoTuc40 martes, 6 de marzo de 2018 22:26
    martes, 6 de marzo de 2018 21:48
    Moderador
  • Sea descriptivo y generoso con variables.  Hace que el código sea más prolijo y por lo tanto fácil de leer.

    int totalCajas = Convert.ToInt32(txtBRemProTotal.Text);
    int totalRemitos = dataGridView1.Rows.Count;
    int cajasPorRemito = totalCajas / totalRemitos;
    Func<int, int> remanente = numBloque => numBloque == totalRemitos  ? totalCajas % totalRemitos : 0;
    
    //Índice de fila de grilla2.
    int indiceCaja = 0; //Empezamos desde la primera fila.
    //Hacemos lo mismo para cada remito.
    for(int numRemito = 1; numRemito <= totalRemitos; ++numRemito)
    {
        //Aquí está la magia.
        int cajasAsignables = cajasPorRemito + remanente(numRemito);
        for (int numCaja = 0; numCaja < cajasAsignables; ++numCaja)
        {
            DataGridViewRow r = dataGridView2.Rows[indiceCaja++];
            // Procese aquí la fila que acabamos de obtener.
            ...
        }
    }


    Jose R. MCP
    Code Samples


    Muchas gracias Jose, funciona de maravillas

    martes, 6 de marzo de 2018 22:26