Pop

44.Aplicaciones web.Objeto Chart. Curso de C# con Visual Studio 2017.

44-.Aplicaciones web.Objeto Chart

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver un control de uso común en muchas de las páginas web que utilizamos habitualmente. Este control es el Chart, que es un componente que se utiliza para mostrar gráficos en pantalla de uan manera fácil.

 - El control de servidor Chart permite crear páginas ASP.NET que incluyan gráficos de análisis estadístico. Algunas de las  características  que admite el control Chart son las siguientes:
  • Series de datos, áreas de gráfico, ejes, leyendas, etiquetas y títulos.
  • Enlace de datos.
  • Manipulación de datos, como copiar, dividir, combinar, alinear, agrupar, ordenar, buscar y filtrar.
  • Fórmulas estadísticas y financieras.
  • Apariencia avanzada de los gráficos, como 3D, suavizado de contorno, iluminación y perspectiva.
- En el siguiente video os muestro como enlazar el control Chart  a un procedimiento almacenado de nuestra base de datos. Permite mostrar en pantalla gráficos enlazados a múltiples origenes de datos, en nuestra caso utilizamos nuestra base de datos de pruebas:


 - Os dejo un enlace a la página de Microsoft con más información este control:

- También os dejo el código de este ejemplo:

  • Procedimineto almacenado SQL con el que cargamos el control:
ALTER PROCEDURE [dbo].[DamePedidos]
   
AS
BEGIN

    SET NOCOUNT ON;
   
    SELECT Usuarios.Nombre, FechaPedido FROM Pedidos
    INNER JOIN Usuarios on Usuarios.IdUsuarios =Pedidos.IdUsuario

END

  •  Código de la página cliente aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EjemploControlesVarios.aspx.cs" Inherits="GestionVarios.EjemploControlesVarios" %>

<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">


        <div>
       
        <asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSourcePedidos" BackColor="White" CssClass="auto-style1" Palette="Chocolate">
            <Series>
                <asp:Series Name="Series1" XValueMember="Nombre" YValueMembers="FechaPedido">
                </asp:Series>
            </Series>
            <ChartAreas>
                <asp:ChartArea Name="ChartArea1">
                </asp:ChartArea>
            </ChartAreas>
        </asp:Chart>
            <asp:SqlDataSource ID="SqlDataSourcePedidos" runat="server" ConnectionString="<%$ ConnectionStrings:EmpresaConnectionString %>" SelectCommand="DamePedidos" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
          
     </div>

    </form>
</body>
</html>

  •  Código de servidor de la página:
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class EjemploControlesVarios : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int x = Chart1.ChartAreas.Count;
         }
    }
}

43.Aplicaciones web.Objeto Listview. Curso de C# con Visual Studio 2017.

43-.Aplicaciones web.Objeto Calendar

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver un control de uso común en muchas de las páginas web que utilizamos habitualmente. Este control es el ListView, que es un componente que muestra los valores de un origen de datos previamente seleccionado ,mediante plantillas definidas por el usuario.

- En esta ocasión vamos a cargar los datos del control utilizando el asistente que trae Visual Studio 2017. Este asistente nos permite seleccionar un origen de datos que puede ser un base de datos SQL o un fichero XML entre otros. En nuestro ejemplo vamos a enlazar el control a un procedimiento almacenado que nos devuelve el listado de paises y su código correspondiente.


- Una vez enlazado a un origen de datos como habéis visto en el video, es posible utilizar una de las plantillas predefinidas para visualizar los datos como más nos interesen.

- Como en el resto de controles de .NET también es posible editar las propiedades y eventos del control desde el fichero .cs en el que este alojado el control.

