Pop

53.Servicios Web.API REST. MVC .Método Get- Visual Studio 2017

53-.Servicios Web.API REST. MVC - Método Get

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web.En esta ocación vamos a empezar a crear un API REST. Como definición podemos decir que  es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, como XML y JSON. Es una alternativa a otros protocolos estándar de intercambio de datos como SOAP (Simple Object Access Protocol).

- En esta entrada vamos a crearnos un método get que nos devuelva todos los pedidos que tenemos almacenados en nuestra base de datos.Estos métodos se definen para que los clientes que invoquen a nuestra API puedan obtener los datos que nosotros queramos darles. En este caso en el video vemos como crear un método que posteriormente consumiremos desde un cliente.



- Como hemos visto en el video primero creamos un proyecto de tipo Web API. Después creamos dentro de nuestra carpeta Models una clase llamada Pedidos:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Pruebas.Models
{
    public class Pedidos
    {
        private string nomreCliente;
        string fechaPedido;

        public string NomreCliente { get => nomreCliente; set => nomreCliente = value; }
        public string FechaPedido { get => fechaPedido; set => fechaPedido = value; }
    }
}

- Debemos agregar también un controlador para trabajar con los pedidos. De momento la clase tendrá un método que nos devuelva una lista con todos los pedidos almacenados. El código fuente es el siguiente:

using Pruebas.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace Pruebas.Controllers
{
    public class PedidosController : ApiController
    {
      

        public List<Pedidos> getPedidos()
        {
            List<Pedidos> pedidosController = new List<Pedidos>();
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);

            try
            {
                conexion.Open();
                SqlCommand com = conexion.CreateCommand();
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.CommandText = "DamePedidos";


                SqlDataReader reader = com.ExecuteReader();
                while (reader.Read())
                {
                    Pedidos p = new Pedidos();
                    if (reader["Nombre"] != null)
                        p.NomreCliente = reader["Nombre"].ToString();
                   if (reader["FechaPedido"] != null )
                        p.FechaPedido = reader["FechaPedido"].ToString();


                    pedidosController.Add(p);
                }
            }


            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            finally
            {
                if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                    conexion.Close();

                conexion.Dispose();
            }
            return pedidosController;
       }
        

        }
    }

- En la siguiente entrada aprenderemos a consumir este método desde un cliente.

52.Servicios Web.Nuevo método en nuestro WS. Curso de C# con Visual Studio 2017.

52-.Servicios Web.Nuevo método en nuestro WS

  - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web.En esta ocación vamos a añadir un método más a nuestro servicio web para continuar practicando.
- En entradas anteriores del blog teniamos hecha la lógica para dar de alta un usuario en nuestra base de datos.Vamos a añadir al servicio web este método con su correspondiente lógica para guardar en base de datos.Además vamos a proceder a llamar al nuevo método recien implementado desde nuestro cliente.
- En el video muestro este proceso:


- Os dejo el código de ejemplo desglsoado por partes.

  • Nuevo método de Alta de Usuario de nuestro web service
        [WebMethod]
        [SoapHeader("Authentication")]
        public Boolean AltaUsuario(byte[] passCifrada, string nombreUsuario, string email, string codPais)
        {
            Boolean todoOk = true;
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            if (Authentication.usuario == ConfigurationManager.AppSettings["Usuario"].ToString() && Authentication.pass == ConfigurationManager.AppSettings["Pass"].ToString())
            {
                try
                {
                    conexion.Open();
                    SqlCommand com = conexion.CreateCommand();
                    com.CommandType = System.Data.CommandType.StoredProcedure;
                    com.CommandText = "dbo.AltaUsuario";
                    com.Parameters.Add("@nombre", SqlDbType.VarChar, 255).Value = nombreUsuario;
                    com.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = email;
                    com.Parameters.Add("@pass", SqlDbType.VarBinary, 8000).Value = passCifrada;
                    com.Parameters.Add("@codPais", SqlDbType.VarChar, 3).Value = codPais;

                    com.ExecuteNonQuery();
                }


                catch (Exception ex)
                {
                    throw new Exception(ex.ToString());
                }
                finally
                {
                    if (conexion != null && conexion.State == System.Data.ConnectionState.Open)
                        conexion.Close();

                    conexion.Dispose();
                }
            }
            else todoOk = false;

            return todoOk;
        }

  • Llamada para el alta de ususario desde nuestro cliente.Código de la parte de servidor:

