none
Recorrer lista RRS feed

  • Pregunta

  • Amigos tengo una Lista que me arroja unos resultados

    entonces lo que estoy haciendo en el código es vomprobar el segundo valor que tiene resultado y relleno el que esta en 0

    pero tengo este caso

    Donde el segundo valor es 0 entonces como puedo hacer para rellenar con el 30 los 0 

    este es el código

                 while (reader.Read())
                        {
                            List<int?> lstTemp = new List<int?>();
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA1"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA2"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA3"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA4"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA5"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA6"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA7"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA8"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA9"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA10"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA11"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA12"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA13"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA14"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA15"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA16"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA17"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA18"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA19"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA20"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA21"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA22"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA23"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA24"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA25"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA26"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA27"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA28"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA29"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA30"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA31"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA32"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA33"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA34"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA35"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA36"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA37"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA38"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA39"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA40"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA41"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA42"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA43"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA44"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA45"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA46"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA47"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA48"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA49"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA50"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA51"]));
                            lstTemp.Add(Convert.ToInt32(reader["SEMANA52"]));
                          //  lstTemp.Add(Convert.ToInt32(reader["SEMANA53"]));
    
    
                            int?[] arrayTrabajo = lstTemp.ToArray();
                            for (int i = 0; i < arrayTrabajo.Length; i++)
                            {
                                //Evito acceder a indices erroneos
                                if (i > 0 && i < arrayTrabajo.Length - 1)
                                {
                                    //Si el anterior no tiene valor, yo si tengo y el siguiente tiene
                                    if (arrayTrabajo[i - 1] == 0 && arrayTrabajo[i] > 0 && arrayTrabajo[i + 1] > 0)
                                    {
                                        //Recorro todo el array bdesde 0 hasta la iteracion actual
                                        for (int j = 0; j < i; j++)
                                            //Si es 0
                                            if (arrayTrabajo[j] == 0)
                                                //Asigno a ese item el valor del siguiente a la posicion i
                                                arrayTrabajo[j] = arrayTrabajo[i + 1];
                                    }
                                }
                            }
                            //GENERAMOS LA LINEA
                            DataRow dr = dt.NewRow();
                            dr[0] = reader["CODIGO"];
                            dr[1] = arrayTrabajo[0];
                            dr[2] = arrayTrabajo[1];
                            dr[3] = arrayTrabajo[2];
                            dr[4] = arrayTrabajo[3];
                            dr[5] = arrayTrabajo[4];
                            dr[6] = arrayTrabajo[5];
                            dr[7] = arrayTrabajo[6];
                            dr[8] = arrayTrabajo[7];
                            dr[9] = arrayTrabajo[8];
                            dr[10] = arrayTrabajo[9];
                            dr[11] = arrayTrabajo[10];
                            dr[12] = arrayTrabajo[11];
                            dr[13] = arrayTrabajo[12];
                            dr[14] = arrayTrabajo[13];
                            dr[15] = arrayTrabajo[14];
                            dr[16] = arrayTrabajo[15];
                            dr[17] = arrayTrabajo[16];
                            dr[18] = arrayTrabajo[17];
                            dr[19] = arrayTrabajo[18];
                            dr[20] = arrayTrabajo[19];
                            dr[21] = arrayTrabajo[20];
                        dr[22] = arrayTrabajo[21];
                        dr[23] = arrayTrabajo[22];
                        dr[24] = arrayTrabajo[23];
                        dr[25] = arrayTrabajo[24];
                        dr[26] = arrayTrabajo[25];
                        dr[27] = arrayTrabajo[26];
                        dr[28] = arrayTrabajo[27];
                        dr[29] = arrayTrabajo[28];
                        dr[30] = arrayTrabajo[29];
                        dr[31] = arrayTrabajo[30];
                        dr[32] = arrayTrabajo[31];
                        dr[33] = arrayTrabajo[32];
                        dr[34] = arrayTrabajo[33];
                        dr[35] = arrayTrabajo[34];
                        dr[36] = arrayTrabajo[35];
                        dr[37] = arrayTrabajo[36];
                        dr[38] = arrayTrabajo[37];
                        dr[39] = arrayTrabajo[38];
                        dr[40] = arrayTrabajo[39];
                        dr[41] = arrayTrabajo[40];
                        dr[42] = arrayTrabajo[41];
                        dr[43] = arrayTrabajo[42];
                        dr[44] = arrayTrabajo[43];
                        dr[45] = arrayTrabajo[44];
                        dr[46] = arrayTrabajo[45];
                        dr[47] = arrayTrabajo[46];
                        dr[48] = arrayTrabajo[47];
                        dr[49] = arrayTrabajo[48];
                        dr[50] = arrayTrabajo[49];
                        dr[51] = arrayTrabajo[50];
                        dr[52] = arrayTrabajo[51];
    
    
                        //  dr[53] = arrayTrabajo[52];
                        //  dr[54] = arrayTrabajo[53];
    
                        dt.Rows.Add(dr);
                        }
                        cnrecoge.Close();
    
                        //ASIGNA "dt" al DataSource de un datagridview      
                        dataGridView1.DataSource = dt;
                    }
                //}
            }
    

    es posible?

    saludos


    ruben

    lunes, 25 de junio de 2018 15:43