- Os dejo un enlace a la MSDN con más información y el código de la página aspx donde hemos alojado nuestro control de pruebas:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EjemploControlesVarios.aspx.cs" Inherits="GestionVarios.EjemploControlesVarios" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Calendar ID="Calendar1" runat="server" ></asp:Calendar>
            <asp:Label runat="server" ID="lblMostrar"></asp:Label>
            <asp:Button runat="server" ID="btnClic" Text="Dale" OnClick="btnClic_Click" />
            <br />
            <br />
            <asp:FileUpload ID="fileUpload" runat="server" />
            <asp:Button ID="btnFileUploada" runat="server" Text="Guardar" OnClick="btnFileUploada_Click" />
              <asp:Label runat="server" ID="lblFileupload"></asp:Label>
            <asp:HiddenField ID="HiddenField1" runat="server" />
            <br />
            <br />
              <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSourcePaises" OnSelectedIndexChanging="ListView1_SelectedIndexChanging" >
                  <AlternatingItemTemplate>
                      <span style="background-color: #FAFAD2;color: #284775;">Pais:
                      <asp:Label ID="PaisLabel" runat="server" Text='<%# Eval("Pais") %>' />
                      <br />
                      CodPais:
                      <asp:Label ID="CodPaisLabel" runat="server" Text='<%# Eval("CodPais") %>' />
                      <br />
                      <br />
                      </span>
                  </AlternatingItemTemplate>
                  <EditItemTemplate>
                      <span style="background-color: #FFCC66;color: #000080;">Pais:
                      <asp:TextBox ID="PaisTextBox" runat="server" Text='<%# Bind("Pais") %>' />
                      <br />
                      CodPais:
                      <asp:TextBox ID="CodPaisTextBox" runat="server" Text='<%# Bind("CodPais") %>' />
                      <br />
                      <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="Actualizar" />
                      <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancelar" />
                      <br />
                      <br />
                      </span>
                  </EditItemTemplate>
                  <EmptyDataTemplate>
                      <span>No se han devuelto datos.</span>
                  </EmptyDataTemplate>
                  <InsertItemTemplate>
                      <span style="">Pais:
                      <asp:TextBox ID="PaisTextBox" runat="server" Text='<%# Bind("Pais") %>' />
                      <br />
                      CodPais:
                      <asp:TextBox ID="CodPaisTextBox" runat="server" Text='<%# Bind("CodPais") %>' />
                      <br />
                      <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insertar" />
                      <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Borrar" />
                      <br />
                      <br />
                      </span>
                  </InsertItemTemplate>
                  <ItemTemplate>
                      <span style="background-color: #FFFBD6;color: #333333;">Pais:
                      <asp:Label ID="PaisLabel" runat="server" Text='<%# Eval("Pais") %>' />
                      <br />
                      CodPais:
                      <asp:Label ID="CodPaisLabel" runat="server" Text='<%# Eval("CodPais") %>' />
                      <br />
                      <br />
                      </span>
                  </ItemTemplate>
                  <LayoutTemplate>
                      <div id="itemPlaceholderContainer" runat="server" style="font-family: Verdana, Arial, Helvetica, sans-serif;">
                          <span runat="server" id="itemPlaceholder" />
                      </div>
                      <div style="text-align: center;background-color: #FFCC66;font-family: Verdana, Arial, Helvetica, sans-serif;color: #333333;">
                          <asp:DataPager ID="DataPager1" runat="server">
                              <Fields>
                                  <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" />
                                  <asp:NumericPagerField />
                                  <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" />
                              </Fields>
                          </asp:DataPager>
                      </div>
                  </LayoutTemplate>
                  <SelectedItemTemplate>
                      <span style="background-color: #FFCC66;font-weight: bold;color: #000080;">Pais:
                      <asp:Label ID="PaisLabel" runat="server" Text='<%# Eval("Pais") %>' />
                      <br />
                      CodPais:
                      <asp:Label ID="CodPaisLabel" runat="server" Text='<%# Eval("CodPais") %>' />
                      <br />
                      <br />
                      </span>
                  </SelectedItemTemplate>
            </asp:ListView>
            <asp:SqlDataSource ID="SqlDataSourcePaises" runat="server" ConnectionString="<%$ ConnectionStrings:EmpresaConnectionString %>" SelectCommand="DamePaises" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
        </div>
   
       
      
    </form>
</body>
</html>






42-. Aplicaciones web.Guardar Pedidos(5).Curso de C# con Visual Studio 2017.

