Pop

40-. Aplicaciones web. ViewState.Carrito de compra(3).Curso de C# con Visual Studio 2017.

40-. Aplicaciones web. ViewState.Carrito de compra(3)

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos empezar a utilizar el ViewState. Lo utilizaremos para almacenar los productos seleccionados por el usuario en cada petición al servidor.Si no utlizaramos este u otro mecanismo en cada ida y vuelta perderiamos los datos.

-  Para comprender el funcionamiento de los métodos explicados en el video, es necesario conocer el ciclo de vida de una página,que ya fue explicado en entradas anteriores.Como podeís ver en la imagen.  los datos del ViewState se cargan antes de pasar por el evento Load y se guardan antes de renderizar la página. Como los métodos que cargan y guardan el ViewState permiten ser sobreescritos utilizando el modificador override los modificamos para guardar y cargar los prodcutos que el usaurio vaya seleccionando.


 - Una vez comprendido en que momentos se llaman a los métodos que utilizan el ViewsState os dejo el video donde utilizo este mecanismo:


- Os dejo un enlace a la MSDN para completar la información:https://msdn.microsoft.com/es-es/library/bb386448(v=vs.100).aspx

- También os dejo el código de lo visto en en el video:

  • Código de la página Pedido.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Pedidos.aspx.cs" Inherits="GestionVarios.Pedidos" MasterPageFile="~/Master.Master" %>

<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server">


    <div style="background-color: #FFFFFF">
        <table>
            <tr>
                <td align="left" width="30%">
                    <asp:TreeView ID="treeViewProductos" runat="server" OnSelectedNodeChanged="treeViewProductos_SelectedNodeChanged"></asp:TreeView>

                </td>
                <td align="center"  width="50%">
                   
                    <asp:Label ID="lblNombreProducto" runat="server"></asp:Label><br />
                    <asp:Label ID="lblDescripcion" runat="server"></asp:Label><br />
                    <asp:Label ID="lblPrecioDeCompra" runat="server"></asp:Label><br />
                    <asp:Label ID="lblCantidad" runat="server" Text="Unidades:" Visible="false"></asp:Label>
                    <asp:TextBox runat="server" ID="txtUnidades" Width="40px" Visible="false"></asp:TextBox>
                      <asp:RequiredFieldValidator ID="mreqEMail" runat="server" ControlToValidate="txtUnidades" ErrorMessage="*" Display="Dynamic" ForeColor="Red"  ></asp:RequiredFieldValidator><br />
                    <asp:RegularExpressionValidator ID="mregEMail" runat="server" ControlToValidate="txtUnidades" ErrorMessage="Introduzca un numero" ValidationExpression="^\d+$" Display="Dynamic"  ForeColor="Red"></asp:RegularExpressionValidator>
      
                  
                </td>
                <td  width="20%">

                    <asp:Button id="btnAgregar" runat="server" Text="Agregar al carro" Visible="false" OnClick="btnAgregar_Click"/>
                 
                </td>
                   <td  width="20%">

                     <asp:Button ID="btnVerCompra" runat="server" Text="Ver carro compra" OnClick="btnVerCompra_Click"  Visible="false"/>
                 
                </td>
           </tr>
        </table> 
   </div>