Respuestas

  • Mira se me ocurrió que puedes hacer algo así, no he probado el código pero si da error me avisas.

                DataTable dt = new DataTable();
                SqlDataAdapter adap = new SqlDataAdapter(cnn,query);
                adap.Fill(dt);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        int valor = Convert.ToInt32(dt.Rows[i][j]);
                        if (valor == 0)
                        {
                            if (j + 2 < dt.Columns.Count && Convert.ToInt32(dt.Rows[i][j + 2]) != 0)
                                valor = Convert.ToInt32(dt.Rows[i][j + 2]);
                            else if (j + 1 < dt.Columns.Count && Convert.ToInt32(dt.Rows[i][j + 1]) != 0)
                                valor = Convert.ToInt32(dt.Rows[i][j + 1]);
                            else
                                valor = Convert.ToInt32(dt.Rows[i][j]);
                        }
                        dt.Rows[i][j] = valor;
                    }
                }

    lunes, 25 de junio de 2018 17:52
  • hola Exequiel

    Si mira

    Lo que estoy haciendo actualmente es esto

    Por ejemplo si el valor de la semana 1 = 0

    Compruebo que valor tiene la semana 3, si la semana 3 es >0 entonces relleno con ese valor el valor de la semana 1

    Ejemplo

    Codigo  semana1   semana2   semana3                     resultado     Codigo  semana1   semana2   semana3

    PC001     0                2                3                                            PC001        3                 2             3

    Pero si se me da este caso

    Codigo  semana1   semana2   semana3  semana4                    

    PC001     0                2                0             0                         

    Espero este resultado

     Codigo  semana1   semana2   semana3  semana4  

    PC001     2                2                2             2                    

    Que es lo que hace va rellenando con el ultimo valor encontrado so los demás son 0

    saludos


    ruben

    lunes, 25 de junio de 2018 17:18

Todas las respuestas

  • Si te puedes explicar un poco mejor que es lo que quieres hacer, tal vez podría ayudarte.
    lunes, 25 de junio de 2018 16:49
  • hola Exequiel

    Si mira

    Lo que estoy haciendo actualmente es esto

    Por ejemplo si el valor de la semana 1 = 0

    Compruebo que valor tiene la semana 3, si la semana 3 es >0 entonces relleno con ese valor el valor de la semana 1

    Ejemplo

    Codigo  semana1   semana2   semana3                     resultado     Codigo  semana1   semana2   semana3

    PC001     0                2                3                                            PC001        3                 2             3

    Pero si se me da este caso

    Codigo  semana1   semana2   semana3  semana4                    

    PC001     0                2                0             0                         

    Espero este resultado

     Codigo  semana1   semana2   semana3  semana4  

    PC001     2                2                2             2                    

    Que es lo que hace va rellenando con el ultimo valor encontrado so los demás son 0

    saludos


    ruben

    lunes, 25 de junio de 2018 17:18
  • Mira se me ocurrió que puedes hacer algo así, no he probado el código pero si da error me avisas.

                DataTable dt = new DataTable();
                SqlDataAdapter adap = new SqlDataAdapter(cnn,query);
                adap.Fill(dt);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        int valor = Convert.ToInt32(dt.Rows[i][j]);
                        if (valor == 0)
                        {
                            if (j + 2 < dt.Columns.Count && Convert.ToInt32(dt.Rows[i][j + 2]) != 0)
                                valor = Convert.ToInt32(dt.Rows[i][j + 2]);
                            else if (j + 1 < dt.Columns.Count && Convert.ToInt32(dt.Rows[i][j + 1]) != 0)
                                valor = Convert.ToInt32(dt.Rows[i][j + 1]);
                            else
                                valor = Convert.ToInt32(dt.Rows[i][j]);
                        }
                        dt.Rows[i][j] = valor;
                    }
                }

    lunes, 25 de junio de 2018 17:52