El Libro del Día: 2014-08-31
Titulo: Beginning WebGL for HTML5
Autor: Brian Danchilla
Editorial: Apress
Nro Paginas: 348
Capítulos:
Chapter 1: Setting the Scene
Chapter 2: Shaders 101
Chapter 3: Textures and Lighting
Chapter 4: Increasing Realism
Chapter 5: Physics
Chapter 6: Fractals, Height Maps, and Particle Systems
Chapter 7: Three.js Framework
Chapter 8: Productivity Tools
Chapter 9: Debugging and Performance
Chapter 10: Effects, Tips, and Tricks
Afterword: The Future of WebGL
Appendix A: Essential HTML5 and JavaScript
Appendix B: Graphics Refresher
Appendix C: WebGL Spec. Odds and Ends
Appendix D: Additional Resources
Descarga:
Beginning_WebGL_HTML5
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.
domingo, 31 de agosto de 2014
El Libro del Día: Beginning WebGL for HTML5
Etiquetas:
Apress,
Brian Danchilla,
Debugging,
Effects,
Fractals,
Graphics,
HTML5,
Javascript,
Libros,
Lighting,
Maps,
Particle Systems,
Performance,
Physics,
Shaders,
Textures,
Three.js,
Tips & Tricks,
Tools,
WebGL
sábado, 30 de agosto de 2014
El Libro del Día: Pro HTML5 and CSS3 Design Patterns
El Libro del Día: 2014-08-30
Titulo: Pro HTML5 and CSS3 Design Patterns
Autor: Michael Bowers, Dionysios Synodinos, Victor Sumner
Editorial: Apress
Nro Paginas: 514
Capítulos:
Chapter 1: Design Patterns: Making CSS Easy
Chapter 2: HTML Design Patterns
Chapter 3: CSS Selectors and Inheritance
Chapter 4: Box Models
Chapter 5: Box Model Extents
Chapter 6: Box Model Properties
Chapter 7: Positioning Models
Chapter 8: Positioning: Indented, Offset, and Aligned
Chapter 9: Positioning: Advanced
Chapter 10: Styling Text
Chapter 11: Spacing Content
Chapter 12: Aligning Content
Chapter 13: Blocks
Chapter 14: Images
Chapter 15: Tables
Chapter 16: Table Column Layout
Chapter 17: Layouts
Chapter 18: Drop Caps
Chapter 19: Callouts and Quotes
Chapter 20: Alerts
Descarga:
Pro_HTML5_CSS3_DesignPatterns
Titulo: Pro HTML5 and CSS3 Design Patterns
Autor: Michael Bowers, Dionysios Synodinos, Victor Sumner
Editorial: Apress
Nro Paginas: 514
Capítulos:
Chapter 1: Design Patterns: Making CSS Easy
Chapter 2: HTML Design Patterns
Chapter 3: CSS Selectors and Inheritance
Chapter 4: Box Models
Chapter 5: Box Model Extents
Chapter 6: Box Model Properties
Chapter 7: Positioning Models
Chapter 8: Positioning: Indented, Offset, and Aligned
Chapter 9: Positioning: Advanced
Chapter 10: Styling Text
Chapter 11: Spacing Content
Chapter 12: Aligning Content
Chapter 13: Blocks
Chapter 14: Images
Chapter 15: Tables
Chapter 16: Table Column Layout
Chapter 17: Layouts
Chapter 18: Drop Caps
Chapter 19: Callouts and Quotes
Chapter 20: Alerts
Descarga:
Pro_HTML5_CSS3_DesignPatterns
Etiquetas:
Alerts,
Apress,
Blocks,
Box Models,
Content,
CSS3,
Design Patterns,
Dionysios Synodinos,
Drop Caps,
HTML5,
Images,
Layouts,
Libros,
Michael Bowers,
Positioning,
Quotes,
Selectors,
Tables,
Text,
Victor Sumner
viernes, 29 de agosto de 2014
El Libro del Día: Pro CSS3 Animation
El Libro del Día: 2014-08-29
Titulo: Pro CSS3 Animation
Autor: Dudley Storey
Editorial: Apress
Nro Paginas: 168
Capítulos:
Chapter 1: CSS3 Fundamentals
Chapter 2: CSS3 Transforms and Transitions
Chapter 3: CSS3 Transitions for Images
Chapter 4: CSS3 Transitions for UI Elements
Chapter 5: CSS3 Keyframe Animations
Chapter 6: CSS3 Keyframe Animations for Web Content
Chapter 7: Integrating CSS3 Animations with SVG and Filters
Chapter 8: Integrating CSS3 Animation with Responsive Web Design and JavaScript
Chapter 9: CSS3 3D Transforms, Transitions, and Animations
Chapter 10: Tools, Technologies, and the Future of CSS Animation
Descarga:
Pro_CSS3_Animation
Titulo: Pro CSS3 Animation
Autor: Dudley Storey
Editorial: Apress
Nro Paginas: 168
Capítulos:
Chapter 1: CSS3 Fundamentals
Chapter 2: CSS3 Transforms and Transitions
Chapter 3: CSS3 Transitions for Images
Chapter 4: CSS3 Transitions for UI Elements
Chapter 5: CSS3 Keyframe Animations
Chapter 6: CSS3 Keyframe Animations for Web Content
Chapter 7: Integrating CSS3 Animations with SVG and Filters
Chapter 8: Integrating CSS3 Animation with Responsive Web Design and JavaScript
Chapter 9: CSS3 3D Transforms, Transitions, and Animations
Chapter 10: Tools, Technologies, and the Future of CSS Animation
Descarga:
Pro_CSS3_Animation
Etiquetas:
3D,
Animation,
Apress,
CSS3,
Dudley Storey,
Elements,
Filters,
Fundamentals,
Images,
Javascript,
Keyframes,
Libros,
Responsive Web Design,
SVG,
Technologies,
Tools,
Transforms,
Transitions,
Web Content
jueves, 28 de agosto de 2014
El Libro del Día: Beginning CSS3
El Libro del Día: 2014-08-28
Titulo: Beginning CSS3
Autor: David Powers
Editorial: Apress
Nro Paginas: 547
Capítulos:
Part I: CSS Basics
Chapter 1: Introducing CSS The Language of Web Design
Chapter 2: Using Basic Selectors
Chapter 3: Specifying Sizes, Colors, and Files
Part II: Working with Text
Chapter 4: Styling Text
Chapter 5: Embedding Web Fonts
Part III: CSS Page Layout
Chapter 6: Understanding the CSS Box Model
Chapter 7: Floating Elements for Layout
Chapter 8: Adding Backgrounds
Chapter 9: Adding Borders and Drop Shadows
Chapter 10: Styling Lists and Navigation Menus
Chapter 11: Positioning Elements Precisely
Chapter 12: Cross-Browser Layout Techniques
Part IV: Advanced CSS Techniques
Chapter 13: Using Advanced Selectors
Chapter 14: Styling Tables
Chapter 15: Generated Content
Chapter 16: Creating a Print Style Sheet
Chapter 17: Targeting Styles with Media Queries
Chapter 18: Using CSS3 Multi-Column Layout
Chapter 19: Creating Gradients Without Images
Chapter 20: 2D Transforms and Transitions
Chapter 21: Animating with CSS Keyframes
Chapter 22: What Next?
Descarga:
Beginning_CSS3
Titulo: Beginning CSS3
Autor: David Powers
Editorial: Apress
Nro Paginas: 547
Capítulos:
Part I: CSS Basics
Chapter 1: Introducing CSS The Language of Web Design
Chapter 2: Using Basic Selectors
Chapter 3: Specifying Sizes, Colors, and Files
Part II: Working with Text
Chapter 4: Styling Text
Chapter 5: Embedding Web Fonts
Part III: CSS Page Layout
Chapter 6: Understanding the CSS Box Model
Chapter 7: Floating Elements for Layout
Chapter 8: Adding Backgrounds
Chapter 9: Adding Borders and Drop Shadows
Chapter 10: Styling Lists and Navigation Menus
Chapter 11: Positioning Elements Precisely
Chapter 12: Cross-Browser Layout Techniques
Part IV: Advanced CSS Techniques
Chapter 13: Using Advanced Selectors
Chapter 14: Styling Tables
Chapter 15: Generated Content
Chapter 16: Creating a Print Style Sheet
Chapter 17: Targeting Styles with Media Queries
Chapter 18: Using CSS3 Multi-Column Layout
Chapter 19: Creating Gradients Without Images
Chapter 20: 2D Transforms and Transitions
Chapter 21: Animating with CSS Keyframes
Chapter 22: What Next?
Descarga:
Beginning_CSS3
Etiquetas:
Apress,
Backgrounds,
Borders,
Content,
CSS3,
David Powers,
Files,
Gradients,
Images,
Layouts,
Libros,
Lists,
Media Queries,
Menus,
Print,
Selectors,
Tables,
Transforms,
Transitions,
Web Fonts
miércoles, 27 de agosto de 2014
El Demo del Día: Descargar Archivos Asincronamente con WebClient
Descargar Archivos Asincronamente con WebClient
Requerimiento
Muchas veces los Administradores de Red bloquean las descargas de Archivos en los Navegadores y a veces necesitamos con urgencia bajar uno o mas archivos (de cualquier tipo). Si conocemos las direcciones de descarga podemos crear una aplicación que baje dichos archivos.
Características de la Aplicación Windows
1. Debe permitir bajar varios archivos desde URLs conocidas.
2. La descarga debe ser asíncrona sin bloquear el trabajo de la pantalla.
3. Se debe mostrar el progreso de la descarga en % y en forma gráfica con una barra de progreso.
Solución
Crearemos una aplicación Windows Forms en C# que use la clase WebClient del espacio de nombres "System.Net" que tiene un método asíncrono llamado "DownloadFileAsync". Además mostraremos el progreso en el evento: "DownloadProgressChanged" y actualizaremos el estado a Finalizado en el evento "DownloadFileCompleted".
Crear la Aplicación Windows Forms en C#
Crear un proyecto llamado "DescargarArchivos" en C# como una "Aplicación de Windows Forms".
Cambiar de nombre al formulario por: "frmDescarga", configurar su tamaño a 650 de ancho por 400 de alto, centrarlo y arrastrar 3 controles:
- Un TextBox llamado "txtURL"
- Un Button llamado "btnDescargar"
- Un ListView llamado "lvwProgreso"
El diseño del formulario debe quedar como se muestra a continuación:
Nota: El botón debe estar deshabilitado y solo se debe habilitar al ingresar una URL sobre el TextBox.
Escribir el siguiente código en el formulario "frmDescarga":
using System;
using System.Net;
using System.Net.Mime; //ContentDisposition
using System.IO;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
namespace DescargarArchivos
{
public partial class frmDescarga : Form
{
private string archivoFin="";
public frmDescarga()
{
InitializeComponent();
}
private void configurarListView(object sender, EventArgs e)
{
lvwProgreso.FullRowSelect = true;
lvwProgreso.GridLines = true;
lvwProgreso.HotTracking = true;
lvwProgreso.Columns.Add("Nombre Archivo", 200);
lvwProgreso.Columns.Add("MB", 70, HorizontalAlignment.Center);
lvwProgreso.Columns.Add("%", 40, HorizontalAlignment.Center);
lvwProgreso.Columns.Add("Progreso", 200);
lvwProgreso.Columns.Add("Estado", 80, HorizontalAlignment.Center);
lvwProgreso.View = View.Details;
}
private void habilitarBotonDescargar(object sender, EventArgs e)
{
btnDescargar.Enabled = (!txtURL.Text.Equals(""));
}
private void iniciarDescarga(object sender, EventArgs e)
{
WebClient oCliente = new WebClient();
Uri url = new Uri(txtURL.Text);
string archivo = Path.GetFileName(url.AbsolutePath);
ServicePointManager.DefaultConnectionLimit = 10;
ListViewItem fila = lvwProgreso.Items.Add(archivo);
fila.Name = archivo;
fila.SubItems.Add("0");
fila.SubItems.Add("0");
fila.SubItems.Add("");
fila.SubItems.Add("Iniciado");
Rectangle rec = fila.SubItems[3].Bounds;
ProgressBar pbr =new ProgressBar();
pbr.Name = archivo;
pbr.Parent = lvwProgreso;
pbr.SetBounds(rec.X, rec.Y, rec.Width, rec.Height);
pbr.Visible = true;
txtURL.Clear();
oCliente.DownloadProgressChanged +=
new DownloadProgressChangedEventHandler(mostrarProgreso);
oCliente.DownloadFileCompleted +=
new AsyncCompletedEventHandler(finalizarDescarga);
oCliente.DownloadFileAsync(url, archivo, archivo);
}
private void mostrarProgreso(object sender, DownloadProgressChangedEventArgs e)
{
int bytesRecibidos = (int)(e.BytesReceived / (1024 * 1024));
int bytesTotales = (int)(e.TotalBytesToReceive / (1024 * 1024));
string archivo = e.UserState.ToString();
Control[] rpta = lvwProgreso.Controls.Find(archivo, false);
if(rpta!=null&&rpta.Length > 0){
ProgressBar pbr = (ProgressBar)rpta[0];
lvwProgreso.Items[archivo].SubItems[1].Text = String.Format("{0} - {1}",
bytesRecibidos, bytesTotales);
lvwProgreso.Items[archivo].SubItems[2].Text = e.ProgressPercentage.ToString();
pbr.Value = e.ProgressPercentage;
lvwProgreso.Items[archivo].SubItems[4].Text = "Descargando";
}
}
private void finalizarDescarga(object sender, AsyncCompletedEventArgs e)
{
archivoFin = e.UserState.ToString();
MethodInvoker mi = new MethodInvoker(mostrarResultado);
this.Invoke(mi);
}
private void mostrarResultado()
{
lvwProgreso.Items[archivoFin].SubItems[4].Text = "Finalizado";
}
}
}
Probar la Aplicación de Descarga de Archivos
Grabar la aplicación, compilarla y ejecutarla con F5. Se mostrará una ventana como la siguiente:
Ingresar una dirección URL conteniendo un archivo y clic en el botón "Descargar", copiar varias direcciones e iniciar sus descarga, se irá mostrando el progreso de cada descarga y su estado, tal como se ve en la siguiente figura:
Cuando la descarga finaliza se completa la barra, se cambia el estado a finalizado y el archivo estará disponible para ejecutarse, por defecto en la carpeta donde se encuentra la aplicación (bin\debug).
Comentario Final
En este post vimos como bajar varios archivos simultáneamente usando WebClient sin bloquear la pantalla, es decir en forma asíncrona, mostrando el progreso. Espero les guste y se animen a hacer sus propios utilitarios y no bajarlos de otros.
Descarga:
Demo17_DescargarArchivos_WebClient
Requerimiento
Muchas veces los Administradores de Red bloquean las descargas de Archivos en los Navegadores y a veces necesitamos con urgencia bajar uno o mas archivos (de cualquier tipo). Si conocemos las direcciones de descarga podemos crear una aplicación que baje dichos archivos.
Características de la Aplicación Windows
1. Debe permitir bajar varios archivos desde URLs conocidas.
2. La descarga debe ser asíncrona sin bloquear el trabajo de la pantalla.
3. Se debe mostrar el progreso de la descarga en % y en forma gráfica con una barra de progreso.
Solución
Crearemos una aplicación Windows Forms en C# que use la clase WebClient del espacio de nombres "System.Net" que tiene un método asíncrono llamado "DownloadFileAsync". Además mostraremos el progreso en el evento: "DownloadProgressChanged" y actualizaremos el estado a Finalizado en el evento "DownloadFileCompleted".
Crear la Aplicación Windows Forms en C#
Crear un proyecto llamado "DescargarArchivos" en C# como una "Aplicación de Windows Forms".
Cambiar de nombre al formulario por: "frmDescarga", configurar su tamaño a 650 de ancho por 400 de alto, centrarlo y arrastrar 3 controles:
- Un TextBox llamado "txtURL"
- Un Button llamado "btnDescargar"
- Un ListView llamado "lvwProgreso"
El diseño del formulario debe quedar como se muestra a continuación:
Nota: El botón debe estar deshabilitado y solo se debe habilitar al ingresar una URL sobre el TextBox.
Escribir el siguiente código en el formulario "frmDescarga":
using System;
using System.Net;
using System.Net.Mime; //ContentDisposition
using System.IO;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
namespace DescargarArchivos
{
public partial class frmDescarga : Form
{
private string archivoFin="";
public frmDescarga()
{
InitializeComponent();
}
private void configurarListView(object sender, EventArgs e)
{
lvwProgreso.FullRowSelect = true;
lvwProgreso.GridLines = true;
lvwProgreso.HotTracking = true;
lvwProgreso.Columns.Add("Nombre Archivo", 200);
lvwProgreso.Columns.Add("MB", 70, HorizontalAlignment.Center);
lvwProgreso.Columns.Add("%", 40, HorizontalAlignment.Center);
lvwProgreso.Columns.Add("Progreso", 200);
lvwProgreso.Columns.Add("Estado", 80, HorizontalAlignment.Center);
lvwProgreso.View = View.Details;
}
private void habilitarBotonDescargar(object sender, EventArgs e)
{
btnDescargar.Enabled = (!txtURL.Text.Equals(""));
}
private void iniciarDescarga(object sender, EventArgs e)
{
WebClient oCliente = new WebClient();
Uri url = new Uri(txtURL.Text);
string archivo = Path.GetFileName(url.AbsolutePath);
ServicePointManager.DefaultConnectionLimit = 10;
ListViewItem fila = lvwProgreso.Items.Add(archivo);
fila.Name = archivo;
fila.SubItems.Add("0");
fila.SubItems.Add("0");
fila.SubItems.Add("");
fila.SubItems.Add("Iniciado");
Rectangle rec = fila.SubItems[3].Bounds;
ProgressBar pbr =new ProgressBar();
pbr.Name = archivo;
pbr.Parent = lvwProgreso;
pbr.SetBounds(rec.X, rec.Y, rec.Width, rec.Height);
pbr.Visible = true;
txtURL.Clear();
oCliente.DownloadProgressChanged +=
new DownloadProgressChangedEventHandler(mostrarProgreso);
oCliente.DownloadFileCompleted +=
new AsyncCompletedEventHandler(finalizarDescarga);
oCliente.DownloadFileAsync(url, archivo, archivo);
}
private void mostrarProgreso(object sender, DownloadProgressChangedEventArgs e)
{
int bytesRecibidos = (int)(e.BytesReceived / (1024 * 1024));
int bytesTotales = (int)(e.TotalBytesToReceive / (1024 * 1024));
string archivo = e.UserState.ToString();
Control[] rpta = lvwProgreso.Controls.Find(archivo, false);
if(rpta!=null&&rpta.Length > 0){
ProgressBar pbr = (ProgressBar)rpta[0];
lvwProgreso.Items[archivo].SubItems[1].Text = String.Format("{0} - {1}",
bytesRecibidos, bytesTotales);
lvwProgreso.Items[archivo].SubItems[2].Text = e.ProgressPercentage.ToString();
pbr.Value = e.ProgressPercentage;
lvwProgreso.Items[archivo].SubItems[4].Text = "Descargando";
}
}
private void finalizarDescarga(object sender, AsyncCompletedEventArgs e)
{
archivoFin = e.UserState.ToString();
MethodInvoker mi = new MethodInvoker(mostrarResultado);
this.Invoke(mi);
}
private void mostrarResultado()
{
lvwProgreso.Items[archivoFin].SubItems[4].Text = "Finalizado";
}
}
}
Nota: Una de las dificultades de la aplicación fue como actualizar la Fila del ListView adecuada, ya que son varios archivos los que se descargan, para eso a cada barra y a cada ListViewItem se le dio como nombre el archivo que se descargaba y se uso como identificador para obtenerlos.
Otra dificultad que encontré fue que la clase WebClient no podía descargar varios a la vez, para lo cual se uso la propiedad "DefaultConnectionLimit" de la clase "ServicePointManager", en este caso configurada para bajar 10 archivos.
Probar la Aplicación de Descarga de Archivos
Grabar la aplicación, compilarla y ejecutarla con F5. Se mostrará una ventana como la siguiente:
Ingresar una dirección URL conteniendo un archivo y clic en el botón "Descargar", copiar varias direcciones e iniciar sus descarga, se irá mostrando el progreso de cada descarga y su estado, tal como se ve en la siguiente figura:
Cuando la descarga finaliza se completa la barra, se cambia el estado a finalizado y el archivo estará disponible para ejecutarse, por defecto en la carpeta donde se encuentra la aplicación (bin\debug).
Comentario Final
En este post vimos como bajar varios archivos simultáneamente usando WebClient sin bloquear la pantalla, es decir en forma asíncrona, mostrando el progreso. Espero les guste y se animen a hacer sus propios utilitarios y no bajarlos de otros.
Descarga:
Demo17_DescargarArchivos_WebClient
Etiquetas:
Asíncrono,
C#,
DefaultConnectionLimit,
Demos,
Descargar Archivos,
Download,
DownloadFileAsync,
Lduenas,
MethodInvoker,
ServicePointManager,
System.Net,
WebClient,
WinForms
El Libro del Día: Expert C# 5.0
El Libro del Día: 2014-08-27
Titulo: Expert C# 5.0
Autor: Mohammad Rahman
Editorial: Apress
Nro Paginas: 609
Capítulos:
Chapter 1: Reintroducing C#:-A Detailed Look at the Language We All Know
Chapter 2: C# Objects in Memory
Chapter 3: Parameters
Chapter 4: Methods
Chapter 5: Automatic Property Declaration
Chapter 6: Enum
Chapter 7: Delegate
Chapter 8: Event
Chapter 9: Foreach and Iterator
Chapter 10: The String Data Type
Chapter 11: Collections Explained
Chapter 12: Linq in C#
Chapter 13: Exception Management
Chapter 14: Asynchrony
Chapter 15: Diagnostic Tools in .NET
Descarga:
Expert_C#_5.0
Titulo: Expert C# 5.0
Autor: Mohammad Rahman
Editorial: Apress
Nro Paginas: 609
Capítulos:
Chapter 1: Reintroducing C#:-A Detailed Look at the Language We All Know
Chapter 2: C# Objects in Memory
Chapter 3: Parameters
Chapter 4: Methods
Chapter 5: Automatic Property Declaration
Chapter 6: Enum
Chapter 7: Delegate
Chapter 8: Event
Chapter 9: Foreach and Iterator
Chapter 10: The String Data Type
Chapter 11: Collections Explained
Chapter 12: Linq in C#
Chapter 13: Exception Management
Chapter 14: Asynchrony
Chapter 15: Diagnostic Tools in .NET
Descarga:
Expert_C#_5.0
Etiquetas:
Apress,
Asynchronous,
C#,
Collections,
Delegates,
Diagnostic Tools,
Enums,
Events,
Exceptions,
Foreach,
Iterators,
Language,
Libros,
LINQ,
Methods,
Mohammad Rahman,
Objects,
Parameters,
Properties,
String
martes, 26 de agosto de 2014
El Libro del Día: Beginning C# 5.0 Databases
El Libro del Día: 2014-08-26
Titulo: Beginning C# 5.0 Databases (2nd Edition)
Autor: Vidya Vrat Agarwal
Editorial: Apress
Nro Paginas: 427
Capítulos:
Part I: Understanding Tools and Fundamentals Databases
Chapter 1: Getting and Understanding Your Tools
Chapter 2: Understanding Relational Databases
Chapter 3: Creating Database and Tables
Part II: Working with Database and XML
Chapter 4: Manipulating Database Data
Chapter 5: Querying Databases
Chapter 6: Using Stored Procedures
Chapter 7: Using XML
Chapter 8: Understanding Transactions
Part III: Working with Data Using ADO.NET
Chapter 9: Building Windows Forms Applications
Chapter 10: Introduction to ADO.NET
Chapter 11: Handling Exceptions
Chapter 12: Making Connections
Chapter 13: Executing ADO.NET Commands to Retrieve Data
Chapter 14: Using Data Readers
Part IV: Working with Advanced ADO.NET Related Features
Chapter 15: Using Data Sets and Data Adapters
Chapter 16: Using Data Controls with ASP.NET Applications
Chapter 17: Working with Text and Binary Data
Chapter 18: Using LINQ
Chapter 19: Using the ADO.NET Entity Framework
Chapter 20: Using the CLR in SQL Server
Descarga:
Beginning_C#_5.0_Databases
Titulo: Beginning C# 5.0 Databases (2nd Edition)
Autor: Vidya Vrat Agarwal
Editorial: Apress
Nro Paginas: 427
Capítulos:
Part I: Understanding Tools and Fundamentals Databases
Chapter 1: Getting and Understanding Your Tools
Chapter 2: Understanding Relational Databases
Chapter 3: Creating Database and Tables
Part II: Working with Database and XML
Chapter 4: Manipulating Database Data
Chapter 5: Querying Databases
Chapter 6: Using Stored Procedures
Chapter 7: Using XML
Chapter 8: Understanding Transactions
Part III: Working with Data Using ADO.NET
Chapter 9: Building Windows Forms Applications
Chapter 10: Introduction to ADO.NET
Chapter 11: Handling Exceptions
Chapter 12: Making Connections
Chapter 13: Executing ADO.NET Commands to Retrieve Data
Chapter 14: Using Data Readers
Part IV: Working with Advanced ADO.NET Related Features
Chapter 15: Using Data Sets and Data Adapters
Chapter 16: Using Data Controls with ASP.NET Applications
Chapter 17: Working with Text and Binary Data
Chapter 18: Using LINQ
Chapter 19: Using the ADO.NET Entity Framework
Chapter 20: Using the CLR in SQL Server
Descarga:
Beginning_C#_5.0_Databases
Etiquetas:
ADO .NET,
Apress,
ASP .NET,
Binary,
C#,
Commands,
Connections,
Data Controls,
DataAdapters,
Databases,
DataReaders,
DataSets,
Exceptions,
Libros,
LINQ,
Procedures,
Querying,
Transactions,
Vidya Vrat Agarwal,
XML
lunes, 25 de agosto de 2014
El Libro del Día: A Programmer's Guide to C# 5.0
El Libro del Día: 2014-08-25
Titulo: A Programmer's Guide to C# 5.0 (4th Edition)
Autor: Eric Gunnerson, Nick Wienholt
Editorial: Apress
Nro Paginas: 443
Capítulos:
Chapter 1: C# and the .NET Runtime and Libraries
Chapter 2: C# QuickStart and Developing in C#
Chapter 3: Classes 101
Chapter 4: Base Classes and Inheritance
Chapter 5: Exception Handling
Chapter 6: Member Accessibility and Overloading
Chapter 7: Other Class Details
Chapter 8: Structs (Value Types)
Chapter 9: Interfaces
Chapter 10: Versioning and Aliases
Chapter 11: Statements and Flow of Execution
Chapter 12: Variable Scoping and Definite Assignment
Chapter 13: Operators and Expressions
Chapter 14: Conversions
Chapter 15: Arrays
Chapter 16: Properties
Chapter 17: Generic Types
Chapter 18: Indexers, Enumerators, and Iterators
Chapter 19: Strings
Chapter 20: Enumerations
Chapter 21: Attributes
Chapter 22: Delegates, Anonymous Methods, and Lambdas
Chapter 23: Events
Chapter 24: Dynamic Typing
Chapter 25: User-Defined Conversions
Chapter 26: Operator Overloading
Chapter 27: Nullable Types
Chapter 28: Linq to Objects
Chapter 29: Linq to XML
Chapter 30: Linq to SQL
Chapter 31: Other Language Details
Chapter 32: Making Friends with the .NET Framework
Chapter 33: System.Array and the Collection Classes
Chapter 34: Threading
Chapter 35: Asynchronous and Parallel Programming
Chapter 36: Execution-Time Code Generation
Chapter 37: Interop
Chapter 38: .NET Base Class Library Overview
Chapter 39: Deeper into C#
Chapter 40: Logging and Debugging Techniques
Chapter 41: IDEs and Utilities
Descarga:
A_Programmers_Guide_C#_5.0
Titulo: A Programmer's Guide to C# 5.0 (4th Edition)
Autor: Eric Gunnerson, Nick Wienholt
Editorial: Apress
Nro Paginas: 443
Capítulos:
Chapter 1: C# and the .NET Runtime and Libraries
Chapter 2: C# QuickStart and Developing in C#
Chapter 3: Classes 101
Chapter 4: Base Classes and Inheritance
Chapter 5: Exception Handling
Chapter 6: Member Accessibility and Overloading
Chapter 7: Other Class Details
Chapter 8: Structs (Value Types)
Chapter 9: Interfaces
Chapter 10: Versioning and Aliases
Chapter 11: Statements and Flow of Execution
Chapter 12: Variable Scoping and Definite Assignment
Chapter 13: Operators and Expressions
Chapter 14: Conversions
Chapter 15: Arrays
Chapter 16: Properties
Chapter 17: Generic Types
Chapter 18: Indexers, Enumerators, and Iterators
Chapter 19: Strings
Chapter 20: Enumerations
Chapter 21: Attributes
Chapter 22: Delegates, Anonymous Methods, and Lambdas
Chapter 23: Events
Chapter 24: Dynamic Typing
Chapter 25: User-Defined Conversions
Chapter 26: Operator Overloading
Chapter 27: Nullable Types
Chapter 28: Linq to Objects
Chapter 29: Linq to XML
Chapter 30: Linq to SQL
Chapter 31: Other Language Details
Chapter 32: Making Friends with the .NET Framework
Chapter 33: System.Array and the Collection Classes
Chapter 34: Threading
Chapter 35: Asynchronous and Parallel Programming
Chapter 36: Execution-Time Code Generation
Chapter 37: Interop
Chapter 38: .NET Base Class Library Overview
Chapter 39: Deeper into C#
Chapter 40: Logging and Debugging Techniques
Chapter 41: IDEs and Utilities
Descarga:
A_Programmers_Guide_C#_5.0
Etiquetas:
Apress,
Arrays,
Attributes,
C#,
Classes,
Conversions,
Delegates,
Enumerations,
Eric Gunnerson,
Expressions,
Inheritance,
Interfaces,
Libros,
LINQ,
Nick Wienholt,
Operators,
Overloading,
Properties,
Structs,
Versioning
domingo, 24 de agosto de 2014
El Libro del Día: jQuery Cookbook
El Libro del Día: 2014-08-24
Titulo: jQuery Cookbook
Autor: jQuery Community Experts
Editorial: O'Reilly
Nro Paginas: 478
Capítulos:
1. jQuery Basics
2. Selecting Elements with jQuery
3. Beyond the Basics
4. jQuery Utilities
5. Faster, Simpler, More Fun
6. Dimensions
7. Effects
8. Events
9. Advanced Events
10. HTML Form Enhancements from Scratch
11. HTML Form Enhancements with Plugins
12. jQuery Plugins
13. Interface Components from Scratch
14. User Interfaces with jQuery UI
15. jQuery UI Theming
16. jQuery, Ajax, Data Formats: HTML, XML, JSON, JSONP
17. Using jQuery in Large Projects
18. Unit Testing
Descarga:
jQuery_Cookbook
Titulo: jQuery Cookbook
Autor: jQuery Community Experts
Editorial: O'Reilly
Nro Paginas: 478
Capítulos:
1. jQuery Basics
2. Selecting Elements with jQuery
3. Beyond the Basics
4. jQuery Utilities
5. Faster, Simpler, More Fun
6. Dimensions
7. Effects
8. Events
9. Advanced Events
10. HTML Form Enhancements from Scratch
11. HTML Form Enhancements with Plugins
12. jQuery Plugins
13. Interface Components from Scratch
14. User Interfaces with jQuery UI
15. jQuery UI Theming
16. jQuery, Ajax, Data Formats: HTML, XML, JSON, JSONP
17. Using jQuery in Large Projects
18. Unit Testing
Descarga:
jQuery_Cookbook
Etiquetas:
AJAX,
Components,
Cookbook,
Dimensions,
Effects,
Events,
Forms,
HTML,
jQuery,
jQuery Community Experts,
jQuery UI,
JSON,
Libros,
O'Reilly,
Plugins,
Selecting Elements,
Theming,
Unit Testing,
Utilities,
XML
sábado, 23 de agosto de 2014
El Libro del Día: jQuery Recipes
El Libro del Día: 2014-08-23
Titulo: jQuery Recipes
Autor: B.M. Harwani
Editorial: Apress
Nro Paginas: 455
Capítulos:
Chapter 1: jQuery Basics
Chapter 2: Arrays and Strings
Chapter 3: Event Handling
Chapter 4: Form Validation
Chapter 5: Page Navigation
Chapter 6: Visual Effects
Chapter 7: Dealing with Tables
Chapter 8: Ajax
Chapter 9: Using Plugins
Chapter 10: Using CSS
Descarga:
jQuery_Recipes
Titulo: jQuery Recipes
Autor: B.M. Harwani
Editorial: Apress
Nro Paginas: 455
Capítulos:
Chapter 1: jQuery Basics
Chapter 2: Arrays and Strings
Chapter 3: Event Handling
Chapter 4: Form Validation
Chapter 5: Page Navigation
Chapter 6: Visual Effects
Chapter 7: Dealing with Tables
Chapter 8: Ajax
Chapter 9: Using Plugins
Chapter 10: Using CSS
Descarga:
jQuery_Recipes
Etiquetas:
AJAX,
Apress,
Arrays,
B.M. Harwani,
CSS,
Effects,
Event Handling,
jQuery,
Libros,
Navigation,
Plugins,
Recipes,
Strings,
Tables,
Validation
viernes, 22 de agosto de 2014
El Libro del Día: Beginning jQuery 2 for ASP.NET Developers
El Libro del Día: 2014-08-22
Titulo: Beginning jQuery 2 for ASP.NET Developers
Autor: Bipin Joshi
Editorial: Apress
Nro Paginas: 322
Capítulos:
Chapter 1: The JavaScript You Need to Know
Chapter 2: A First Look at jQuery
Chapter 3: ASP.NET Controls and jQuery Selectors
Chapter 4: Event Handling
Chapter 5: DOM Manipulation and Dynamic Content
Chapter 6: Traversal and Other Useful Methods
Chapter 7: Effects and Animations
Chapter 8: Ajax Techniques
Chapter 9: Creating and Using Plugins
Chapter 10: jQuery UI and jQuery Mobile
Chapter 11: Useful jQuery Recipes for ASP.NET Applications
Appendix: Learning Resources
Descarga:
Beginning_jQuery2_For_ASPNET_Developers
Titulo: Beginning jQuery 2 for ASP.NET Developers
Autor: Bipin Joshi
Editorial: Apress
Nro Paginas: 322
Capítulos:
Chapter 1: The JavaScript You Need to Know
Chapter 2: A First Look at jQuery
Chapter 3: ASP.NET Controls and jQuery Selectors
Chapter 4: Event Handling
Chapter 5: DOM Manipulation and Dynamic Content
Chapter 6: Traversal and Other Useful Methods
Chapter 7: Effects and Animations
Chapter 8: Ajax Techniques
Chapter 9: Creating and Using Plugins
Chapter 10: jQuery UI and jQuery Mobile
Chapter 11: Useful jQuery Recipes for ASP.NET Applications
Appendix: Learning Resources
Descarga:
Beginning_jQuery2_For_ASPNET_Developers
Etiquetas:
.NET,
AJAX,
Animations,
Apress,
ASP .NET,
Bipin Joshi,
Controls,
DOM,
Dynamic Content,
Effects,
Event Handling,
Javascript,
jQuery,
jQuery Mobile,
jQuery Recipes,
jQuery Selectors,
jQuery UI,
Libros,
Plugins,
Resources
jueves, 21 de agosto de 2014
El Libro del Día: Professional SQL Server 2012 Internals and Troubleshooting
El Libro del Día: 2014-08-21
Titulo: Professional SQL Server 2012 Internals and Troubleshooting
Autor: Christian Bolton, Justin Langford, Glenn Berry, Gavin Payne, Amit Banerjee, Rob Farley
Editorial: Wrox
Nro Paginas: 580
Capítulos:
PART I INTERNALS
CHAPTER 1 SQL Server Architecture
CHAPTER 2 Demystifying Hardware
CHAPTER 3 Understanding Memory
CHAPTER 4 Storage Systems
CHAPTER 5 Query Processing and Execution
CHAPTER 6 Locking and Concurrency
CHAPTER 7 Latches and Spinlocks
CHAPTER 8 Knowing Tempdb
PART II T ROUBLESHOOTING TOOLS AND LESSONS
FROM THE FIELD
CHAPTER 9 Troubleshooting Methodology and Practices
CHAPTER 10 Viewing Server Performance with PerfMon and the PAL Tool
CHAPTER 11 Consolidating Data Capture with SQLdiag
CHAPTER 12 Bringing It All Together with SQL Nexus
CHAPTER 13 Diagnosing SQL Server 2012 Using Extended Events
CHAPTER 14 Enhancing Your Troubleshooting Toolset with PowerShell
CHAPTER 15 Delivering a SQL Server Health Check
CHAPTER 16 Delivering Manageability and Performance
CHAPTER 17 Running SQL Server in a Virtual Environment
Descarga:
Professional_SQLServer2012_Internals_Troubleshooting
Titulo: Professional SQL Server 2012 Internals and Troubleshooting
Autor: Christian Bolton, Justin Langford, Glenn Berry, Gavin Payne, Amit Banerjee, Rob Farley
Editorial: Wrox
Nro Paginas: 580
Capítulos:
PART I INTERNALS
CHAPTER 1 SQL Server Architecture
CHAPTER 2 Demystifying Hardware
CHAPTER 3 Understanding Memory
CHAPTER 4 Storage Systems
CHAPTER 5 Query Processing and Execution
CHAPTER 6 Locking and Concurrency
CHAPTER 7 Latches and Spinlocks
CHAPTER 8 Knowing Tempdb
PART II T ROUBLESHOOTING TOOLS AND LESSONS
FROM THE FIELD
CHAPTER 9 Troubleshooting Methodology and Practices
CHAPTER 10 Viewing Server Performance with PerfMon and the PAL Tool
CHAPTER 11 Consolidating Data Capture with SQLdiag
CHAPTER 12 Bringing It All Together with SQL Nexus
CHAPTER 13 Diagnosing SQL Server 2012 Using Extended Events
CHAPTER 14 Enhancing Your Troubleshooting Toolset with PowerShell
CHAPTER 15 Delivering a SQL Server Health Check
CHAPTER 16 Delivering Manageability and Performance
CHAPTER 17 Running SQL Server in a Virtual Environment
Descarga:
Professional_SQLServer2012_Internals_Troubleshooting
Etiquetas:
Amit Banerjee,
Architecture,
Christian Bolton,
Concurrency,
Gavin Payne,
Glenn Berry,
Internals,
J. Langford,
Libros,
Locking,
Memory,
Querys,
Rob Farley,
SQL Server,
SQLdiag,
Storage,
Tempdb,
Troubleshooting,
Wrox
miércoles, 20 de agosto de 2014
El Libro del Día: Visual Studio 2013 Cookbook
El Libro del Día: 2014-08-20
Titulo: Visual Studio 2013 Cookbook
Autor: Jeff Martin, Richard Banks
Editorial: Packt
Nro Paginas: 333
Capítulos:
Chapter 1: Discovering Visual Studio 2013
Chapter 2: Getting Started with Windows Store Applications
Chapter 3: Web Development – ASP.NET, HTML5, CSS, and JavaScript
Chapter 4: .NET Framework 4.5.1 Development
Chapter 5: Debugging Your .NET Application
Chapter 6: Asynchrony in .NET
Chapter 7: Unwrapping C++ Development
Chapter 8: Working with Team Foundation Server 2013
Chapter 9: Languages
Appendix: Visual Studio Medley
Descarga:
Visual_Studio_2013_Cookbook
Titulo: Visual Studio 2013 Cookbook
Autor: Jeff Martin, Richard Banks
Editorial: Packt
Nro Paginas: 333
Capítulos:
Chapter 1: Discovering Visual Studio 2013
Chapter 2: Getting Started with Windows Store Applications
Chapter 3: Web Development – ASP.NET, HTML5, CSS, and JavaScript
Chapter 4: .NET Framework 4.5.1 Development
Chapter 5: Debugging Your .NET Application
Chapter 6: Asynchrony in .NET
Chapter 7: Unwrapping C++ Development
Chapter 8: Working with Team Foundation Server 2013
Chapter 9: Languages
Appendix: Visual Studio Medley
Descarga:
Visual_Studio_2013_Cookbook
Etiquetas:
.NET,
.NET Framework,
.NET Languages,
ASP .NET,
Asynchronous,
C#,
C++,
Cookbook,
CSS,
Debugging,
HTML5,
Javascript,
Jeff Martin,
Libros,
Packt,
Richard Banks,
TFS,
Visual Studio,
Web Development,
Windows Store
martes, 19 de agosto de 2014
El Demo del Día: Preview de Imagen con FileReader al usar FileUpload
Preview de Imagen con FileReader al usar FileUpload
Requerimiento
Se desea enviar y grabar una imagen en el servidor desde una aplicación Web en ASP .NET, pero antes de enviarla se necesita mostrar el contenido de la imagen el el cliente (Preview).
Solución
Para este fin usaremos FileSystem API de HTML5, en especial la clase FileReader que permite leer un archivo en el cliente y devolver los datos en varios formatos, entre ellos como una URL.
Nota: En muchos sitios, esto lo hacen enviando la imagen al servidor y luego recién hacen el preview, pero si no es la imagen deseada, igual ya se fue hasta el servidor. Lo mejor es hacerlo en el cliente y evitar los envíos innecesarios al servidor web.
Crear la Aplicación Web en ASP .NET Web Form
Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "PreviewImagenFileUpload" y crear las siguientes carpetas:
- Archivos: Para almacenar las imágenes subidas al servidor.
- Paginas: Para contener la pagina de Registro de imágenes.
- Scripts: Para almacenar las rutinas de JavaScript No obstrusivo.
Diseñar la Pagina ASP .NET como un Formulario Web Form
Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "Registro.aspx" y escribir el siguiente código:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Registro.aspx.cs" Inherits="Paginas_Registro" %>
<!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>Registro de Fotos</title>
<script src="../Scripts/Rutinas.js"></script>
<script>cargarScriptPagina();</script>
</head>
<body style="background-color:aqua">
<form id="frmRegistro" runat="server">
<div style="text-align:center">
<h1>Preview de Imagen con FileReader al usar FileUpload</h1>
<h2>Registro de Fotos</h2>
<h3>Selecciona la Foto a enviar:
<asp:FileUpload ID="fupFoto" runat="server" />
</h3>
<img id="imgFoto" width="200" height="200" alt="" /><br />
<asp:Button ID="btnEnviar" OnClick="btnEnviar_Click" Text="Enviar" runat="server" />
</div>
</form>
</body>
</html>
Nota: En la sección de Scripts se tiene que definir el archivo de JavaScript que tiene las Rutinas de validación y que realiza el Preview.
El diseño de la pagina se mostrará como en la siguiente figura:
Escribir código JavaScript No obstrusivo para Validar el envío y hacer el Preview
Seleccionar la carpeta "Scripts" y agregar un archivo de JavaScript llamado: "Rutinas.js" y escribir el siguiente código:
function cargarScriptPagina() {
window.onload = function () {
var frm = document.getElementById("frmRegistro");
var fup = document.getElementById("fupFoto");
frm.onsubmit = function () {
if (fup.value == "") {
alert("Selecciona un archivo de imagen");
return false;
}
return(true);
}
fup.onchange = function (e) {
var file = e.target.files[0];
if (file != null) {
var extension = file.name.substring(file.name.length - 4, file.name.length);
if (!((extension == ".jpg") || (extension == ".png"))) {
alert("El archivo debe ser jpg o png");
return false;
}
var reader = new FileReader();
if (reader != null) {
reader.onloadend = function () {
var img = document.getElementById("imgFoto");
img.src = reader.result;
};
reader.readAsDataURL(file);
}
else img.src = "No se puede mostrar la imagen";
}
else alert("No se puede mostrar la imagen");
}
}
}
Nota: En el evento "load" de la pagina se valida que se seleccione un archivo antes de enviar al servidor y cuando se selecciona un archivo se valida que sea una imagen jpg o png y se hace el preview usando la clase FileReader del FileSystem API.
Escribir código en el servidor para guardar la imagen en la carpeta Archivos
Escribir el siguiente código C# en la página:
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Paginas_Registro : System.Web.UI.Page
{
protected void btnEnviar_Click(object sender, EventArgs e)
{
if (fupFoto.PostedFile.ContentLength > 0)
{
string archivo = Server.MapPath(String.Format("../Archivos/{0}",
Path.GetFileName(fupFoto.PostedFile.FileName)));
if (File.Exists(archivo)) File.Delete(archivo);
fupFoto.PostedFile.SaveAs(archivo);
ClientScript.RegisterStartupScript(this.GetType(), "Mensaje",
"alert('La imagen fue grabada en el servidor');", true);
}
}
}
Nota: Se usa la propiedad "PostedFile" del control FileUpload para obtener el archivo enviado desde el cliente al servidor y lo grabamos en la carpeta Archivos usando su método "SaveAs".
Configurar el permiso de escritura al Usuario de IIS para escribir en la carpeta Archivos
Ingresar al Explorador de Windows y seleccionar la carpeta "Archivos" de nuestro proyecto, luego clic derecho "Propiedades", seleccionar el Tab "Security" y luego clic en el botón "Edit" y luego botón "Add" para agregar al usuario de IIS, si ya existe solo seleccionarlo y luego marcar los checks para darle permiso de escritura y lectura, tal como se muestra en la siguiente figura:
Probar la Pagina Web
Guardar el Sitio Web, clic derecho a la Pagina "Registro.aspx" y seleccionar "Ver en el explorador".
Clic al botón "Enviar" sin seleccionar nada y aparecerá un mensaje de validación que indica que hay que seleccionar un archivo de imagen.
Ahora intenta seleccionar un archivo que no sea un jpg o png, por ejemplo un archivo de texto y se muestra otro mensaje de validación que indica que tiene que ser jpg o png.
Finalmente, selecciona un archivo de imagen png o jpg y clic en "Enviar" y se guarda en el servidor en la carpeta "Archivos" y se muestra un mensaje de confirmación.
Comentario Final
En este post, aprendimos como subir un archivo de imagen al servidor, pero mostrando la imagen antes de enviarla para saber si es la adecuada. Para realizar este preview lo hicimos en el cliente mediante la clase FileReader de HTML5.
Lo interesante es que funciona en la mayoría de Navegadores (Browsers), por lo menos lo probé en IE11 y Chrome 36.
Descarga:
Demo16_Preview_Imagen_FileUpload
Requerimiento
Se desea enviar y grabar una imagen en el servidor desde una aplicación Web en ASP .NET, pero antes de enviarla se necesita mostrar el contenido de la imagen el el cliente (Preview).
Solución
Para este fin usaremos FileSystem API de HTML5, en especial la clase FileReader que permite leer un archivo en el cliente y devolver los datos en varios formatos, entre ellos como una URL.
Nota: En muchos sitios, esto lo hacen enviando la imagen al servidor y luego recién hacen el preview, pero si no es la imagen deseada, igual ya se fue hasta el servidor. Lo mejor es hacerlo en el cliente y evitar los envíos innecesarios al servidor web.
Crear la Aplicación Web en ASP .NET Web Form
Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "PreviewImagenFileUpload" y crear las siguientes carpetas:
- Archivos: Para almacenar las imágenes subidas al servidor.
- Paginas: Para contener la pagina de Registro de imágenes.
- Scripts: Para almacenar las rutinas de JavaScript No obstrusivo.
Diseñar la Pagina ASP .NET como un Formulario Web Form
Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "Registro.aspx" y escribir el siguiente código:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Registro.aspx.cs" Inherits="Paginas_Registro" %>
<!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>Registro de Fotos</title>
<script src="../Scripts/Rutinas.js"></script>
<script>cargarScriptPagina();</script>
</head>
<body style="background-color:aqua">
<form id="frmRegistro" runat="server">
<div style="text-align:center">
<h1>Preview de Imagen con FileReader al usar FileUpload</h1>
<h2>Registro de Fotos</h2>
<h3>Selecciona la Foto a enviar:
<asp:FileUpload ID="fupFoto" runat="server" />
</h3>
<img id="imgFoto" width="200" height="200" alt="" /><br />
<asp:Button ID="btnEnviar" OnClick="btnEnviar_Click" Text="Enviar" runat="server" />
</div>
</form>
</body>
</html>
Nota: En la sección de Scripts se tiene que definir el archivo de JavaScript que tiene las Rutinas de validación y que realiza el Preview.
El diseño de la pagina se mostrará como en la siguiente figura:
Escribir código JavaScript No obstrusivo para Validar el envío y hacer el Preview
Seleccionar la carpeta "Scripts" y agregar un archivo de JavaScript llamado: "Rutinas.js" y escribir el siguiente código:
window.onload = function () {
var frm = document.getElementById("frmRegistro");
var fup = document.getElementById("fupFoto");
frm.onsubmit = function () {
if (fup.value == "") {
alert("Selecciona un archivo de imagen");
return false;
}
return(true);
}
fup.onchange = function (e) {
var file = e.target.files[0];
if (file != null) {
var extension = file.name.substring(file.name.length - 4, file.name.length);
if (!((extension == ".jpg") || (extension == ".png"))) {
alert("El archivo debe ser jpg o png");
return false;
}
var reader = new FileReader();
if (reader != null) {
reader.onloadend = function () {
var img = document.getElementById("imgFoto");
img.src = reader.result;
};
reader.readAsDataURL(file);
}
else img.src = "No se puede mostrar la imagen";
}
else alert("No se puede mostrar la imagen");
}
}
}
Nota: En el evento "load" de la pagina se valida que se seleccione un archivo antes de enviar al servidor y cuando se selecciona un archivo se valida que sea una imagen jpg o png y se hace el preview usando la clase FileReader del FileSystem API.
Escribir código en el servidor para guardar la imagen en la carpeta Archivos
Escribir el siguiente código C# en la página:
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Paginas_Registro : System.Web.UI.Page
{
protected void btnEnviar_Click(object sender, EventArgs e)
{
if (fupFoto.PostedFile.ContentLength > 0)
{
string archivo = Server.MapPath(String.Format("../Archivos/{0}",
Path.GetFileName(fupFoto.PostedFile.FileName)));
if (File.Exists(archivo)) File.Delete(archivo);
fupFoto.PostedFile.SaveAs(archivo);
ClientScript.RegisterStartupScript(this.GetType(), "Mensaje",
"alert('La imagen fue grabada en el servidor');", true);
}
}
}
Nota: Se usa la propiedad "PostedFile" del control FileUpload para obtener el archivo enviado desde el cliente al servidor y lo grabamos en la carpeta Archivos usando su método "SaveAs".
Configurar el permiso de escritura al Usuario de IIS para escribir en la carpeta Archivos
Ingresar al Explorador de Windows y seleccionar la carpeta "Archivos" de nuestro proyecto, luego clic derecho "Propiedades", seleccionar el Tab "Security" y luego clic en el botón "Edit" y luego botón "Add" para agregar al usuario de IIS, si ya existe solo seleccionarlo y luego marcar los checks para darle permiso de escritura y lectura, tal como se muestra en la siguiente figura:
Probar la Pagina Web
Guardar el Sitio Web, clic derecho a la Pagina "Registro.aspx" y seleccionar "Ver en el explorador".
Clic al botón "Enviar" sin seleccionar nada y aparecerá un mensaje de validación que indica que hay que seleccionar un archivo de imagen.
Ahora intenta seleccionar un archivo que no sea un jpg o png, por ejemplo un archivo de texto y se muestra otro mensaje de validación que indica que tiene que ser jpg o png.
Finalmente, selecciona un archivo de imagen png o jpg y clic en "Enviar" y se guarda en el servidor en la carpeta "Archivos" y se muestra un mensaje de confirmación.
Comentario Final
En este post, aprendimos como subir un archivo de imagen al servidor, pero mostrando la imagen antes de enviarla para saber si es la adecuada. Para realizar este preview lo hicimos en el cliente mediante la clase FileReader de HTML5.
Lo interesante es que funciona en la mayoría de Navegadores (Browsers), por lo menos lo probé en IE11 y Chrome 36.
Descarga:
Demo16_Preview_Imagen_FileUpload
Etiquetas:
ASP .NET,
C#,
Demos,
FileReader,
FileSystem API,
FileUpload,
HTML5,
Images,
Javascript,
Lduenas,
PostedFile,
Preview,
Unobtrusive,
Web Forms
El Libro del Día: SignalR Real-time Application Cookbook
El Libro del Día: 2014-08-19
Titulo: SignalR Real-time Application Cookbook
Autor: Roberto Vespa
Editorial: Packt
Nro Paginas: 292
Capítulos:
Chapter 1: Understanding the Basics
Chapter 2: Using Hubs
Chapter 3: Using the JavaScript Hubs Client API
Chapter 4: Using the .NET Hubs Client API
Chapter 5: Using a Persistent Connection
Chapter 6: Handling Connections
Chapter 7: Analyzing Advanced Scenarios
Chapter 8: Building Complex Applications
Appendix A: Creating Web Projects
Appendix B: Insights
Descarga:
SignalR_Realtime_Application_Cookbook
Titulo: SignalR Real-time Application Cookbook
Autor: Roberto Vespa
Editorial: Packt
Nro Paginas: 292
Capítulos:
Chapter 1: Understanding the Basics
Chapter 2: Using Hubs
Chapter 3: Using the JavaScript Hubs Client API
Chapter 4: Using the .NET Hubs Client API
Chapter 5: Using a Persistent Connection
Chapter 6: Handling Connections
Chapter 7: Analyzing Advanced Scenarios
Chapter 8: Building Complex Applications
Appendix A: Creating Web Projects
Appendix B: Insights
Descarga:
SignalR_Realtime_Application_Cookbook
Etiquetas:
.NET,
APIs,
Asynchronous,
Complex Applications,
Connections,
Cookbook,
Hubs,
Javascript,
Libros,
Packt,
Persistent,
Realtime Applications,
Roberto Vespa,
SignalR,
Web Projects
lunes, 18 de agosto de 2014
El Libro del Día: jQuery UI 1.10 The User Interface Library for jQuery
El Libro del Día: 2014-08-18
Titulo: jQuery UI 1.10 The User Interface Library for jQuery
Autor: Alex Libby, Dan Wellman
Editorial: Packt
Nro Paginas: 502
Capítulos:
Chapter 1: Introducing jQuery UI
Chapter 2: The CSS Framework and Other Utilities
Chapter 3: Using the Tabs Widget
Chapter 4: The Accordion Widget
Chapter 5: The Dialog
Chapter 6: The Slider and Progressbar Widgets
Chapter 7: The Datepicker Widget
Chapter 8: The Button and Autocomplete Widgets
Chapter 9: Creating Menus
Chapter 10: Working with Tooltips
Chapter 11: Drag and Drop
Chapter 12: The Resizable Component
Chapter 13: Selecting and Sorting with jQuery UI
Chapter 14: UI Effects
Appendix: Help and Support
Descarga:
jQueryUI_1.10_UserInterface_Library_jQuery
Titulo: jQuery UI 1.10 The User Interface Library for jQuery
Autor: Alex Libby, Dan Wellman
Editorial: Packt
Nro Paginas: 502
Capítulos:
Chapter 1: Introducing jQuery UI
Chapter 2: The CSS Framework and Other Utilities
Chapter 3: Using the Tabs Widget
Chapter 4: The Accordion Widget
Chapter 5: The Dialog
Chapter 6: The Slider and Progressbar Widgets
Chapter 7: The Datepicker Widget
Chapter 8: The Button and Autocomplete Widgets
Chapter 9: Creating Menus
Chapter 10: Working with Tooltips
Chapter 11: Drag and Drop
Chapter 12: The Resizable Component
Chapter 13: Selecting and Sorting with jQuery UI
Chapter 14: UI Effects
Appendix: Help and Support
Descarga:
jQueryUI_1.10_UserInterface_Library_jQuery
Etiquetas:
Accordion,
Alex Libby,
Autocomplete,
Button,
CSS3,
Dan Wellman,
Datepicker,
Dialog,
Drag and Drop,
Effects,
jQuery UI,
Libros,
Menus,
Packt,
Progressbar,
Resizable Component,
Sorting,
Tabs,
Tooltips,
Widgets
domingo, 17 de agosto de 2014
El Libro del Día: Using the HTML5 Filesystem API
El Libro del Día: 2014-08-17
Titulo: Using the HTML5 Filesystem API
Autor: Eric Bidelman
Editorial: O'Reilly, Google Press
Nro Paginas: 72
Capítulos:
1. Introduction
2. Storage and Quota
3. Getting Started
4. Working with Files
5. Working with Directories
6. Copying, Renaming, and Moving Entries
7. Using Files
8. The Synchronous API
Descarga:
Using_HTML5_Filesystem_API
Titulo: Using the HTML5 Filesystem API
Autor: Eric Bidelman
Editorial: O'Reilly, Google Press
Nro Paginas: 72
Capítulos:
1. Introduction
2. Storage and Quota
3. Getting Started
4. Working with Files
5. Working with Directories
6. Copying, Renaming, and Moving Entries
7. Using Files
8. The Synchronous API
Descarga:
Using_HTML5_Filesystem_API
Etiquetas:
API,
Asynchronous,
Copying,
Directories,
Eric Bidelman,
Files,
Filesystem,
Google Press,
HTML5,
Libros,
Moving,
O'Reilly,
Quota,
Renaming,
Storage,
Synchronous
sábado, 16 de agosto de 2014
El Libro del Día: The Definitive Guide to HTML5 WebSocket
El Libro del Día: 2014-08-16
Titulo: The Definitive Guide to HTML5 WebSocket
Autor: Vanessa Wang, Frank Salim, Peter Moskovits
Editorial: Apress
Nro Paginas: 200
Capítulos:
Chapter 1: Introduction to HTML5 WebSocket
Chapter 2: The WebSocket API
Chapter 3: The WebSocket Protocol
Chapter 4: Building Instant Messaging and Chat
over WebSocket with XMPP
Chapter 5: Using Messaging over WebSocket with STOMP
Chapter 6: VNC with the Remote Framebuffer Protocol
Chapter 7: WebSocket Security
Chapter 8: Deployment Considerations
Appendix A: Inspecting WebSocket Traffic
Appendix B: WebSocket Resources
Descarga:
The_Definitive_Guide_HTML5_WebSocket
Titulo: The Definitive Guide to HTML5 WebSocket
Autor: Vanessa Wang, Frank Salim, Peter Moskovits
Editorial: Apress
Nro Paginas: 200
Capítulos:
Chapter 1: Introduction to HTML5 WebSocket
Chapter 2: The WebSocket API
Chapter 3: The WebSocket Protocol
Chapter 4: Building Instant Messaging and Chat
over WebSocket with XMPP
Chapter 5: Using Messaging over WebSocket with STOMP
Chapter 6: VNC with the Remote Framebuffer Protocol
Chapter 7: WebSocket Security
Chapter 8: Deployment Considerations
Appendix A: Inspecting WebSocket Traffic
Appendix B: WebSocket Resources
Descarga:
The_Definitive_Guide_HTML5_WebSocket
Etiquetas:
API,
Apress,
Chat,
Deployment,
Frank Salim,
HTML5,
Libros,
Messaging,
Peter Moskovits,
Protocols,
Remote Framebuffer Protocol,
Resources,
Security,
STOMP,
Vanessa Wang,
VNC,
WebSocket,
XMPP
viernes, 15 de agosto de 2014
El Libro del Día: The Definitive Guide to HTML5 Video
El Libro del Día: 2014-08-15
Titulo: The Definitive Guide to HTML5 Video
Autor: Silvia Pfeiffer
Editorial: Apress
Nro Paginas: 337
Capítulos:
Chapter 1: Introduction
Chapter 2: Audio and Video Elements
Chapter 3: CSS3 Styling
Chapter 4: JavaScript API
Chapter 5: HTML5 Media and SVG
Chapter 6: HTML5 Media and Canvas
Chapter 7: HTML5 Media and Web Workers
Chapter 8: HTML5 Audio API
Chapter 9: Media Accessibility and Internationalization
Chapter 10: Audio and Video Devices
Appendix: Summary and Outlook
Descarga:
The_Definitive_Guide_HTML5_Video
Titulo: The Definitive Guide to HTML5 Video
Autor: Silvia Pfeiffer
Editorial: Apress
Nro Paginas: 337
Capítulos:
Chapter 1: Introduction
Chapter 2: Audio and Video Elements
Chapter 3: CSS3 Styling
Chapter 4: JavaScript API
Chapter 5: HTML5 Media and SVG
Chapter 6: HTML5 Media and Canvas
Chapter 7: HTML5 Media and Web Workers
Chapter 8: HTML5 Audio API
Chapter 9: Media Accessibility and Internationalization
Chapter 10: Audio and Video Devices
Appendix: Summary and Outlook
Descarga:
The_Definitive_Guide_HTML5_Video
Etiquetas:
Accessibility,
Apress,
Audio,
Audio API,
Canvas,
CSS3,
Devices,
HTML5,
Internationalization,
Javascript,
Libros,
Silvia Pfeiffer,
SVG,
Video,
Web Workers
jueves, 14 de agosto de 2014
El Demo del Día: Plantilla Jerárquica con el Control Web Repeater
Plantilla Jerárquica con el Control Web Repeater
Requerimiento
Se desea mostrar una consulta jerárquica de productos por categoría en una grilla en ASP .NET. La consulta debe ser desconectada.
Solución
No existe un control Jerárquico que muestre varias columnas tipo TreeGrid. El control TreeView muestra solo un nodo y el control GridView no soporta jerarquía.
La solución es usar plantillas jerárquicas en cualquiera de los controles enlazados a datos: GridView, DataList o Repeater.
Nosotros elegimos el Repeater y crearemos una plantilla jerárquica, es decir un control Repeater con otro control Repeater dentro.
Nota: En este caso quitaremos el ViewState en los dos controles Repeater para disminuir el HTML enviado al cliente ya que los filtros se harán en el servidor pero se mostraran en el cliente con Javascript.
Crear el Procedimiento Almacenado en la Base de Datos de SQL Server
Create Procedure [dbo].[uspCategoriesProductsListar]
As
Select CategoryID,CategoryName From Categories
Select ProductID,ProductName,SupplierID,CategoryID,UnitPrice,UnitsInStock From Products
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 beCategoria
{
public int IdCategoria { get; set; }
public string Nombre { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beCategoriaProducto
{
public List<beCategoria> ListaCategorias { get; set; }
public List<beProducto> ListaProductos { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Northwind.Librerias.EntidadesNegocio;
namespace Northwind.Librerias.AccesoDatos
{
public class daCategoriaProducto
{
public beCategoriaProducto obtenerListas(SqlConnection con)
{
beCategoriaProducto obeCategoriaProducto = new beCategoriaProducto();
List<beCategoria> lbeCategoria = null;
List<beProducto> lbeProducto = null;
SqlCommand cmd = new SqlCommand("uspCategoriesProductsListar", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataReader drd = cmd.ExecuteReader(); //Varios Selects
if (drd != null)
{
//Llenar las Categorias
lbeCategoria = new List<beCategoria>();
int posIdCat = drd.GetOrdinal("CategoryID");
int posNomCat = drd.GetOrdinal("CategoryName");
beCategoria obeCategoria;
while (drd.Read())
{
obeCategoria = new beCategoria();
obeCategoria.IdCategoria = drd.GetInt32(posIdCat);
obeCategoria.Nombre = drd.GetString(posNomCat);
lbeCategoria.Add(obeCategoria);
}
//Avanzar al siguiente Select
if (drd.NextResult())
{
//Llenar los Productos
lbeProducto = new List<beProducto>();
int posIdProducto = drd.GetOrdinal("ProductID");
int posNombre = drd.GetOrdinal("ProductName");
int posIdProveedor = drd.GetOrdinal("SupplierID");
int posIdCategoria = drd.GetOrdinal("CategoryID");
int posPrecioUnitario = drd.GetOrdinal("UnitPrice");
int posStock = drd.GetOrdinal("UnitsInStock");
beProducto obeProducto;
while (drd.Read())
{
obeProducto = new beProducto();
obeProducto.IdProducto = drd.GetInt32(posIdProducto);
obeProducto.Nombre = drd.GetString(posNombre);
obeProducto.IdProveedor = drd.GetInt32(posIdProveedor);
obeProducto.IdCategoria = drd.GetInt32(posIdCategoria);
obeProducto.PrecioUnitario = drd.GetDecimal(posPrecioUnitario);
obeProducto.Stock = drd.GetInt16(posStock);
lbeProducto.Add(obeProducto);
}
}
drd.Close();
obeCategoriaProducto.ListaCategorias = lbeCategoria;
obeCategoriaProducto.ListaProductos = lbeProducto;
}
return (obeCategoriaProducto);
}
}
}
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: "brCategoriaProducto:" y escribir el siguiente código:
using System;
using System.Collections.Generic; //List
using System.Data.SqlClient; //SqlConnection
using Northwind.Librerias.EntidadesNegocio; //beCategoriaProducto
using Northwind.Librerias.AccesoDatos; //daCategoriaProducto
namespace Northwind.Librerias.ReglasNegocio
{
public class brCategoriaProducto:brGeneral
{
public beCategoriaProducto obtenerListas()
{
beCategoriaProducto obeCategoriaProducto = null;
using (SqlConnection con = new SqlConnection(Conexion))
{
try
{
con.Open();
daCategoriaProducto odaCategoriaProducto = new daCategoriaProducto();
obeCategoriaProducto = odaCategoriaProducto.obtenerListas(con);
}
catch (SqlException ex)
{
//Capturar el error y grabar un Log
}
} //con.Close(); con.Dispose(); con = null;
return (obeCategoriaProducto);
}
}
}
Nota: La clase "brCategoriaProducto" 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.
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;
}
Crear la Pagina ASP .NET como un Formulario Web Form
Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "CategoriaProductos.aspx", para empezar a diseñar la pagina hay que hacer referencia a las Librerías de Negocio (que copia todas sus dependencias).
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CategoriaProductos.aspx.cs" Inherits="Paginas_CategoriaProducto" %>
<%@ Import Namespace="Northwind.Librerias.EntidadesNegocio" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" 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" />
<script>
function mostrarProductos(img, indice) {
var fila = document.getElementById("fila" + indice);
if (img.title == "Expandir") {
fila.style.display = "table-row";
img.src = "../Imagenes/Contraer.png";
img.title = "Contraer";
}
else {
fila.style.display = "none";
img.src = "../Imagenes/Expandir.png";
img.title = "Expandir";
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width:100%">
<tr>
<td class="Titulo">Plantillas Jerarquicas en el Repeater</td>
</tr>
<tr>
<td class="Subtitulo">Consulta de Productos x Categoria</td>
</tr>
<tr>
<td>
<asp:Repeater ID="rpCategoria" EnableViewState="false" runat="server">
<HeaderTemplate>
<table style="width:100%">
<tr style="background-color:blue;color:white">
<td style="width:10%">Código</td>
<td style="width:90%">Nombre de la Categoria</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:white;color:blue">
<td>
<img id="imgSimbolo" alt="" title="Expandir"
src="../Imagenes/Expandir.png"
width="20" height="20" style="cursor:pointer"
onclick="mostrarProductos(this,<%#Container.ItemIndex%>);"/>
<%#((beCategoria)Container.DataItem).IdCategoria%>
</td>
<td>
<%#((beCategoria)Container.DataItem).Nombre%>
</td>
</tr>
<tr id="fila<%#Container.ItemIndex%>" style="display:none">
<td></td>
<td>
<asp:Repeater ID="rpProducto" DataSource="<%#filtrarProductos
(((beCategoria)Container.DataItem).IdCategoria)%>"
EnableViewState="false" runat="server">
<HeaderTemplate>
<table style="width:100%">
<tr style="background-color:red;color:white">
<td style="width:20%">Código</td>
<td style="width:40%">Nombre del Producto</td>
<td style="width:20%">Precio</td>
<td style="width:20%">Stock</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:white;color:red">
<td><%#((beProducto)Container.DataItem).IdProducto%></td>
<td><%#((beProducto)Container.DataItem).Nombre%></td>
<td><%#((beProducto)Container.DataItem).
PrecioUnitario.ToString("n2")%></td>
<td><%#((beProducto)Container.DataItem).Stock%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Nota: Inicialmente los controles Repeaters de productos creados por cada categoría están ocultos (display:none), pero por código Javascript lo mostramos usando: display:"table-row". No usamos display:inline ya que no se vería bien en algunos navegadores, en cambio, usando "table-row" se muestra sin problemas en todos los navegadores.
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.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.ReglasNegocio;
public partial class Paginas_CategoriaProducto : System.Web.UI.Page
{
private List<beProducto> lbeProducto;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
brCategoriaProducto obrCategoriaProducto = new brCategoriaProducto();
beCategoriaProducto obeCategoriaProducto = obrCategoriaProducto.obtenerListas();
lbeProducto = obeCategoriaProducto.ListaProductos;
rpCategoria.DataSource = obeCategoriaProducto.ListaCategorias;
rpCategoria.DataBind();
}
}
protected List<beProducto> filtrarProductos(int idCategoria)
{
return (lbeProducto.FindAll(x => x.IdCategoria.Equals(idCategoria)));
}
}
Nota: En el evento load se carga las 2 listas de categorías y productos, luego se enlaza las categorías al primer control Repeater y el segundo se enlaza a una función "filtrarProductos" que solo selecciona las productos de cada categoría.
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 "CategoriaProductos.aspx" y seleccionar "Ver en el explorador".
Desplegar cada código de categoría dando clic a la imagen de Expandir (+) y se mostrarán los productos de dicha categoría y para ocultarla usar la imagen de Contraer (-).
Comentario Final
En este post hemos visto como crear una presentación jerárquica usando plantillas en el control Repeater. Hemos trabajado solo con 2 niveles pero podría ser de varios niveles. Como comentario final, si aprendemos bien a usar plantillas de datos (Data Templates) en cualquier control web (enlazado a datos) podemos darle la apariencia que deseemos, sin necesidad de tener un control especifico para cada funcionalidad.
Espero les sirva y será hasta la siguiente semana que veremos como trabajar con el GridView: Paginar, Ordenar, Filtrar en las cabeceras, Pies, etc.
Descarga:
Demo15_Plantilla_Jerarquica_Repeater
Requerimiento
Se desea mostrar una consulta jerárquica de productos por categoría en una grilla en ASP .NET. La consulta debe ser desconectada.
Solución
No existe un control Jerárquico que muestre varias columnas tipo TreeGrid. El control TreeView muestra solo un nodo y el control GridView no soporta jerarquía.
La solución es usar plantillas jerárquicas en cualquiera de los controles enlazados a datos: GridView, DataList o Repeater.
Nosotros elegimos el Repeater y crearemos una plantilla jerárquica, es decir un control Repeater con otro control Repeater dentro.
Nota: En este caso quitaremos el ViewState en los dos controles Repeater para disminuir el HTML enviado al cliente ya que los filtros se harán en el servidor pero se mostraran en el cliente con Javascript.
Crear el Procedimiento Almacenado en la Base de Datos de SQL Server
Create Procedure [dbo].[uspCategoriesProductsListar]
As
Select CategoryID,CategoryName From Categories
Select ProductID,ProductName,SupplierID,CategoryID,UnitPrice,UnitsInStock From Products
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 beCategoria
{
public int IdCategoria { get; set; }
public string Nombre { get; set; }
}
}
Agregar una nueva clase al proyecto y llamarla "beProducto":
using System;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beProducto
{
public int IdProducto { get; set; }
public string Nombre { get; set; }
public int IdProveedor { get; set; }
public int IdCategoria { get; set; }
public decimal PrecioUnitario { get; set; }
public short Stock { get; set; }
}
}
Agregar otra clase al proyecto y llamarla "beCategoriaProducto":
using System;
using System.Collections.Generic;
namespace Northwind.Librerias.EntidadesNegocio
{
public class beCategoriaProducto
{
public List<beCategoria> ListaCategorias { get; set; }
public List<beProducto> ListaProductos { 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", primero hacer una referencia a la Librería de Entidades del Negocio y luego modificar el código de la clase como sigue:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Northwind.Librerias.EntidadesNegocio;
namespace Northwind.Librerias.AccesoDatos
{
public class daCategoriaProducto
{
public beCategoriaProducto obtenerListas(SqlConnection con)
{
beCategoriaProducto obeCategoriaProducto = new beCategoriaProducto();
List<beCategoria> lbeCategoria = null;
List<beProducto> lbeProducto = null;
SqlCommand cmd = new SqlCommand("uspCategoriesProductsListar", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataReader drd = cmd.ExecuteReader(); //Varios Selects
if (drd != null)
{
//Llenar las Categorias
lbeCategoria = new List<beCategoria>();
int posIdCat = drd.GetOrdinal("CategoryID");
int posNomCat = drd.GetOrdinal("CategoryName");
beCategoria obeCategoria;
while (drd.Read())
{
obeCategoria = new beCategoria();
obeCategoria.IdCategoria = drd.GetInt32(posIdCat);
obeCategoria.Nombre = drd.GetString(posNomCat);
lbeCategoria.Add(obeCategoria);
}
//Avanzar al siguiente Select
if (drd.NextResult())
{
//Llenar los Productos
lbeProducto = new List<beProducto>();
int posIdProducto = drd.GetOrdinal("ProductID");
int posNombre = drd.GetOrdinal("ProductName");
int posIdProveedor = drd.GetOrdinal("SupplierID");
int posIdCategoria = drd.GetOrdinal("CategoryID");
int posPrecioUnitario = drd.GetOrdinal("UnitPrice");
int posStock = drd.GetOrdinal("UnitsInStock");
beProducto obeProducto;
while (drd.Read())
{
obeProducto = new beProducto();
obeProducto.IdProducto = drd.GetInt32(posIdProducto);
obeProducto.Nombre = drd.GetString(posNombre);
obeProducto.IdProveedor = drd.GetInt32(posIdProveedor);
obeProducto.IdCategoria = drd.GetInt32(posIdCategoria);
obeProducto.PrecioUnitario = drd.GetDecimal(posPrecioUnitario);
obeProducto.Stock = drd.GetInt16(posStock);
lbeProducto.Add(obeProducto);
}
}
drd.Close();
obeCategoriaProducto.ListaCategorias = lbeCategoria;
obeCategoriaProducto.ListaProductos = lbeProducto;
}
return (obeCategoriaProducto);
}
}
}
Crear una Librería de Reglas del Negocio
Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.ReglasNegocio", hacer una referencia a la Librería de Entidades del Negocio, a la Librería de Acceso a Datos y a System.Configuration y luego 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: "brCategoriaProducto:" y escribir el siguiente código:
using System;
using System.Collections.Generic; //List
using System.Data.SqlClient; //SqlConnection
using Northwind.Librerias.EntidadesNegocio; //beCategoriaProducto
using Northwind.Librerias.AccesoDatos; //daCategoriaProducto
namespace Northwind.Librerias.ReglasNegocio
{
public class brCategoriaProducto:brGeneral
{
public beCategoriaProducto obtenerListas()
{
beCategoriaProducto obeCategoriaProducto = null;
using (SqlConnection con = new SqlConnection(Conexion))
{
try
{
con.Open();
daCategoriaProducto odaCategoriaProducto = new daCategoriaProducto();
obeCategoriaProducto = odaCategoriaProducto.obtenerListas(con);
}
catch (SqlException ex)
{
//Capturar el error y grabar un Log
}
} //con.Close(); con.Dispose(); con = null;
return (obeCategoriaProducto);
}
}
}
Crear la Aplicación Web en ASP .NET Web Form
Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "Demo15" y crear las siguientes carpetas:
- Estilos: Para el archivo de hoja de estilo (CSS).
- Imagenes: Conteniendo 2 archivos: Contraer.png y Expandir.png
- 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:
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;
}
Crear la Pagina ASP .NET como un Formulario Web Form
Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "CategoriaProductos.aspx", para empezar a diseñar la pagina hay que hacer referencia a las Librerías de Negocio (que copia todas sus dependencias).
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CategoriaProductos.aspx.cs" Inherits="Paginas_CategoriaProducto" %>
<%@ Import Namespace="Northwind.Librerias.EntidadesNegocio" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" 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" />
<script>
function mostrarProductos(img, indice) {
var fila = document.getElementById("fila" + indice);
if (img.title == "Expandir") {
fila.style.display = "table-row";
img.src = "../Imagenes/Contraer.png";
img.title = "Contraer";
}
else {
fila.style.display = "none";
img.src = "../Imagenes/Expandir.png";
img.title = "Expandir";
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width:100%">
<tr>
<td class="Titulo">Plantillas Jerarquicas en el Repeater</td>
</tr>
<tr>
<td class="Subtitulo">Consulta de Productos x Categoria</td>
</tr>
<tr>
<td>
<asp:Repeater ID="rpCategoria" EnableViewState="false" runat="server">
<HeaderTemplate>
<table style="width:100%">
<tr style="background-color:blue;color:white">
<td style="width:10%">Código</td>
<td style="width:90%">Nombre de la Categoria</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:white;color:blue">
<td>
<img id="imgSimbolo" alt="" title="Expandir"
src="../Imagenes/Expandir.png"
width="20" height="20" style="cursor:pointer"
onclick="mostrarProductos(this,<%#Container.ItemIndex%>);"/>
<%#((beCategoria)Container.DataItem).IdCategoria%>
</td>
<td>
<%#((beCategoria)Container.DataItem).Nombre%>
</td>
</tr>
<tr id="fila<%#Container.ItemIndex%>" style="display:none">
<td></td>
<td>
<asp:Repeater ID="rpProducto" DataSource="<%#filtrarProductos
(((beCategoria)Container.DataItem).IdCategoria)%>"
EnableViewState="false" runat="server">
<HeaderTemplate>
<table style="width:100%">
<tr style="background-color:red;color:white">
<td style="width:20%">Código</td>
<td style="width:40%">Nombre del Producto</td>
<td style="width:20%">Precio</td>
<td style="width:20%">Stock</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:white;color:red">
<td><%#((beProducto)Container.DataItem).IdProducto%></td>
<td><%#((beProducto)Container.DataItem).Nombre%></td>
<td><%#((beProducto)Container.DataItem).
PrecioUnitario.ToString("n2")%></td>
<td><%#((beProducto)Container.DataItem).Stock%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Nota: Inicialmente los controles Repeaters de productos creados por cada categoría están ocultos (display:none), pero por código Javascript lo mostramos usando: display:"table-row". No usamos display:inline ya que no se vería bien en algunos navegadores, en cambio, usando "table-row" se muestra sin problemas en todos los navegadores.
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.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.ReglasNegocio;
public partial class Paginas_CategoriaProducto : System.Web.UI.Page
{
private List<beProducto> lbeProducto;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
brCategoriaProducto obrCategoriaProducto = new brCategoriaProducto();
beCategoriaProducto obeCategoriaProducto = obrCategoriaProducto.obtenerListas();
lbeProducto = obeCategoriaProducto.ListaProductos;
rpCategoria.DataSource = obeCategoriaProducto.ListaCategorias;
rpCategoria.DataBind();
}
}
protected List<beProducto> filtrarProductos(int idCategoria)
{
return (lbeProducto.FindAll(x => x.IdCategoria.Equals(idCategoria)));
}
}
Nota: En el evento load se carga las 2 listas de categorías y productos, luego se enlaza las categorías al primer control Repeater y el segundo se enlaza a una función "filtrarProductos" que solo selecciona las productos de cada categoría.
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 "CategoriaProductos.aspx" y seleccionar "Ver en el explorador".
Desplegar cada código de categoría dando clic a la imagen de Expandir (+) y se mostrarán los productos de dicha categoría y para ocultarla usar la imagen de Contraer (-).
Comentario Final
En este post hemos visto como crear una presentación jerárquica usando plantillas en el control Repeater. Hemos trabajado solo con 2 niveles pero podría ser de varios niveles. Como comentario final, si aprendemos bien a usar plantillas de datos (Data Templates) en cualquier control web (enlazado a datos) podemos darle la apariencia que deseemos, sin necesidad de tener un control especifico para cada funcionalidad.
Espero les sirva y será hasta la siguiente semana que veremos como trabajar con el GridView: Paginar, Ordenar, Filtrar en las cabeceras, Pies, etc.
Descarga:
Demo15_Plantilla_Jerarquica_Repeater
Etiquetas:
ASP .NET,
C#,
CSS,
Data Templates,
Demos,
Jerarquía,
Lduenas,
Plantilla de Datos,
Plantilla Jerárquica,
Repeater,
Web Control,
WebForms
El Libro del Día: Pro Silverlight 5 in C#
El Libro del Día: 2014-08-14
Titulo: Pro Silverlight 5 in C# (4th Edition)
Autor: Matthew MacDonald
Editorial: Apress
Nro Paginas: 970
Capítulos:
Chapter 1: Introducing Silverlight
Chapter 2: XAML
Chapter 3: Layout
Chapter 4: Dependency Properties and Routed Events
Chapter 5: Elements
Chapter 6: The Application Model
Chapter 7: Navigation
Chapter 8: Shapes and Transforms
Chapter 9: Brushes, Bitmaps, and Printing
Chapter 10: Animation Basics
Chapter 11: Advanced Animation
Chapter 12: Sound, Video, and Deep Zoom
Chapter 13: Silverlight 3D
Chapter 14: Styles and Behaviors
Chapter 15: Control Templates
Chapter 16: Multithreading
Chapter 17: Browser Integration
Chapter 18: Out-of-Browser Applications
Chapter 19: ASP.NET Web Services
Chapter 20: Data Binding
Chapter 21: Data Controls
Chapter 22: File Access
Chapter 23: Networking
Descarga:
Pro_Silverlight_5_C#
Titulo: Pro Silverlight 5 in C# (4th Edition)
Autor: Matthew MacDonald
Editorial: Apress
Nro Paginas: 970
Capítulos:
Chapter 1: Introducing Silverlight
Chapter 2: XAML
Chapter 3: Layout
Chapter 4: Dependency Properties and Routed Events
Chapter 5: Elements
Chapter 6: The Application Model
Chapter 7: Navigation
Chapter 8: Shapes and Transforms
Chapter 9: Brushes, Bitmaps, and Printing
Chapter 10: Animation Basics
Chapter 11: Advanced Animation
Chapter 12: Sound, Video, and Deep Zoom
Chapter 13: Silverlight 3D
Chapter 14: Styles and Behaviors
Chapter 15: Control Templates
Chapter 16: Multithreading
Chapter 17: Browser Integration
Chapter 18: Out-of-Browser Applications
Chapter 19: ASP.NET Web Services
Chapter 20: Data Binding
Chapter 21: Data Controls
Chapter 22: File Access
Chapter 23: Networking
Descarga:
Pro_Silverlight_5_C#
Etiquetas:
3D,
Animation,
Apress,
Bitmaps,
Brushes,
C#,
Elements,
Layouts,
Libros,
Matthew MacDonald,
Multithreading,
Navigation,
Printing,
Routed Events,
Shapes,
Silverlight,
Styles,
Templates,
Transforms,
XAML
miércoles, 13 de agosto de 2014
El Libro del Día: WebRTC Blueprints
El Libro del Día: 2014-08-13
Titulo: WebRTC Blueprints
Autor: Andrii Sergiienko
Editorial: Packt
Nro Paginas: 176
Capítulos:
Chapter 1: Developing a WebRTC Application
Chapter 2: Using the WebRTC Data API
Chapter 3: The Media Streaming and Screen Casting Services
Chapter 4: Security and Authentication
Chapter 5: Mobile Platforms
Descarga:
WebRTC_Blueprints
Titulo: WebRTC Blueprints
Autor: Andrii Sergiienko
Editorial: Packt
Nro Paginas: 176
Capítulos:
Chapter 1: Developing a WebRTC Application
Chapter 2: Using the WebRTC Data API
Chapter 3: The Media Streaming and Screen Casting Services
Chapter 4: Security and Authentication
Chapter 5: Mobile Platforms
Descarga:
WebRTC_Blueprints
Etiquetas:
Andrii Sergiienko,
API,
Authentication,
Blueprints,
HTML5,
Libros,
Media Streaming,
Mobile,
Packt,
Real Time Communications,
Screen Casting Services,
Security,
WebRTC,
WebSocket
martes, 12 de agosto de 2014
El Libro del Día: Learning Responsive Web Design
El Libro del Día: 2014-08-12
Titulo: Learning Responsive Web Design
Autor: Clarissa Peterson
Editorial: O'Reilly
Nro Paginas: 412
Capítulos:
Part I FOUNDAT IONS OF RESPONSIVE DESIGN
Chapter 1 What Is Responsive Design?
Chapter 2 Responsive Content
Part II CREAT ING RESPONSIVE WEBSITES
Chapter 3 HTML for Responsive Sites
Chapter 4 CSS for Responsive Sites
Chapter 5 Media Queries
Chapter 6 Images
Part III WORKING RESPONSIVELY
Chapter 7 Responsive Workflow
Chapter 8 Mobile and Beyond
Part IV DESIGNING RESPONSIVE WEBSITES
Chapter 9 Typography
Chapter 10 Navigation and Header Layout
Chapter 11 Performance
Descarga:
Learning_Responsive_Web_Design
Titulo: Learning Responsive Web Design
Autor: Clarissa Peterson
Editorial: O'Reilly
Nro Paginas: 412
Capítulos:
Part I FOUNDAT IONS OF RESPONSIVE DESIGN
Chapter 1 What Is Responsive Design?
Chapter 2 Responsive Content
Part II CREAT ING RESPONSIVE WEBSITES
Chapter 3 HTML for Responsive Sites
Chapter 4 CSS for Responsive Sites
Chapter 5 Media Queries
Chapter 6 Images
Part III WORKING RESPONSIVELY
Chapter 7 Responsive Workflow
Chapter 8 Mobile and Beyond
Part IV DESIGNING RESPONSIVE WEBSITES
Chapter 9 Typography
Chapter 10 Navigation and Header Layout
Chapter 11 Performance
Descarga:
Learning_Responsive_Web_Design
Etiquetas:
Clarissa Peterson,
CSS3,
Header Layout,
HTML5,
Images,
Libros,
Media Queries,
Mobile,
Navigation,
O'Reilly,
Performance,
Responsive Content,
Responsive Web Design,
Responsive Workflow,
Typography
lunes, 11 de agosto de 2014
El Libro del Día: HTML5 and CSS3 Responsive Web Design Cookbook
El Libro del Día: 2014-08-11
Titulo: HTML5 and CSS3 Responsive Web Design Cookbook
Autor: Benjamin LaGrone
Editorial: Packt
Nro Paginas: 204
Capítulos:
Chapter 1: Responsive Elements and Media
Chapter 2: Responsive Typography
Chapter 3: Responsive Layout
Chapter 4: Using Responsive Frameworks
Chapter 5: Making Mobile-first Web Applications
Chapter 6: Optimizing Responsive Content
Chapter 7: Unobtrusive JavaScript
Descarga:
HTML5_CSS3_Responsive_Web_Design_Cookbook
Titulo: HTML5 and CSS3 Responsive Web Design Cookbook
Autor: Benjamin LaGrone
Editorial: Packt
Nro Paginas: 204
Capítulos:
Chapter 1: Responsive Elements and Media
Chapter 2: Responsive Typography
Chapter 3: Responsive Layout
Chapter 4: Using Responsive Frameworks
Chapter 5: Making Mobile-first Web Applications
Chapter 6: Optimizing Responsive Content
Chapter 7: Unobtrusive JavaScript
Descarga:
HTML5_CSS3_Responsive_Web_Design_Cookbook
Etiquetas:
Benjamin LaGrone,
Cookbook,
CSS3,
Elements,
HTML5,
Javascript,
Layout,
Libros,
Media,
Mobile,
Packt,
Responsive Frameworks,
Responsive Web Design,
Typography,
Unobtrusive
domingo, 10 de agosto de 2014
El Libro del Día: Jump Start Responsive Web Design
El Libro del Día: 2014-08-10
Titulo: Jump Start Responsive Web Design
Autor: Craig Sharkie, Andrew Fisher
Editorial: SitePoint
Nro Paginas: 161
Capítulos:
Chapter 1 Becoming Responsive
Chapter 2 Fluid Grids
Chapter 3 Adaptive Images
Chapter 4 Understanding Media Queries
Chapter 5 Responsive Content
Chapter 6 Responsive Boilerplate
Descarga:
JumpStart_Responsive_Web_Design
Titulo: Jump Start Responsive Web Design
Autor: Craig Sharkie, Andrew Fisher
Editorial: SitePoint
Nro Paginas: 161
Capítulos:
Chapter 1 Becoming Responsive
Chapter 2 Fluid Grids
Chapter 3 Adaptive Images
Chapter 4 Understanding Media Queries
Chapter 5 Responsive Content
Chapter 6 Responsive Boilerplate
Descarga:
JumpStart_Responsive_Web_Design
Etiquetas:
Andrew Fisher,
Boilerplate,
Content,
Craig Sharkie,
CSS3,
Grids,
HTML5,
Images,
Jump Start,
Libros,
Media Queries,
Responsive Web Design,
Sitepoint
sábado, 9 de agosto de 2014
El Libro del Día: Professional Visual Studio 2013
El Libro del Día: 2014-08-09
Titulo: Professional Visual Studio 2013
Autor: Bruce Johnson
Editorial: Wrox
Nro Paginas: 1102
Capítulos:
Part I - Integrated Development Environment
Chapter 1 A Quick Tour
Chapter 2 The Solution Explorer, Toolbox, and Properties
Chapter 3 Options and Customizations
Chapter 4 The Visual Studio Workspace
Chapter 5 Find and Replace and Help
Part II - Getting Started
Chapter 6 Solutions, Projects, and Items
Chapter 7 IntelliSense and Bookmarks
Chapter 8 Code Snippets and Refactoring
Chapter 9 Server Explorer
Chapter 10 Modeling with the Class Designer
Part III - Digging Deeper
Chapter 11 Unit Testing
Chapter 12 Documentation with XML Comments
Chapter 13 Code Consistency Tools
Chapter 14 Code Generation with T4
Chapter 15 Project and Item Templates
Chapter 16 Language-Specific Features
Part IV - Rich Client Applications
Chapter 17 Windows Forms Applications
Chapter 18 Windows Presentation Foundation (WPF)
Chapter 19 Office Business Applications
Chapter 20 Windows Store Applications
Part V - Web Applications
Chapter 21 ASP.NET Web Forms
Chapter 22 ASP.NET MVC
Chapter 23 Silverlight
Chapter 24 Dynamic Data
Chapter 25 SharePoint
Chapter 26 Windows Azure
Part VI - Data
Chapter 27 Visual Database Tools
Chapter 28 DataSets and DataBinding
Chapter 29 Language Integrated Queries (LINQ)
Chapter 30 The ADO.NET Entity Framework
Chapter 31 Reporting
Part VII - Application Services
Chapter 32 Windows Communication Foundation (WCF)
Chapter 33 Windows Workflow Foundation (WF)
Chapter 34 Client Application Services
Chapter 35 Synchronization Services
Chapter 36 WCF RIA Services
Part VIII Configuration and Resources
Chapter 37 Configuration Files
Chapter 38 Connection Strings
Chapter 39 Resource Files
Part IX - Debugging
Chapter 40 Using the Debugging Windows
Chapter 41 Debugging with Breakpoints
Chapter 42 DataTips, Debug Proxies, and Visualizers
Chapter 43 Debugging Web Applications
Chapter 44 Advanced Debugging Techniques
Part X - Build and Deployment
Chapter 45 Upgrading with Visual Studio 2013
Chapter 46 Build Customization
Chapter 47 Assembly Versioning and Signing
Chapter 48 Obfuscation, Application Monitoring, and Management
Chapter 49 Packaging and Deployment
Chapter 50 Web Application Deployment
Part XI - Customizing and Extending Visual Studio
Chapter 51 The Automation Model
Chapter 52 Add-Ins
Chapter 53 Managed Extensibility Framework (MEF)
Part XII - Visual Studio Ultimate
Chapter 54 Visual Studio Ultimate for Architects
Chapter 55 Visual Studio Ultimate for Developers
Chapter 56 Visual Studio Ultimate for Testers
Chapter 57 Team Foundation Server
Descarga:
Professional_VisualStudio_2013
Titulo: Professional Visual Studio 2013
Autor: Bruce Johnson
Editorial: Wrox
Nro Paginas: 1102
Capítulos:
Part I - Integrated Development Environment
Chapter 1 A Quick Tour
Chapter 2 The Solution Explorer, Toolbox, and Properties
Chapter 3 Options and Customizations
Chapter 4 The Visual Studio Workspace
Chapter 5 Find and Replace and Help
Part II - Getting Started
Chapter 6 Solutions, Projects, and Items
Chapter 7 IntelliSense and Bookmarks
Chapter 8 Code Snippets and Refactoring
Chapter 9 Server Explorer
Chapter 10 Modeling with the Class Designer
Part III - Digging Deeper
Chapter 11 Unit Testing
Chapter 12 Documentation with XML Comments
Chapter 13 Code Consistency Tools
Chapter 14 Code Generation with T4
Chapter 15 Project and Item Templates
Chapter 16 Language-Specific Features
Part IV - Rich Client Applications
Chapter 17 Windows Forms Applications
Chapter 18 Windows Presentation Foundation (WPF)
Chapter 19 Office Business Applications
Chapter 20 Windows Store Applications
Part V - Web Applications
Chapter 21 ASP.NET Web Forms
Chapter 22 ASP.NET MVC
Chapter 23 Silverlight
Chapter 24 Dynamic Data
Chapter 25 SharePoint
Chapter 26 Windows Azure
Part VI - Data
Chapter 27 Visual Database Tools
Chapter 28 DataSets and DataBinding
Chapter 29 Language Integrated Queries (LINQ)
Chapter 30 The ADO.NET Entity Framework
Chapter 31 Reporting
Part VII - Application Services
Chapter 32 Windows Communication Foundation (WCF)
Chapter 33 Windows Workflow Foundation (WF)
Chapter 34 Client Application Services
Chapter 35 Synchronization Services
Chapter 36 WCF RIA Services
Part VIII Configuration and Resources
Chapter 37 Configuration Files
Chapter 38 Connection Strings
Chapter 39 Resource Files
Part IX - Debugging
Chapter 40 Using the Debugging Windows
Chapter 41 Debugging with Breakpoints
Chapter 42 DataTips, Debug Proxies, and Visualizers
Chapter 43 Debugging Web Applications
Chapter 44 Advanced Debugging Techniques
Part X - Build and Deployment
Chapter 45 Upgrading with Visual Studio 2013
Chapter 46 Build Customization
Chapter 47 Assembly Versioning and Signing
Chapter 48 Obfuscation, Application Monitoring, and Management
Chapter 49 Packaging and Deployment
Chapter 50 Web Application Deployment
Part XI - Customizing and Extending Visual Studio
Chapter 51 The Automation Model
Chapter 52 Add-Ins
Chapter 53 Managed Extensibility Framework (MEF)
Part XII - Visual Studio Ultimate
Chapter 54 Visual Studio Ultimate for Architects
Chapter 55 Visual Studio Ultimate for Developers
Chapter 56 Visual Studio Ultimate for Testers
Chapter 57 Team Foundation Server
Descarga:
Professional_VisualStudio_2013
Etiquetas:
ASP .NET,
Bruce Johnson,
Debugging,
IDE,
Libros,
LINQ,
MVC,
Office Business,
Reporting,
SharePoint,
Silverlight,
Unit Testing,
Visual Studio,
WCF,
Web Forms,
WF,
Windows Forms,
Windows Store,
WPF,
Wrox
viernes, 8 de agosto de 2014
El Libro del Día: Pro ASP.NET 4.5 in VB
El Libro del Día: 2014-08-08
Titulo: Pro ASP.NET 4.5 in VB (5th Edition)
Autor: Dan Mabbutt, Adam Freeman, Matthew MacDonald
Editorial: Apress
Nro Paginas: 1192
Capítulos:
Part 1: Getting Started
Chapter 1: Your First ASP.NET Application
Chapter 2: Putting ASP.NET in Context
Chapter 3: Essential VB Language Features
Chapter 4: Using jQuery
Chapter 5: Essential Development Tools
Chapter 6: SportsStore: A Real Application
Chapter 7: SportsStore: Navigation and Cart
Chapter 8: SportsStore: Completing the Cart
Chapter 9: SportsStore: Administration
Chapter 10: SportsStore: Deployment
Chapter 11: Testable Web Apps
Part 2: The Core ASP.NET Platform
Chapter 12: Working with Web Forms
Chapter 13: Lifecycles and Context
Chapter 14: Modules
Chapter 15: Handlers
Chapter 16: Page and Control Lifecycle Events
Chapter 17: Managing Request Execution
Chapter 18: Managing State Data
Chapter 19: Caching
Chapter 20: Caching Output
Chapter 21: Handling Errors
Chapter 22: Managing Paths
Chapter 23: URL Routing
Chapter 24: Advanced URL Routing
Chapter 25: Authentication and Authorization
Chapter 26: Membership and OpenAuth
Chapter 27: ASP.NET Configuration
Chapter 28: Asynchronous Request Handling
Part 3: Forms and Controls
Chapter 29: Working with Controls
Chapter 30: Forms and Request Validation
Chapter 31: Creating Custom Controls
Chapter 32: Stateful Controls
Chapter 33: Server-Side HTML Elements
Chapter 34: Model Binding
Chapter 35: Data Binding
Chapter 36: Basic Data Controls
Chapter 37: Complex Data Controls
Chapter 38: Other ASP.NET Controls
Part 4: Client-Side Development
Chapter 39: Managing Scripts and Styles
Chapter 40: Ajax and Web Services
Chapter 41: Client-Side Validation
Descarga:
Pro_ASPNET_4.5_VB
Titulo: Pro ASP.NET 4.5 in VB (5th Edition)
Autor: Dan Mabbutt, Adam Freeman, Matthew MacDonald
Editorial: Apress
Nro Paginas: 1192
Capítulos:
Part 1: Getting Started
Chapter 1: Your First ASP.NET Application
Chapter 2: Putting ASP.NET in Context
Chapter 3: Essential VB Language Features
Chapter 4: Using jQuery
Chapter 5: Essential Development Tools
Chapter 6: SportsStore: A Real Application
Chapter 7: SportsStore: Navigation and Cart
Chapter 8: SportsStore: Completing the Cart
Chapter 9: SportsStore: Administration
Chapter 10: SportsStore: Deployment
Chapter 11: Testable Web Apps
Part 2: The Core ASP.NET Platform
Chapter 12: Working with Web Forms
Chapter 13: Lifecycles and Context
Chapter 14: Modules
Chapter 15: Handlers
Chapter 16: Page and Control Lifecycle Events
Chapter 17: Managing Request Execution
Chapter 18: Managing State Data
Chapter 19: Caching
Chapter 20: Caching Output
Chapter 21: Handling Errors
Chapter 22: Managing Paths
Chapter 23: URL Routing
Chapter 24: Advanced URL Routing
Chapter 25: Authentication and Authorization
Chapter 26: Membership and OpenAuth
Chapter 27: ASP.NET Configuration
Chapter 28: Asynchronous Request Handling
Part 3: Forms and Controls
Chapter 29: Working with Controls
Chapter 30: Forms and Request Validation
Chapter 31: Creating Custom Controls
Chapter 32: Stateful Controls
Chapter 33: Server-Side HTML Elements
Chapter 34: Model Binding
Chapter 35: Data Binding
Chapter 36: Basic Data Controls
Chapter 37: Complex Data Controls
Chapter 38: Other ASP.NET Controls
Part 4: Client-Side Development
Chapter 39: Managing Scripts and Styles
Chapter 40: Ajax and Web Services
Chapter 41: Client-Side Validation
Descarga:
Pro_ASPNET_4.5_VB
Etiquetas:
Adam Freeman,
AJAX,
Apress,
ASP .NET,
Asynchronous,
Binding,
Caching,
Controls,
Custom Controls,
Dan Mabbutt,
Handlers,
jQuery,
Libros,
Matthew MacDonald,
Membership,
Modules,
SportsStore,
URL Routing,
VB,
Web Forms
Suscribirse a:
Entradas (Atom)