42-. Aplicaciones web.Guardar Pedidos.Carrito de compra(5)

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a finalizar nuestro ejemplo del carrito de compra.Para ello vamos  guardar en nuestra base de datos los pedidos que un usuario previamente logado en la web hace una vez desde la página.

- Os dejo un una imagen con el diseño de las tablas de nuestra base de datos ya que hemos añadido el campo cantidad a nuestra tabla Pedidos_Lineas:

- Como podéis ver en el video siguiente, además de un botón para finalizar la compra hemos añadido un botón para limpiar nuestro carrito de la compra.El botón finalizar compra llama a un procedimiento almacenado que guarda en nuestra base datos el pedido con todos sus productos asociados. El botón limpiar carro borra todos los articulos que tengamos en el carrito.



- Os dejo el código de lo visto en el video y un enlace a Microsoft para que sepáis cuando usar la función identity de SQL.

  • Procedimento almacenado SQL:
 ALTER PROCEDURE [dbo].[GuardarPedido]
    @idUsuario int ,
    @Lista AS dbo.ListaProductosCompra READONLY 
AS
BEGIN


        DECLARE @TablaTemp2 TABLE(IdTemp int NOT NULL, cantidad int)
        INSERT INTO @TablaTemp2 SELECT idprodcuto,cantidad FROM @lista

        --INSERTAMOS  EN TABLA PEDIDOS
        DECLARE @idpedidoAux int
        INSERT INTO dbo.Pedidos (IdUsuario,FechaPedido) VALUES (@idUsuario ,GETDATE() )
        SET @idpedidoAux =  @@IDENTITY
   
        --INSERTAMOS EN TABLA LINEAS PEDIDOS
           INSERT INTO Pedido_Lineas
          SELECT @idpedidoAux,* FROM @TablaTemp2
END

  • Código de la página Pedidos.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">
        <div runat="server" id="divProductos">
            <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>
        <div runat="server" id="divListaCompra" visible="false" align="center">
            <table>
                <tr>
                    <td align="center">
                        <asp:GridView ID="GridView1" runat="server"></asp:GridView>
                    </td>
                </tr>
                <tr>
                    <td>
                        <br />
                        <asp:Button ID="btnFinalizarCompra" runat="server" Text="Finalizar compra" OnClick="btnFinalizarCompra_Click" />&nbsp;&nbsp;
                    <asp:Button ID="btnLimpiarCarro" runat="server" Text="Vaciar carro" OnClick="btnLimpiarCarro_Click" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <br />
                        <asp:Label runat="server" ID="lblResultado"></asp:Label>
                    </td>
                </tr>
            </table>
        </div>
    </div>
</asp:Content>

  • Código de la página Pedidos.aspx.cs:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
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)
        {
           ArrayList productos = this.productosSeleccionados;


            DataTable dt = ProductosDatatable(productos);

            CargarListaProducto(dt);
            divListaCompra.Visible = true;
            divProductos.Visible = false;

        }

        private void CargarListaProducto(DataTable productos)
        {
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "DameDatosProductos";
                Com.CommandType = CommandType.StoredProcedure;
                Com.Parameters.Add("@Lista", SqlDbType.Structured).Value = productos;
                SqlDataReader Rst = Com.ExecuteReader(CommandBehavior.CloseConnection);

                GridView1.DataSource = Rst;
                GridView1.DataBind();
            

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

        protected void btnLimpiarCarro_Click(object sender, EventArgs e)
        {
            productosSeleccionados = new ArrayList();
            divProductos.Visible = true;
            divListaCompra.Visible = false;
        }

        protected void btnFinalizarCompra_Click(object sender, EventArgs e)
        {
            lblResultado.Visible = false;
            if (productosSeleccionados.Count > 0)
            {
                ArrayList productos = this.productosSeleccionados;
                DataTable dt = ProductosDatatable(productos);
                SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

                try
                {
                    Con.Open();
                    SqlCommand Com = Con.CreateCommand();
                    Com.CommandText = "GuardarPedido";
                    Com.CommandType = CommandType.StoredProcedure;
                    Com.Parameters.Add("@idUsuario", SqlDbType.Int).Value = this.Page.User.Identity.Name;
                    Com.Parameters.Add("@Lista", SqlDbType.Structured).Value = dt;
                    Com.ExecuteNonQuery();

                    lblResultado.Text = "Pedido finalizado correctamente";
                    lblResultado.ForeColor = Color.Green;
                    lblResultado.Visible = true;

                }
                catch (Exception ex)
                {
                    lblResultado.Text = ex.Message;
                    lblResultado.ForeColor = Color.Red;
                    lblResultado.Visible = true;
                }
                finally
                {
                    if (Con.State == ConnectionState.Open)
                        Con.Close();
                    Con.Dispose();
                }
            }
            else
            {
                lblResultado.Text = "Seleccione algun producto";
                lblResultado.ForeColor = Color.Red;
                lblResultado.Visible = true;
           
            }

        }

        private DataTable ProductosDatatable(ArrayList productos)
        {

            DataTable dt = new DataTable();
            dt.Columns.Add("idProducto");
            dt.Columns.Add("Cantidad");

            for (int i = 0; i < productos.Count; i = i + 2)
                dt.Rows.Add(productos[i], productos[i + 1]);

            return dt;
        }
    }
}