</asp:Content>

  •  Código de la página Pedido.aspx.cs
 using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class Pedidos : System.Web.UI.Page
    {
        private ArrayList productosSeleccionados = new ArrayList();
            
     
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                InicializarDatos();
         

            }
        }

        private void InicializarDatos()
        {

            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "DameHijosArbolPorProducto";
                Com.CommandType = CommandType.StoredProcedure;
                SqlDataReader Rst = Com.ExecuteReader();

                int i = 0;
                while (Rst.Read())
                {
                    treeViewProductos.Nodes.Add(new TreeNode());
                    treeViewProductos.Nodes[i].Text = Rst["Nombre"].ToString();
                    treeViewProductos.Nodes[i].Value = Rst["IdProducto"].ToString();
                    cargarHijos(Rst["IdProducto"].ToString(),i);
                    i++;
                }
                Rst.Close();
                //Expande todos los nodos
                treeViewProductos.CollapseAll();//.ExpandAll();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (Con.State == ConnectionState.Open)
                    Con.Close();
                Con.Dispose();
            }

        }

        private void cargarHijos(string idProducto,int posicionNodo)
        {

            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            string IdPadre = String.Empty;
            IdPadre = idProducto;
            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "DameHijosArbolPorProducto";
                Com.CommandType = CommandType.StoredProcedure;
                Com.Parameters.Add("@idProducto", SqlDbType.Int).Value = idProducto;
                SqlDataReader Rst = Com.ExecuteReader();
           

                while (Rst.Read())
                {
                    TreeNode Tn = new TreeNode();
                    Tn.Text = Rst["Nombre"].ToString();
                    Tn.Value = Rst["IdProducto"].ToString();


                    if (Rst["IdPadre"].ToString() != IdPadre)
                    {
                        TreeNode Padre = DameNodoPorId(treeViewProductos.Nodes[posicionNodo], Rst["IdPadre"].ToString());
                        Padre.ChildNodes.Add(Tn);
                    }
                    else
                    {
                        treeViewProductos.Nodes[posicionNodo].ChildNodes.Add(Tn);
                    }
                }

                Rst.Close();
                Com.Dispose();


            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (Con.State == ConnectionState.Open)
                    Con.Close();
                Con.Dispose();
            }
        }

        private TreeNode DameNodoPorId(TreeNode Nodo, string Id)
        {
            if (Nodo.Value == Id)
                return Nodo;

            for (int i = 0; i < Nodo.ChildNodes.Count; i++)
            {
                if (Nodo.ChildNodes[i].Value == Id)
                    return Nodo.ChildNodes[i];

                TreeNode RetNodo = DameNodoPorId(Nodo.ChildNodes[i], Id);

                if (RetNodo != null)
                    return RetNodo;
            }
            return null;
        }

        protected void treeViewProductos_SelectedNodeChanged(object sender, EventArgs e)
        {
            TreeNode nodo = treeViewProductos.SelectedNode;
            CargarDatosProducto(nodo.Value);
            btnAgregar.Visible = true;
            txtUnidades.Visible = true;
            lblCantidad.Visible = true;
        }

        private void CargarDatosProducto(string idProducto)
        {
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "DameDatosProducto";
                Com.CommandType = CommandType.StoredProcedure;
                Com.Parameters.Add("@idProducto", SqlDbType.Int).Value = idProducto;
                SqlDataReader Rst = Com.ExecuteReader();


                while (Rst.Read())
                {
                    lblDescripcion.Text = "Detalles producto" + Rst["Descripcion"].ToString();
                    lblNombreProducto.Text = "Producto: " + Rst["Nombre"].ToString();
                    lblPrecioDeCompra.Text = "Precio por unidad:" + Rst["PrecioVenta"].ToString() + " € ";
                }

                Rst.Close();
                Com.Dispose();


            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (Con.State == ConnectionState.Open)
                    Con.Close();
                Con.Dispose();
            }
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {

            btnVerCompra.Visible = true;
            TreeNode nodo = treeViewProductos.SelectedNode;
            productosSeleccionados.Add(nodo.Value);
            productosSeleccionados.Add(txtUnidades.Text);
       
        }


        protected override void LoadViewState(object savedState)
        {
           base.LoadViewState(savedState);
           this.productosSeleccionados = (ArrayList)this.ViewState["productosCarro"];
        }


        protected override object SaveViewState()
        {
            this.ViewState.Add("productosCarro", productosSeleccionados);

            return base.SaveViewState();

        }

        protected void btnVerCompra_Click(object sender, EventArgs e)
        {
          
        }
    }
}

No hay comentarios:

Publicar un comentario

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...