using System;
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 AltaUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void mbtnRegistrar_Click(object sender, EventArgs e)
        {
            lblError.Visible = true;
            if (chkCondiciones.Checked == false)
            {
                
                lblError.Text = "Debes aceptar los términos y condiciones del servicio.";
            }
            else
            {
                byte[] passCifrada = cifrar(mtxtPassword.Text.Trim());
                if (guardarUsuario(passCifrada))
                {
                    lblError.Text = "Usuario dado de alta correctamente";
                    lblError.ForeColor = Color.Green;
                }

            }
        }

        private Boolean guardarUsuario(byte[] passCifrada)
        {
            Boolean todoOk = true;
            SqlConnection conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            try
            {
                WSPruebas.Pruebas pruebas = new WSPruebas.Pruebas();
                pruebas.AuthHeaderValue = new WSPruebas.AuthHeader();
                pruebas.AuthHeaderValue.pass = "pass";
                pruebas.AuthHeaderValue.usuario = "pepe";

                todoOk= pruebas.AltaUsuario(passCifrada, txtnombre.Text, mtxtEMail.Text, cmbPaises.SelectedValue);

            }
            catch (Exception ex)
            {
                lblError.Text = "Se produjo un error guardando el usuario." + ex.Message;
                lblError.ForeColor = Color.Red;
                todoOk = false;
            }
         

            return todoOk;
        }

        private byte[] cifrar(string cadenaAcifrar)
        {
            String miclave = ConfigurationManager.AppSettings["clave"];
            byte[] claveCifrado = System.Text.Encoding.ASCII.GetBytes(miclave);
            Cifrado c = new Cifrado(claveCifrado);
            byte[] b = c.cifrar(cadenaAcifrar);
            return b;
        }



    }
}



51.Servicios Web.Autenticación Básica. Curso de C# con Visual Studio 2017.

51-.Servicios Web.Autenticación básica

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. Puede ser que no queramos que los métodos de nuestro web service esten accesibles para todo el mundo que conozca la url del servicio al que se realiza la petición. En este caso podemos poner algún mecanismo para validar que quien accede a nuestro web service, es alguien en el que confiamos.

- Uno de las formas de validación más antiguas son las cabeceras SOAP. Los nuevos servicios web suelen hacerse con WCF. Pero en esta entrada del blog vamos a ver un ejemplo de la antigua autenticación SOAP. En el video muestro un ejemplo sobre como poder utilizar las cabeceresa soap en el web service y como realizar la llamada desde un cliente.


- En primer lugar añadimos la cabecera  [SoapHeader("Authentication")] al método que queramos securizar:

        [WebMethod]
        [SoapHeader("Authentication")]

        public List<Pedidos> DamePedidos()
        { ...}

- En segundo lugar nos creamos una clase que herede de  SoapHeader, como por ejemplo esta:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;

namespace ServicioWebPruebas
{
    public class AuthHeader : SoapHeader
    {
      
            public string usuario;
            public string pass;    
       
    }
}

- En tercer lugar implementamos la validación en el método que queramos securizar:

        public AuthHeader Authentication;

        [WebMethod]
        [SoapHeader("Authentication")]
        public List<Pedidos> DamePedidos()
        {

            List<Pedidos> listaPedidos = new List<Pedidos>();
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            if (Authentication.usuario == ConfigurationManager.AppSettings["Usuario"].ToString() && Authentication.pass == ConfigurationManager.AppSettings["Pass"].ToString())
              
            {
            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "[DamePedidos]";
                Com.CommandType = CommandType.StoredProcedure;
                SqlDataReader reader = Com.ExecuteReader();

                while (reader.Read())
                {
                    Pedidos pedAuc = new Pedidos();

                    pedAuc.NombreUsuario = reader["Nombre"].ToString();
                    pedAuc.FechaPedido1 = Convert.ToDateTime(reader["FechaPedido"].ToString());
                    listaPedidos.Add(pedAuc);
                }


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

            return listaPedidos;
        }

     
    }