41-. Aplicaciones web.GridView.Carrito de compra(4).Curso de C# con Visual Studio 2017.

41-. Aplicaciones web.GridView.Carrito de compra(4)

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a utilizar el control GridView y el objeto DataTable. En el objeto DataTable iremos almacenando los productos y las cantidades seleccionadas, para posteriormente validar contra nuestra base de datos que estos productos existen.Una vez comprobado que estos productos existen los mostramos al usuario en el control GridView 

-   Os dejo unas pinceladas de estos dos controles y unos enlaces a la MSDN:

  • DataTable: Un objeto DataTable representa una tabla de datos relacionales de la memoria; los datos son locales de la aplicación basada en .NET en la que residen, pero se pueden llenar desde un origen de datos como Microsoft SQL Server.(Más información)

  • GridView:Muestra los valores de un origen de datos en una tabla en la que cada columna representa un campo y cada fila representa un registro. El control GridView le permite seleccionar, ordenar y editar estos elementos.(Más información)
  

-  Os dejo el código SQL y el código de la página de la aplicación vista en el video:

  • Procedimiento alamcenado SQL al que llamamamos para cargar el Gridview:
CREATE PROCEDURE [dbo].[DameDatosProductos]
   
    @Lista AS dbo.ListaProductosCompra READONLY
AS
BEGIN



        DECLARE @TablaTemp2 TABLE(IdTemp int NOT NULL, cantidad int)
        INSERT INTO @TablaTemp2 SELECT idprodcuto,cantidad FROM @lista

        SELECT IdProducto,Nombre,PrecioVenta,t.cantidad,Descripcion
        FROM Productos
        INNER JOIN @TablaTemp2 as t ON t.IdTemp = Productos.idproducto
      
 END

  •  Código de la página pedidos.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>
        <table>
            <tr>
                <td align="center">
                    <asp:GridView ID="GridView1" runat="server" ></asp:GridView>
               </td>
            </tr>
        </table>
    </div>
</asp:Content>


  •  Código de la página pedidos.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)
        {
           ArrayList productos = this.productosSeleccionados;
          
           DataTable dt = new DataTable();
           dt.Columns.Add("idProducto");
           dt.Columns.Add("Cantidad");

            for (int i = 0; i < productos.Count; i=i+2)
              dt.Rows.Add(productos[i], productos[i + 1]);
           

            CargarListaProducto(dt);

        }

        private void CargarListaProducto(DataTable productos)
        {
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "DameDatosProductos";
                Com.CommandType = CommandType.StoredProcedure;
                Com.Parameters.Add("@Lista", SqlDbType.Structured).Value = productos;
                SqlDataReader Rst = Com.ExecuteReader(CommandBehavior.CloseConnection);

                GridView1.DataSource = Rst;
                GridView1.DataBind();
            

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

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...