none
agarrar el nombre y otros componentes de acuerdo al checkbox seleccionado asp.net C# RRS feed

  • Pregunta

  • Estoy haciendo un proyecto, donde tengo una bitacora que muestra varios registros, y cada row tiene un chechbox, si yo selecciono varios con el mismo nombre, se suma 2 columnas, el del peso y cantidad, y se ponen el resultado en 2 texboxt, por ejemlo, cantidad.text y peso.text. PERO NECESITO RECUPERAR EL NOMBRE Y PONERLO EN NAME.TEXT pero solo he podido hcer la suma. no se como poner  para que agarre solo el nombre y una sola vez 

                            

    //SOLO SUMA, CANTIDAD Y PESO

    protected void seleccionar(object sender, EventArgs e)
                    {
                      int suma = GridView1.Rows.Cast<GridViewRow>()
                      .Where(x => Convert.ToBoolean(((CheckBox)x.FindControl("chbItem")).Checked) )
                     .Sum(x => Convert.ToInt32(x.Cells[4].Text));
                        int suma2 = GridView1.Rows.Cast<GridViewRow>()
                        .Where(y => Convert.ToBoolean(((CheckBox)y.FindControl("chbItem")).Checked))
                      .Sum(y => Convert.ToInt32(y.Cells[18].Text));

                PesoTotal.Text = suma.ToString();
                         cantidadTotal.Text = suma2.ToString();
                    } 

    miércoles, 11 de septiembre de 2019 14:49

Respuestas

  • hola

    a veces puede ayudar la notacion linq

    var result = from row in GridView1.Rows.Cast<GridViewRow>()
                      where ((CheckBox)row.FindControl("chbItem")).Checked
                      select new {
                            precio = Convert.ToInt32(row.Cells[4].Text),
                            cantidad = Convert.ToInt32(row.Cells[18].Text)
                       };
    
      PesoTotal.Text = result.Sum(x=>x.precio).ToString();
      cantidadTotal.Text = result.Sum(x=>x.cantidad).ToString();


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 11 de septiembre de 2019 16:23

Todas las respuestas

  •  El truco es simplemente cambiar los operadores LINQ.

    Ten presente que si seleccionas distintas filas que no tengan el mismo nombre, se devolvera el primero de los nombres. Y si no seleccionas ninguna fila, se devolvera null.

                       string nombre = GridView1.Rows.Cast<GridViewRow>()
                        .FirstOrDefault(y => Convert.ToBoolean(((CheckBox)y.FindControl("chbItem")).Checked))
                        ?.Select(y => y.Cells[numero].Text);



    miércoles, 11 de septiembre de 2019 15:04
  • Marca error en el select

    miércoles, 11 de septiembre de 2019 15:52
  • hola

    a veces puede ayudar la notacion linq

    var result = from row in GridView1.Rows.Cast<GridViewRow>()
                      where ((CheckBox)row.FindControl("chbItem")).Checked
                      select new {
                            precio = Convert.ToInt32(row.Cells[4].Text),
                            cantidad = Convert.ToInt32(row.Cells[18].Text)
                       };
    
      PesoTotal.Text = result.Sum(x=>x.precio).ToString();
      cantidadTotal.Text = result.Sum(x=>x.cantidad).ToString();


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 11 de septiembre de 2019 16:23
  • Buenos dias, en la parte 

    precio = Convert.ToInt32(x.Cells[4].Text), cantidad = Convert.ToInt32(y.Cells[18].Text)

    EN LA X, y Y aparece error, se tiene que declarar algo?

    miércoles, 11 de septiembre de 2019 16:41
  • ya edite la respuesta, cambia la x y por row

    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 11 de septiembre de 2019 17:00