- Una vez tenemos echo esto, será necesario para poder consumir el método del web service pasar un usuario y una password.Por ejemplo la llamada a este método desde un cliente sería:

            WSPruebas.Pruebas pruebas = new WSPruebas.Pruebas();
            pruebas.AuthHeaderValue = new WSPruebas.AuthHeader();
            pruebas.AuthHeaderValue.pass = "pass";
            pruebas.AuthHeaderValue.usuario = "pepe";

            WSPruebas.Pedidos[] x = pruebas.DamePedidos();




50.Servicios Web.Consumiendo un web service. Curso de C# con Visual Studio 2017.

50-.Servicios Web.Consumiendo un web service

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con  los servicios web. En ocasiones, puede ser que necesitemos cierta funcionalidad  que nos permitan intercomunicar sistemas o obtener datos de otros sistemas.Los servicios web proporcionan mecanismos de comunicación estándares entre diferentes aplicaciones, que interactúan entre sí para presentar información dinámica al usuario.

- En el ejemplo que muestro en el video la arquitectura que se pretende simular es similar a la siguiente con la salvedad que en mi caso lo tengo todo montado en mi máquina local:



- Con esta arquitectura el cliente se comunica con el servidor web que tiene alojada la página que el usuario está consumiendo. La página llama a un web service para obtener los datos necesarios(en nuestro ejemplo una lista de pedidos) y es el web service el que se comunica con la base de datos para obtener los datos necesarios que el usuario finalmente visualiza en su navegador.
Os dejo el video con el ejmplo:


- De esta forma podemos tener la bbdd en una máquina, el web service en otra y la página que ve el usuarioen otra, con lo que conseguimos interoperabilidad entre aplicaciones de software independientemente de sus propiedades o de las plataformas sobre las que se instalen.

- Os dejo por aqui también la clase que llama al web service una vez tenemos agregada la referencia en nuestro proyecto:

  • Código aspx:

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

<!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:Label runat="server" ID="lblPedidos"></asp:Label>
        </div>
    </form>
</body>
</html>

  •  Código cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class PaginaParaLlamarWS : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            WSPruebas.Pruebas pruebas = new WSPruebas.Pruebas();
            WSPruebas.Pedidos[] x = pruebas.DamePedidos();

            foreach(WSPruebas.Pedidos p in x)
            {
                lblPedidos.Text += p.NombreUsuario + " " + p.FechaPedido1.ToShortDateString() +"<br>";
            }
           
        }
    }
}

49.Servicios Web.Introducción. Curso de C# con Visual Studio 2017.

49-.Servicios Web.Introducción

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a empezar a conocer los servicios web. En ocasiones, puede ser que necesitemos cierta funcionalidad  que nos permitan intercomunicar sistemas o obtener datos de otros sistemas.Los servicios web proporcionan mecanismos de comunicación estándares entre diferentes aplicaciones, que interactúan entre sí para presentar información dinámica al usuario. Los servicios web proporcionan interoperabilidad y extensibilidad entre estas aplicaciones, y que al mismo tiempo sea posible su combinación para realizar operaciones complejas.

- En el video os muestro como crear un proyecto del tipo web service, como agregarle de una manera sencilla la capacidad  de obtener  datos de una base de datos SQL, y de esta manera tener preparado un método del web service  para ser consumido posteriormente por un cliente.





Os dejo un enlace a con más información:https://msdn.microsoft.com/es-es/library/t745kdsh(v=vs.100).aspx

También os dejo el código del web service:

  • Clase Pedidos.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ServicioWebPruebas
{
    public class Pedidos
    {
        DateTime FechaPedido;
        String nombreUsuario;
        public DateTime FechaPedido1 { get => FechaPedido; set => FechaPedido = value; }
        public string NombreUsuario { get => nombreUsuario; set => nombreUsuario = value; }
    }
}

  • Clase Pruebas.asmx
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace ServicioWebPruebas
{
    /// <summary>
    /// Descripción breve de Pruebas
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
    // [System.Web.Script.Services.ScriptService]
    public class Pruebas : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hola a todos";
        }

        [WebMethod]
        public List<Pedidos> DamePedidos()
        {
            SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["EmpresaConnectionString"].ConnectionString);
            List<Pedidos> listaPedidos = new List<Pedidos>();
            try
            {
                Con.Open();
                SqlCommand Com = Con.CreateCommand();
                Com.CommandText = "[DamePedidos]";
                Com.CommandType = CommandType.StoredProcedure;
                SqlDataReader reader = Com.ExecuteReader();

                while (reader.Read())
                {
                    Pedidos pedAuc = new Pedidos();

                    pedAuc.NombreUsuario = reader["Nombre"].ToString();
                    pedAuc.FechaPedido1 = Convert.ToDateTime(reader["FechaPedido"].ToString());
                    listaPedidos.Add(pedAuc);
                }
             

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

            return listaPedidos;
        }
    }
}

