none
COMO MOSTRAR MI LISTA COMPLETA DE ELEMENTOS RRS feed

  • Pregunta

  • SIEMPRE ME MUESTRA EL ULTIMO OBJETO INGRESADO,  NECESITO QUE MUESTRE TODOS LOS ELEMENTOS.

    <asp:textbox class="form-control" id="txtnombre" placeholder="nom" runat="server"></asp:textbox><asp:textbox class="form-control" id="txtape" placeholder="ape" runat="server"></asp:textbox><asp:textbox class="form-control" id="txtedad" placeholder="edad" runat="server" type="number"></asp:textbox>
    <asp:button id="Btnguar" runat="server" text="guardar"></asp:button><asp:button id="Button1" runat="server" text="Mostrar"></asp:button>

    <asp:label id="txtno" runat="server" text="Label"></asp:label>

             

     public partial class _Default : Page
        {
            public class Persona{

                public string nombre;
                public string apellido;
                public int edad;


                }
            public Persona p = new Persona();

            protected void Page_Load(object sender, EventArgs e)
            {

            }

            protected void Btnguar_Click(object sender, EventArgs e)
            {
                List<Persona> persona = new List<Persona>();
                p.nombre = txtnombre.Text;
                p.apellido = txtape.Text;
                p.edad = int.Parse(txtedad.Text);
                persona.Add(p);
                Session["lista"] = persona;

            }

            protected void Button1_Click(object sender, EventArgs e)
            {

    //mostrar mi lista

                List<Persona> milista = (List<Persona>)Session["lista"];
                try
                {
                    foreach (Persona dato in milista)
                    {
                        txtno.Text = dato.nombre + " ";
                        txtap.Text = dato.apellido + " ";
                        txted.Text = dato.edad.ToString() + " ";

                    }
                }

                catch (Exception ex)
                {
                    Button1.Text = ex.ToString();
                }
            }
        }

    <asp:label id="txtap" runat="server" text="Label"></asp:label>

    <asp:label id="txted" runat="server" text="Label"></asp:label>

    miércoles, 14 de agosto de 2019 2:22

Todas las respuestas

  • SIEMPRE ME MUESTRA EL ULTIMO OBJETO INGRESADO

    Lógico que siempre the muestre el último objeto ingresado. Tienes al menos dos errores graves que impiden que se muestre más de un elemento. cada uno de los dos errores por separado sería suficiente para que no funcione.

    El primer error está en Btnguar_Click. Ahí se supone que deberías añadir el último elemento ingresado a la lista de elementos, pero en su lugar estás construyendo una nueva lista que solo contiene el último elemento añadido. Por lo tanto, nunca llegas a tener más de un elemento en tu lista. Solución: Tienes que recuperar desde el Session la lista anterior; si no existe entonces haces un "new", pero si existe entonces tienes que hacer el "add" sobre la lista existente (y no sobre una nueva lista) antes de salvarla de nuevo en el Session.

    El segundo error está en donde dices "mostrar mi lista". Ahí no hay nada que pueda "mostrar" la lista. Es cierto que recorres la lista con un bucle, pero dentro del bucle lo que haces es cargar los datos sobre el único conjunto de textboxes que tienes en pantalla, por lo que a cada vuelta del bucle se "machaca" el valor anterior de los textboxes y al final de todo el bucle solo se ve el último valor que les asignaste. Para poder mostrar una lista, necesitas poner en pantalla algo que vaya creciendo según los elementos de la lista, no vale con tener un único conjunto de textboxes fijo. Hay muchas maneras de hacer esto, desde usar controles dinámicos hasta usar un control Repeater o usar un Grid con databinding, dependiendo del aspecto final que quieras darle a la pantalla. En cualquiera de los casos, es significativamente distinto de lo que estás haciendo; no se puede conseguir lo que quieres conseguir con la técnica que estás utilizando.

    miércoles, 14 de agosto de 2019 7:57
    Moderador