El Libro del Día: 2014-07-24
Titulo: Windows Phone 8 In Action
Autor: Timothy Binkley-Jones, Adam Benoit, Massimo Perga, Michael Sync
Editorial: Manning
Nro Paginas: 497
Capítulos:
PART 1 INTRODUCING WINDOWS PHONE
1 A new phone, a new operating system
2 Creating your first Windows Phone application
PART 2 CORE WINDOWS PHONE
3 Fast application switching and resume
4 Scheduled actions
5 Launching tasks and choosers
6 Contacts and calendars
7 Storing data
8 Working with the camera
9 Integrating with the Photos and Music + Videos Hubs
10 Using sensors
11 Network communication with push notifications
12 Using the Speech API
PART 3 XAML FOR WINDOWS PHONE
13 ApplicationBar and context menus
14 Panorama and pivot controls
15 Building a media player
16 Using Maps 369
17 Building HTML applications
18 Releasing and monetizing apps
Descarga:
WindowsPhone_8_InAction
Blog de Luis Dueñas dedicado a la difusión del Desarrollo en Microsoft .NET, Visual Studio, WinForms, WebForms, MVC, ASP .NET, jQuery, AJAX, HTML5, JavaScript, Móviles, etc. Encontrarás Libros, Demos, Artículos Técnicos, Entrenamiento.
jueves, 24 de julio de 2014
El Libro del Día: Windows Phone 8 In Action
Etiquetas:
Adam Benoit,
Calendars,
Camera,
Contacts,
Libros,
Manning,
Massimo Perga,
Michael Sync,
Music,
Notifications,
Photos,
Scheduled,
Sensors,
Speech API,
Tasks,
Timothy Binkley-Jones,
Videos,
Windows Phone 8
miércoles, 23 de julio de 2014
El Libro del Día: Exam Ref 70-484
El Libro del Día: 2014-07-23
Titulo: Exam Ref 70-484 Essentials of Developing Windows Store Apps Using C#
Autor: Indrajit Chakrabarty
Editorial: Microsoft
Nro Paginas: 446
Capítulos:
Chapter 1 Design Windows Store apps
Chapter 2 Develop Windows Store apps
Chapter 3 Create the user interface
Chapter 4 Program the user interaction
Chapter 5 Manage security and data
Descarga:
ExamRef_70484_Essentials_Developing_WindowsStore_C#
Titulo: Exam Ref 70-484 Essentials of Developing Windows Store Apps Using C#
Autor: Indrajit Chakrabarty
Editorial: Microsoft
Nro Paginas: 446
Capítulos:
Chapter 1 Design Windows Store apps
Chapter 2 Develop Windows Store apps
Chapter 3 Create the user interface
Chapter 4 Program the user interaction
Chapter 5 Manage security and data
Descarga:
ExamRef_70484_Essentials_Developing_WindowsStore_C#
martes, 22 de julio de 2014
El Libro del Día: Microsoft SQL Server 2012 Internals
El Libro del Día: 2014-07-22
Titulo: Microsoft SQL Server 2012 Internals
Autor: Kalen Delaney, Bob Beauchemin, Conor Cunningham,
Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal
Editorial: Microsoft
Nro Paginas: 983
Capítulos:
Chapter 1 SQL Server 2012 architecture and configuration
Chapter 2 The SQLOS
Chapter 3 Databases and database files
Chapter 4 Special databases
Chapter 5 Logging and recovery
Chapter 6 Table storage
Chapter 7 Indexes: internals and management
Chapter 8 Special storage
Chapter 9 Special indexes
Chapter 10 Query execution
Chapter 11 The Query Optimizer
Chapter 12 Plan caching and recompilation
Chapter 13 Transactions and concurrency
Chapter 14 DBCC internals
Descarga:
Microsoft_SQL_Server_2012_Internals
Titulo: Microsoft SQL Server 2012 Internals
Autor: Kalen Delaney, Bob Beauchemin, Conor Cunningham,
Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal
Editorial: Microsoft
Nro Paginas: 983
Capítulos:
Chapter 1 SQL Server 2012 architecture and configuration
Chapter 2 The SQLOS
Chapter 3 Databases and database files
Chapter 4 Special databases
Chapter 5 Logging and recovery
Chapter 6 Table storage
Chapter 7 Indexes: internals and management
Chapter 8 Special storage
Chapter 9 Special indexes
Chapter 10 Query execution
Chapter 11 The Query Optimizer
Chapter 12 Plan caching and recompilation
Chapter 13 Transactions and concurrency
Chapter 14 DBCC internals
Descarga:
Microsoft_SQL_Server_2012_Internals
Etiquetas:
Architecture,
Caching,
Concurrency,
Configuration,
Databases,
DBCC,
Indexes,
Internals,
Kalen Delaney,
Libros,
Logging,
Microsoft,
Querys,
Recompilation,
Recovery,
SQL Server,
SQLOS,
Storage,
Transactions
lunes, 21 de julio de 2014
El Libro del Día: Start Here Build Windows 8 Apps with HTML5 and JavaScript
El Libro del Día: 2014-07-21
Titulo: Start Here Build Windows 8 Apps with HTML5 and JavaScript
Autor: Dino Esposito, Francesco Esposito
Editorial: Microsoft
Nro Paginas: 388
Capítulos:
Chapter 1 Using Visual Studio 2012 Express edition for Windows 8
Chapter 2 Making sense of HTML5
Chapter 3 Making sense of CSS
Chapter 4 Making sense of JavaScript
Chapter 5 First steps with Windows 8 development
Chapter 6 The user interface of Windows Store applications
Chapter 7 Navigating through multimedia content
Chapter 8 States of a Windows 8 application
Chapter 9 Integrating with the Windows 8 environment
Chapter 10 Adding persistent data to applications
Chapter 11 Working with remote data
Chapter 12 Accessing devices and sensors
Chapter 13 Adding Live tiles
Chapter 14 Publishing an application
Descarga:
StartHere_Build_Windows8_Apps_HTML5_JavaScript
Titulo: Start Here Build Windows 8 Apps with HTML5 and JavaScript
Autor: Dino Esposito, Francesco Esposito
Editorial: Microsoft
Nro Paginas: 388
Capítulos:
Chapter 1 Using Visual Studio 2012 Express edition for Windows 8
Chapter 2 Making sense of HTML5
Chapter 3 Making sense of CSS
Chapter 4 Making sense of JavaScript
Chapter 5 First steps with Windows 8 development
Chapter 6 The user interface of Windows Store applications
Chapter 7 Navigating through multimedia content
Chapter 8 States of a Windows 8 application
Chapter 9 Integrating with the Windows 8 environment
Chapter 10 Adding persistent data to applications
Chapter 11 Working with remote data
Chapter 12 Accessing devices and sensors
Chapter 13 Adding Live tiles
Chapter 14 Publishing an application
Descarga:
StartHere_Build_Windows8_Apps_HTML5_JavaScript
Etiquetas:
CSS,
Devices,
Dino Esposito,
Francesco Esposito,
HTML5,
Javascript,
Libros,
Live Tiles,
Microsoft,
Multimedia,
Persistent Data,
Publishing,
Remote Data,
Sensors,
Visual Studio,
Windows 8,
Windows Store
sábado, 19 de julio de 2014
El Libro del Día: Essential SharePoint 2013
El Libro del Día: 2014-07-19
Titulo: Essential SharePoint 2013 (3rd Edition)
Autor: Scott Jamison, Susan Hanley, Chris Bortlik
Editorial: Addison Wesley
Nro Paginas: 778
Capítulos:
Chapter 1 Your Reading Journey
Part I Planning
Chapter 2 Planning Your Solution Strategy
Chapter 3 Introducing the SharePoint 2013 Platform
Chapter 4 Planning for Business Governance
Chapter 5 Planning for Operational Governance
Chapter 6 Planning Your Information Architecture
Chapter 7 Planning Your Adoption Strategy
Chapter 8 Developing a Value Measurement Strategy
Chapter 9 Understanding Architecture Fundamentals
Chapter 10 Planning Your Upgrade
Chapter 11 Taking SharePoint to the Cloud
Chapter 12 Planning Security
Part II Optimizing
Chapter 13 Managing Enterprise Content
Chapter 14 Managing Web Content
Chapter 15 Planning for Social Computing
Chapter 16 Planning Enterprise Search
Chapter 17 Planning Business Solutions
Chapter 18 Planning for Business Intelligence
Chapter 19 Planning for Mobility
Chapter 20 Integrating Office Applications
Appendix Content You Can Reuse
Descarga:
Essential_SharePoint_2013
Titulo: Essential SharePoint 2013 (3rd Edition)
Autor: Scott Jamison, Susan Hanley, Chris Bortlik
Editorial: Addison Wesley
Nro Paginas: 778
Capítulos:
Chapter 1 Your Reading Journey
Part I Planning
Chapter 2 Planning Your Solution Strategy
Chapter 3 Introducing the SharePoint 2013 Platform
Chapter 4 Planning for Business Governance
Chapter 5 Planning for Operational Governance
Chapter 6 Planning Your Information Architecture
Chapter 7 Planning Your Adoption Strategy
Chapter 8 Developing a Value Measurement Strategy
Chapter 9 Understanding Architecture Fundamentals
Chapter 10 Planning Your Upgrade
Chapter 11 Taking SharePoint to the Cloud
Chapter 12 Planning Security
Part II Optimizing
Chapter 13 Managing Enterprise Content
Chapter 14 Managing Web Content
Chapter 15 Planning for Social Computing
Chapter 16 Planning Enterprise Search
Chapter 17 Planning Business Solutions
Chapter 18 Planning for Business Intelligence
Chapter 19 Planning for Mobility
Chapter 20 Integrating Office Applications
Appendix Content You Can Reuse
Descarga:
Essential_SharePoint_2013
Etiquetas:
Addison Wesley,
Business Intelligence,
Business Solutions,
Chris Bortlik,
Enterprise Content,
Enterprise Search,
Libros,
Mobility,
Scott Jamison,
SharePoint 2013,
Social Computing,
Susan Hanley,
Web Content
viernes, 18 de julio de 2014
El Libro del Día: MCPD Exam Ref 70-518
El Libro del Día: 2014-07-18
Titulo: MCPD Exam Ref 70-518 Windows Application NET Framework 4
Autor: Tony Northrup, Matthew A. Stoecker
Editorial: Microsoft
Nro Paginas: 337
Capítulos:
Chapter 1 Designing the Layers of a Solution
Chapter 2 Designing the Presentation Layer
Chapter 3 Designing the Data Access Layer
Chapter 4 Planning a Solution Deployment
Chapter 5 Designing for Stability and Maintenance
Descarga:
MCPD_Exam70518_WindowsApplication_NetFramework4
Titulo: MCPD Exam Ref 70-518 Windows Application NET Framework 4
Autor: Tony Northrup, Matthew A. Stoecker
Editorial: Microsoft
Nro Paginas: 337
Capítulos:
Chapter 1 Designing the Layers of a Solution
Chapter 2 Designing the Presentation Layer
Chapter 3 Designing the Data Access Layer
Chapter 4 Planning a Solution Deployment
Chapter 5 Designing for Stability and Maintenance
Descarga:
MCPD_Exam70518_WindowsApplication_NetFramework4
Etiquetas:
Certification,
Data Access,
Deployment,
Exam 70-518,
Exam Ref,
Libros,
Maintenance,
Matthew A. Stoecker,
MCPD,
Microsoft,
NET Framework 4,
Presentation Layer,
Stability,
Tony Northrup,
Windows Application,
WinForms
jueves, 17 de julio de 2014
El Demo del Día: Plantilla de Datos (Data Template) en el Control Web Repeater
Plantilla de Datos (Data Template) en el Control Web Repeater
Este es el primer Demo que estoy publicando sobre ASP .NET y trataremos de como crear Plantillas de Datos (Data Template) usando el Control Web Repeater.
Requerimientos
Se desea crear una Aplicación Web que permita listar los datos de los empleados que cumpla con lo siguiente:
- Presente en columnas la información del código, apellido, nombre y fecha de nacimiento.
- Muestre una columna con la foto del empleado la cual se encuentra en un carpeta "Empleados" donde el nombre del archivo esta compuesto por el código del empleado y la extensión jpg. Para los archivos que no se encuentren se usará el archivo No.jpg.
- La cabecera de la grilla debe estar combinada de tal forma que muestre un titulo que diga Nombre Completo que agrupe al Apellido y al nombre del empleado.
- Las filas de datos deben tener un estilo con fondo blanco y color de letra azul, pero al pasar el mouse el estilo de la fila debe tener fondo amarillo y color de letra rojo.
Nota: El principal requerimiento es que la pagina sea rápida y que arroje la menor cantidad de HTML en el cliente.
Solución
Usaremos el control Repeater y le quitaremos el ViewState (EnableViewState=false) y usaremos estilos para las filas de datos con lo cual logramos disminuir el HTML arrojado al cliente (Browser).
Ademas usando Plantilla de Datos podemos dar la apariencia que deseemos a la consulta, en este caso para combinar celdas en la cabecera.
Nota: La mayoría de programadores de ASP .NET solo consideran como alternativa usar el GridView y programar en el evento RowDataBound la combinación de las celdas y otras funcionalidades.
Crear el Procedimiento Almacenado en la Base de Datos de SQL Server
Usaremos la tabla Empleados (Employees) de Northwind:
Create Procedure [dbo].[uspEmployeesListar]
As
Select EmployeeID,LastName,FirstName,
IsNull(BirthDate,'1/1/1900') As BirthDate
From Employees Order By 1
Crear una Librería de Clases con las Entidades del Negocio
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.EntidadesNegocio" y modificar el código de la clase como sigue:
using System;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beEmpleado
{
public int IdEmpleado { get; set; }
public string Apellido { get; set; }
public string Nombre { get; set; }
public string NombreCompleto
{
get
{
return (String.Format("{0} {1}",Nombre,Apellido));
}
}
public DateTime FechaNacimiento { get; set; }
}
}
Crear una Librería de Acceso a Datos
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.AccesoDatos" y modificar el código de la clase como sigue:
using System;
using System.Data; //CommandType
using System.Data.SqlClient; //SqlConnection, SqlCommand, SqlDataReader
using System.Collections.Generic; //List
using Northwind.Librerias.EntidadesNegocio; //beEmpleado
namespace Northwind.Librerias.AccesoDatos
{
public class daEmpleado
{
public List<beEmpleado> listar(SqlConnection con)
{
List<beEmpleado> lbeEmpleado = null;
SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
if (drd != null)
{
lbeEmpleado = new List<beEmpleado>();
int posIdEmpleado = drd.GetOrdinal("EmployeeID");
int posApellido = drd.GetOrdinal("LastName");
int posNombre = drd.GetOrdinal("FirstName");
int posFechaNacimiento = drd.GetOrdinal("BirthDate");
beEmpleado obeEmpleado;
while (drd.Read())
{
obeEmpleado = new beEmpleado();
obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
obeEmpleado.Apellido = drd.GetString(posApellido);
obeEmpleado.Nombre = drd.GetString(posNombre);
obeEmpleado.FechaNacimiento = drd.GetDateTime(posFechaNacimiento);
lbeEmpleado.Add(obeEmpleado);
}
drd.Close();
}
return (lbeEmpleado);
}
}
}
Nota: Hay que hacer una referencia a la Librería de Entidades del Negocio.
Crear una Librería de Reglas del Negocio
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.ReglasNegocio" y modificar el código de la clase como sigue:
using System;
using System.Configuration; //ConfigurationManager
namespace Northwind.Librerias.ReglasNegocio
{
public class brGeneral
{
//Propiedad
public string Conexion { get; set; }
//Constructor
public brGeneral()
{
Conexion = ConfigurationManager.ConnectionStrings["conNW"].ConnectionString;
}
}
}
Agregar otra clase llamada: "brEmpleado" y escribir el siguiente código:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.AccesoDatos;
namespace Northwind.Librerias.ReglasNegocio
{
public class brEmpleado:brGeneral //Herencia
{
public List<beEmpleado> listar()
{
List<beEmpleado> lbeEmpleado = null;
using (SqlConnection con = new SqlConnection(Conexion))
{
try
{
con.Open();
daEmpleado odaEmpleado = new daEmpleado();
lbeEmpleado = odaEmpleado.listar(con);
}
catch (SqlException ex)
{
//Capturar el error y grabar un Log
}
} //con.Close(); con.Dispose(); con = null;
return (lbeEmpleado);
}
}
}
Nota: La clase "brEmpleado" hereda de la clase "brGeneral" la cadena de conexión para no pasarla como parámetro en cada método de la clase o en el constructor de cada clase se hace una sola vez.
Crear una Librería de Código de Usuario para Web
Crear un proyecto de tipo Librería de Clases en C# llamado: "General.Librerias.CodigoUsuarioWeb" y modificar el código de la clase como sigue:
using System;
using System.Collections.Generic;
using System.IO; //File
using System.Web; //HttpContext
namespace General.Librerias.CodigoUsuarioWeb
{
public class Imagen
{
public static string obtenerUrl(int id, string carpeta)
{
string archivo = HttpContext.Current.Server.MapPath
(String.Format("../Imagenes/{0}/{1}.jpg", carpeta, id));
string url = String.Format("../Imagenes/{0}/{1}.jpg", carpeta, id);
if (!File.Exists(archivo)) url = String.Format("../Imagenes/{0}/No.jpg", carpeta);
return (url);
}
}
}
Nota: Como esta librería va a ser usada por paginas web hay que hacer referencia a: "System.Web"
Crear la Aplicación Web en ASP .NET Web Form
Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "Demo11" y crear las siguientes carpetas:
- Estilos: Para el archivo de hoja de estilo (CSS).
- Imagenes. Dentro crear otra carpeta llamada "Empleados" y adjuntar los archivos con las fotos de los empleados: 1.jpg, 2.jpg, 3.jpg, ... y No.jpg.
- Paginas: Para contener la pagina de lista de empleados.
Crear el Archivo de Hoja de Estilo (CSS)
Seleccionar la carpeta "Estilos" y agregar un archivo de hoja de estilos con el nombre de: "ACME.css" y modificar el código como sigue:
body {
background-color:aqua;
}
.Titulo {
background-color:black;
color:white;
text-transform:uppercase;
font-size:xx-large;
font-weight:bold;
}
.Subtitulo {
background-color:white;
color:blue;
text-transform:capitalize;
font-size:x-large;
font-weight:bold;
}
.MarcarFila tr {
background-color: white;
color: blue;
cursor:default;
font-weight:normal;
}
.MarcarFila tr:hover {
background-color: yellow;
color: red;
cursor:pointer;
font-weight:bold;
}
Crear la Pagina ASP .NET como un Formulario Web Form
Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "ListaEmpleados.aspx", para empezar a diseñar la pagina hay que hacer referencia a las Librerías de Negocio (que copia todas sus dependencias) y la Librería de Código de Usuario Web.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListaEmpleados.aspx.cs" Inherits="Paginas_ListaEmpleados" %>
<%@ Import Namespace="Northwind.Librerias.EntidadesNegocio" %>
<%@ Import Namespace="General.Librerias.CodigoUsuarioWeb" %>
<!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>
<link href="../Estilos/ACME.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width:100%">
<tr>
<td class="Titulo">Plantilla y estilos en el Control Repeater</td>
</tr>
<tr>
<td class="Subtitulo">Lista de Empleados</td>
</tr>
<tr>
<td>
<asp:Repeater ID="rpEmpleado" runat="server" EnableViewState="False">
<HeaderTemplate>
<table class="MarcarFila">
<tr style="text-align:center;background-color:blue;color:white">
<td rowspan="2" style="width:100px">Código</td>
<td colspan="2" style="width:300px">Nombre Completo</td>
<td rowspan="2" style="width:100px">Fecha Nac</td>
<td rowspan="2" style="width:150px">Foto</td>
</tr>
<tr style="text-align:center;background-color:blue;color:white">
<td style="width:150px">Apellido</td>
<td style="width:150px">Nombre</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%#((beEmpleado)Container.DataItem).IdEmpleado%>
</td>
<td>
<%#((beEmpleado)Container.DataItem).Apellido%>
</td>
<td>
<%#((beEmpleado)Container.DataItem).Nombre%>
</td>
<td>
<%#((beEmpleado)Container.DataItem).FechaNacimiento.
ToShortDateString()%>
</td>
<td>
<img src='<%#Imagen.obtenerUrl(((beEmpleado)Container.DataItem)
.IdEmpleado,"Empleados")%>' width="120" height="80" alt="Foto"
title="<%#((beEmpleado)Container.DataItem).NombreCompleto%>"/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Nota: El código que se encuentre entre los marcadores: "<%%>" se ejecuta en el servidor, si tiene un # indica que es enlace de datos (solo se usa dentro de un control enlazado a datos). La instrucción Container.DataItem obtiene una fila enlazada a datos, en este caso un Empleado ya que el Repeater estará enlazado a una Lista de Objetos Empleados.
El diseño de la pagina se mostrará como en la siguiente figura:
Escribir el siguiente código C# en la página:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Northwind.Librerias.EntidadesNegocio; //beEmpleado
using Northwind.Librerias.ReglasNegocio; //brEmpleado
public partial class Paginas_ListaEmpleados : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
brEmpleado obrEmpleado = new brEmpleado();
List<beEmpleado> lbeEmpleado = obrEmpleado.listar();
rpEmpleado.DataSource = lbeEmpleado;
rpEmpleado.DataBind();
}
}
}
Modificar el Archivo Web.Config para especificar la cadena de conexión a Northwind
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="conNW" providerName="SQLServer" connectionString="uid=UsuarioNW;pwd=123456;
data source=DSOFT\Sqlexpress; database=Northwind"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
</configuration>
Guardar el Sitio Web, clic derecho a la Pagina "ListaEmpleados.aspx" y seleccionar "Ver en el explorador".
Pasar el mouse por cada fila y notar como cambia el estilo de la fila seleccionada debido al estilo "MarcarFila" aplicado a la tabla que esta dentro del control Repeater.
Clic derecho a la página y seleccionar "Ver código fuente de la pagina", notar que el HTML generado desde el servidor es mínimo ya que se le quito el ViewState al control Repeater y se uso Hojas de Estilo para reducir el formato en cada fila.
Comentario Final
Es muy útil el uso de Plantillas de Datos para personalizar la apariencia de los controles Web en ASP .NET, además es necesario entender que debemos enviar la menor cantidad de HTML al navegador para que se cargue mas rápido la página, en este caso lo logramos configurando el ViewState y usando CSS.
En los siguientes demos, estaremos viendo mas el tema de Plantillas de Datos, Hojas de Estilos y Controles Enlazados a Datos en ASP .NET.
Descarga:
Demo11_Plantilla_Repeater
Este es el primer Demo que estoy publicando sobre ASP .NET y trataremos de como crear Plantillas de Datos (Data Template) usando el Control Web Repeater.
Requerimientos
Se desea crear una Aplicación Web que permita listar los datos de los empleados que cumpla con lo siguiente:
- Presente en columnas la información del código, apellido, nombre y fecha de nacimiento.
- Muestre una columna con la foto del empleado la cual se encuentra en un carpeta "Empleados" donde el nombre del archivo esta compuesto por el código del empleado y la extensión jpg. Para los archivos que no se encuentren se usará el archivo No.jpg.
- La cabecera de la grilla debe estar combinada de tal forma que muestre un titulo que diga Nombre Completo que agrupe al Apellido y al nombre del empleado.
- Las filas de datos deben tener un estilo con fondo blanco y color de letra azul, pero al pasar el mouse el estilo de la fila debe tener fondo amarillo y color de letra rojo.
Nota: El principal requerimiento es que la pagina sea rápida y que arroje la menor cantidad de HTML en el cliente.
Solución
Usaremos el control Repeater y le quitaremos el ViewState (EnableViewState=false) y usaremos estilos para las filas de datos con lo cual logramos disminuir el HTML arrojado al cliente (Browser).
Ademas usando Plantilla de Datos podemos dar la apariencia que deseemos a la consulta, en este caso para combinar celdas en la cabecera.
Nota: La mayoría de programadores de ASP .NET solo consideran como alternativa usar el GridView y programar en el evento RowDataBound la combinación de las celdas y otras funcionalidades.
Crear el Procedimiento Almacenado en la Base de Datos de SQL Server
Usaremos la tabla Empleados (Employees) de Northwind:
Create Procedure [dbo].[uspEmployeesListar]
As
Select EmployeeID,LastName,FirstName,
IsNull(BirthDate,'1/1/1900') As BirthDate
From Employees Order By 1
Crear una Librería de Clases con las Entidades del Negocio
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.EntidadesNegocio" y modificar el código de la clase como sigue:
using System;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beEmpleado
{
public int IdEmpleado { get; set; }
public string Apellido { get; set; }
public string Nombre { get; set; }
public string NombreCompleto
{
get
{
return (String.Format("{0} {1}",Nombre,Apellido));
}
}
public DateTime FechaNacimiento { get; set; }
}
}
Crear una Librería de Acceso a Datos
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.AccesoDatos" y modificar el código de la clase como sigue:
using System.Data; //CommandType
using System.Data.SqlClient; //SqlConnection, SqlCommand, SqlDataReader
using System.Collections.Generic; //List
using Northwind.Librerias.EntidadesNegocio; //beEmpleado
namespace Northwind.Librerias.AccesoDatos
{
public class daEmpleado
{
public List<beEmpleado> listar(SqlConnection con)
{
List<beEmpleado> lbeEmpleado = null;
SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
if (drd != null)
{
lbeEmpleado = new List<beEmpleado>();
int posIdEmpleado = drd.GetOrdinal("EmployeeID");
int posApellido = drd.GetOrdinal("LastName");
int posNombre = drd.GetOrdinal("FirstName");
int posFechaNacimiento = drd.GetOrdinal("BirthDate");
beEmpleado obeEmpleado;
while (drd.Read())
{
obeEmpleado = new beEmpleado();
obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
obeEmpleado.Apellido = drd.GetString(posApellido);
obeEmpleado.Nombre = drd.GetString(posNombre);
obeEmpleado.FechaNacimiento = drd.GetDateTime(posFechaNacimiento);
lbeEmpleado.Add(obeEmpleado);
}
drd.Close();
}
return (lbeEmpleado);
}
}
}
Nota: Hay que hacer una referencia a la Librería de Entidades del Negocio.
Crear una Librería de Reglas del Negocio
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.ReglasNegocio" y modificar el código de la clase como sigue:
using System.Configuration; //ConfigurationManager
namespace Northwind.Librerias.ReglasNegocio
{
public class brGeneral
{
//Propiedad
public string Conexion { get; set; }
//Constructor
public brGeneral()
{
Conexion = ConfigurationManager.ConnectionStrings["conNW"].ConnectionString;
}
}
}
Nota: Hay que hacer una referencia a la Librería de Entidades del Negocio, a la Librería de Acceso a Datos y a System.Configuration.
Agregar otra clase llamada: "brEmpleado" y escribir el siguiente código:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.AccesoDatos;
namespace Northwind.Librerias.ReglasNegocio
{
public class brEmpleado:brGeneral //Herencia
{
public List<beEmpleado> listar()
{
List<beEmpleado> lbeEmpleado = null;
using (SqlConnection con = new SqlConnection(Conexion))
{
try
{
con.Open();
daEmpleado odaEmpleado = new daEmpleado();
lbeEmpleado = odaEmpleado.listar(con);
}
catch (SqlException ex)
{
//Capturar el error y grabar un Log
}
} //con.Close(); con.Dispose(); con = null;
return (lbeEmpleado);
}
}
}
Crear una Librería de Código de Usuario para Web
Crear un proyecto de tipo Librería de Clases en C# llamado: "General.Librerias.CodigoUsuarioWeb" y modificar el código de la clase como sigue:
using System;
using System.Collections.Generic;
using System.IO; //File
using System.Web; //HttpContext
namespace General.Librerias.CodigoUsuarioWeb
{
public class Imagen
{
public static string obtenerUrl(int id, string carpeta)
{
string archivo = HttpContext.Current.Server.MapPath
(String.Format("../Imagenes/{0}/{1}.jpg", carpeta, id));
string url = String.Format("../Imagenes/{0}/{1}.jpg", carpeta, id);
if (!File.Exists(archivo)) url = String.Format("../Imagenes/{0}/No.jpg", carpeta);
return (url);
}
}
}
Crear la Aplicación Web en ASP .NET Web Form
Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "Demo11" y crear las siguientes carpetas:
- Estilos: Para el archivo de hoja de estilo (CSS).
- Imagenes. Dentro crear otra carpeta llamada "Empleados" y adjuntar los archivos con las fotos de los empleados: 1.jpg, 2.jpg, 3.jpg, ... y No.jpg.
- Paginas: Para contener la pagina de lista de empleados.
Crear el Archivo de Hoja de Estilo (CSS)
Seleccionar la carpeta "Estilos" y agregar un archivo de hoja de estilos con el nombre de: "ACME.css" y modificar el código como sigue:
body {
background-color:aqua;
}
.Titulo {
background-color:black;
color:white;
text-transform:uppercase;
font-size:xx-large;
font-weight:bold;
}
.Subtitulo {
background-color:white;
color:blue;
text-transform:capitalize;
font-size:x-large;
font-weight:bold;
}
.MarcarFila tr {
background-color: white;
color: blue;
cursor:default;
font-weight:normal;
}
.MarcarFila tr:hover {
background-color: yellow;
color: red;
cursor:pointer;
font-weight:bold;
}
Crear la Pagina ASP .NET como un Formulario Web Form
Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "ListaEmpleados.aspx", para empezar a diseñar la pagina hay que hacer referencia a las Librerías de Negocio (que copia todas sus dependencias) y la Librería de Código de Usuario Web.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListaEmpleados.aspx.cs" Inherits="Paginas_ListaEmpleados" %>
<%@ Import Namespace="Northwind.Librerias.EntidadesNegocio" %>
<%@ Import Namespace="General.Librerias.CodigoUsuarioWeb" %>
<!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>
<link href="../Estilos/ACME.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width:100%">
<tr>
<td class="Titulo">Plantilla y estilos en el Control Repeater</td>
</tr>
<tr>
<td class="Subtitulo">Lista de Empleados</td>
</tr>
<tr>
<td>
<asp:Repeater ID="rpEmpleado" runat="server" EnableViewState="False">
<HeaderTemplate>
<table class="MarcarFila">
<tr style="text-align:center;background-color:blue;color:white">
<td rowspan="2" style="width:100px">Código</td>
<td colspan="2" style="width:300px">Nombre Completo</td>
<td rowspan="2" style="width:100px">Fecha Nac</td>
<td rowspan="2" style="width:150px">Foto</td>
</tr>
<tr style="text-align:center;background-color:blue;color:white">
<td style="width:150px">Apellido</td>
<td style="width:150px">Nombre</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%#((beEmpleado)Container.DataItem).IdEmpleado%>
</td>
<td>
<%#((beEmpleado)Container.DataItem).Apellido%>
</td>
<td>
<%#((beEmpleado)Container.DataItem).Nombre%>
</td>
<td>
<%#((beEmpleado)Container.DataItem).FechaNacimiento.
ToShortDateString()%>
</td>
<td>
<img src='<%#Imagen.obtenerUrl(((beEmpleado)Container.DataItem)
.IdEmpleado,"Empleados")%>' width="120" height="80" alt="Foto"
title="<%#((beEmpleado)Container.DataItem).NombreCompleto%>"/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
El diseño de la pagina se mostrará como en la siguiente figura:
Escribir el siguiente código C# en la página:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Northwind.Librerias.EntidadesNegocio; //beEmpleado
using Northwind.Librerias.ReglasNegocio; //brEmpleado
public partial class Paginas_ListaEmpleados : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
brEmpleado obrEmpleado = new brEmpleado();
List<beEmpleado> lbeEmpleado = obrEmpleado.listar();
rpEmpleado.DataSource = lbeEmpleado;
rpEmpleado.DataBind();
}
}
}
Modificar el Archivo Web.Config para especificar la cadena de conexión a Northwind
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="conNW" providerName="SQLServer" connectionString="uid=UsuarioNW;pwd=123456;
data source=DSOFT\Sqlexpress; database=Northwind"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
</configuration>
Probar la Pagina Web
Guardar el Sitio Web, clic derecho a la Pagina "ListaEmpleados.aspx" y seleccionar "Ver en el explorador".
Pasar el mouse por cada fila y notar como cambia el estilo de la fila seleccionada debido al estilo "MarcarFila" aplicado a la tabla que esta dentro del control Repeater.
Clic derecho a la página y seleccionar "Ver código fuente de la pagina", notar que el HTML generado desde el servidor es mínimo ya que se le quito el ViewState al control Repeater y se uso Hojas de Estilo para reducir el formato en cada fila.
Comentario Final
Es muy útil el uso de Plantillas de Datos para personalizar la apariencia de los controles Web en ASP .NET, además es necesario entender que debemos enviar la menor cantidad de HTML al navegador para que se cargue mas rápido la página, en este caso lo logramos configurando el ViewState y usando CSS.
En los siguientes demos, estaremos viendo mas el tema de Plantillas de Datos, Hojas de Estilos y Controles Enlazados a Datos en ASP .NET.
Descarga:
Demo11_Plantilla_Repeater
Etiquetas:
ASP .NET,
C#,
CSS,
Data Templates,
Demos,
Lduenas,
Librerías,
Plantilla de Datos,
Repeater,
Sitio Web,
ViewState,
Web Control,
WebForms
Suscribirse a:
Entradas (Atom)