48.Servicios Windows.Depurando un servicio. Curso de C# con Visual Studio 2017.

48-.Servicios Windows. Depurando el servicio

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con los servicios windows. Hemos implementado una mínima lógica en el servicio windows para probar que una vez instalado en nuestra máquina ejecuta el código y escribe en un fichero en disco cada x segundos.

-Los servicios windows son una buena solución para ejecutar tareas que no requieran interfaz gráfica, ni ninguna interacción con los usuarios y  que tengan como objetivo realizar tareas en un segundo plano.Pero tienen el problema que no se se depurar dando al botón de "Play" del proyecto, aunque  si se puede depurar un servicio de Windows si se inicia el servicio y se asocia el depurador al proceso del servicio. En el video podéis ver como lo asocio:

Como resumen de estos tres capítulos del curso donde hemos trabajado con un servicio windows os dejo lo más importante:

  • Al compilar un servicio windows se genera un ejecutable .exe.
  • Se puede instalar en un sistema windows con la herramienta InstallUtil.exe del framework de microsoft. 
  • Se puede depurar  después de instalarlo asociandolo al proceso correspondiente, desde Visual Studio.

Os dejo el código del ejemplo una vez corregido:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ServciosWindowsPrueba
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            var worker = new Thread(Iniciar);
            worker.Name = "Prueba";
            worker.IsBackground = false;
            worker.Start();
           
        }

        void Iniciar()
        {
            Log l = new Log();
            int milisegundos = 15000;
            try
            {
              
                while (true)
                {
                 
                    l.AddInformationEntry("TODO VA BIEN");
                }
            }
            catch (Exception ex)
            {
                l.AddErrorEntry("error" + ex.ToString());
            }
            finally
            {
                Thread.Sleep(milisegundos);
            }
        }

        protected override void OnStop()
        {

        }
    }
}

47.Servicios Windows.Implementando el servicio. Curso de C# con Visual Studio 2017.

47-.Servicios Windows. Implementando el servicio

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a continuar con los servicios windows. Vamos a implementar una mínima lógica en el servicio windows para probar que una vez instalado en nuestra máquina ejecuta el código de la misma manera que otras aplicaciones que hemos desarrollado aquí anteriormente, como por ejemplo las aplicaciones de consola.

-Los servicios windows son una buena solución para ejecutar tareas que no requieran interfaz gráfica, ni ninguna interacción con los usuarios y  que tengan como objetivo realizar tareas en un segundo plano.En nuestor ejemplo simplemente vamos a hacer que una vez arrancado el servcio  escriba en un  fichero en disco  cada x segundos.En el video podéis ver el ejemplo.

- En esta ocasión os dejo el código de la clase principal, que se inicia al arrancar el servicio.La parte del código que escribe en un fichero en disco os la dejo a vosotros. De todas formas en entradas anteriores del blog hay ejemplos.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ServciosWindowsPrueba
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            var worker = new Thread(Iniciar);
            worker.Name = "Prueba";
            worker.IsBackground = false;
            worker.Start();
           
        }

        void Iniciar()
        {
            Log l = new Log();
            int milisegundos = 15000;
            try
            {
              
                while (true)
                {
                 
                    l.AddInformationEntry("TODO VA BIEN");
                }
            }
            catch (Exception ex)
            {
                l.AddErrorEntry("error" + ex.ToString());
            }
            finally
            {
                Thread.Sleep(milisegundos);
            }
        }

        protected override void OnStop()
        {

        }
    }
}



  • Os dejo además un par de enlaces a sites de Microsofto con más información sobre los servicios:
  1. https://docs.microsoft.com/es-es/dotnet/framework/windows-services/how-to-install-and-uninstall-services 
  2. https://docs.microsoft.com/es-es/dotnet/framework/windows-services/introduction-to-windows-service-applications

46.Servicios Windows.Introducción. Curso de C# con Visual Studio 2017.

46-.Servicios Windows. Introducción

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a empezar con los servicios windows. En ocasiones, puede ser que necesitemos cierta funcionalidad  que no necesite una interfaz gráfica y que este siempre corriendo en un segundo plano, para este caso los servicios windows puede ser una buena solucion.

- En el video os muestro como crear un proyecto del tipo windows service, como agregarle de una manera sencilla la capacidad para ser instalado en una máquina y como instalarlo desde línea de comandos con la herramienta installUtil.exe, que tenemos disponible en los diferentes frameworks de Microsoft.NET.


- Como habéis observado en el video una vez compilado el proyecto nos genera un fichero con extensión exe. Este fichero es el que debemos instalar mediante la herramienta installUtil.exe, siguiendo los siguientes pasos:

  1. Primero abrimos un cmd con permisos de administrador.
  2.  Una vez tenemos hecho esto nos vamos a la ruta donde esta la herramienta de instalación que nos proporciona el framework de .net, en nuestro caso esta aquí: 




3. Una vez estemos en la ruta donde esta la herramienta installUtil ejecutamos una sentencia similar a la siguiente para instalar el servicio en nuestra máquina:

  • installutil  ruta_ejecutable\nuestroproyecto.exe  

* Si queremos desinstalar el servicio basta ejecutar la misma senetecia pero añadiendo /u al final.


  • Os dejo además un par de enlaces a sites de Microsofto con más información sobre los servicios:
  1. https://docs.microsoft.com/es-es/dotnet/framework/windows-services/how-to-install-and-uninstall-services 
  2. https://docs.microsoft.com/es-es/dotnet/framework/windows-services/introduction-to-windows-service-applications 

45.Aplicaciones web.Controles ascx.Curso de C# con Visual Studio 2017.

45-.Aplicaciones web.Controles ascx

   - En este capítulo del curso de programación en c# con visual studio 2017,vamos a ver los controles de usuario. En ocasiones, puede ser que necesitemos cierta funcionalidad  que no está incluida en los controles que vienen por defecto incluidos en Visual Studio. En estos casos, podemos crear nuestros propios controles agregando a nuestro proyecto un objeto ascx.

- Un control de usuario es similar a una página Web  (archivo .aspx) e incluye una página de interfaz de usuario y código. El proceso de creación del control de usuario es muy similar al proceso de creación de una página ASP.NET, sólo que al final se agregan el formato y los controles secundarios necesarios.

- En el video os dejo un ejemplo sobre como crear un control ascx y como agregar a una página aspx:



 - Un control de usuario se diferencia de una página Web ASP.NET en los siguientes aspectos:

  • La extensión de nombre de archivo es .ascx.
  • Los controles de usuario no se pueden ejecutar como archivos independientes.
  • El control de usuario no contiene elementos html, body o form. Estos elementos deben estar en la página de alojamiento.
  • Más detalles en: https://msdn.microsoft.com/es-es/library/fb3w5b53(v=vs.100).aspx

- Os dejo también el código del ejemplo visto en el video:

  • Control ascx código cliente:  
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ControlPruebas.ascx.cs" Inherits="GestionVarios.ControlPruebas" %>
<div>
    <asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged"></asp:Calendar>
    <asp:TextBox ID="txtPruebas" runat="server" Width="233px"></asp:TextBox>

</div>

  • Control ascx código servidor:  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestionVarios
{
    public partial class ControlPruebas : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            txtPruebas.Text = Calendar1.SelectedDate.ToShortDateString();
        }
    }
}


  • Codigo de una de las página donde hemos agregado el control:
<%@ 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" %>

<%@ Register src="ControlPruebas.ascx" tagname="ControlPruebas" tagprefix="uc1" %>


<!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" Visible="false">
                  <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>
   
        <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>

          <uc1:ControlPruebas ID="ControlPruebas1" runat="server" />
    </form>

  
</body>
</html>








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>






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