miércoles, 18 de junio de 2014

Libro La Biblia de Visual Basic .NET - Preguntas de Repaso - Capítulo 5

Preguntas de Repaso: Desarrollando Aplicaciones Web con ASP .NET

1.    En que espacio de nombres se encuentra ASP .NET?

2.    Con qué nombre se le conoce al IDE de Visual Studio para desarrollar Sitios Web?

3.    Menciona 3 Lenguajes con que podemos desarrollar aplicaciones web en ASP .NET

4.    Qué características de ASP .NET hacen que las aplicaciones sean mas rápidas?

5.    Por qué las páginas ASP .NET que usan controles web pueden verse en cualquier Browser?.

6.    Qué es un formulario web en ASP .NET?

7.    Cómo se clasifican los controles del servidor?

8.    Por qué una pagina ASP .NET es lenta solo la primera vez que carga?

9.    Cómo se llama el proceso que ejecuta los servicios del IIS?

10. En cuantas ubicaciones se puede crear un nuevo sitio web?

11. Qué ejecutable debe correr en caso de que no este registrado ASP .NET en IIS en vez de volver a instalar primero el IIS y luego Visual Studio?

12. Qué es un control web intrínseco?

13. Mencione 5 controles web intrínsecos.

14. Cuando se trabaja con archivos en una aplicación web, cuál es el directorio por defecto donde se leen o escriben los archivos en disco?

15. A qué usuario debemos dar permiso en la carpeta para que la aplicación web pueda leer o escribir un archivo en ASP .NET?

16. En que lado debe realizarse las validaciones de una página: en el cliente o el servidor y porqué?

17. Cómo se llama el algoritmo de seguridad usado para comprobar si el que usa el sistema, por ejemplo la pagina es un usuario o un programa.

18. Qué debe hacerse para que al generar varios números al azar con consecutivamente no devuelvan el mismo número?

19. Cuál es la forma mas simple de subir un archivo desde la pagina hacia el servidor?

20. Cuál es el tamaño máximo del archivo por defecto al usar el control FileUpload y que debe hacerse para aumentar la capacidad?

21. Cuál es la alternativa mas simple para validar sin usar directamente Javascript en el cliente en ASP NET?

22. Menciona 3 controles de validación de ASP .NET?

23. Con qué control web se valida que un campo sea obligatorio?

24. Qué control de validación usaría para validar una fecha?

25. Qué control de validación usaría para validar un RUC, DNI ó teléfono?

26. Menciona 3 propiedades comunes de todos los controles de validación.

27. Cuál es la propiedad mas importante del control de validación que indica qué control se debe validar?

28. Cómo se llama el control que muestra un resumen con los mensajes de error de todos los controles de validación?

29. Para qué se usan las Hojas de Estilo en Cascada?

30. Qué ventajas tiene usar archivos CSS en una página ASP .NET?

31. Para qué se usan las páginas principales y qué extensión tienen?

32. Qué ventajas tiene usar páginas principales en ASP .NET?

33. Menciona los 3 controles web de navegación.

34. Con qué control web podemos ver la ubicación donde nos encontramos en el sitio web?

35. Cómo se llama el archivo XML donde se definen las páginas que tendrá el sitio web?

36. Cómo se llama el objeto que permite enlazar un mapa de sitio en un Menú o en un TreeView?

37. Cuál es la forma más simple de implementar fichas en un sitio web de ASP .NET?

38. Con qué propiedad del control web MultiView se especifica que vista (View) se va a visualizar?

39. Que propiedad tienen los controles web que indica que se debe guardar el estado o los valores en el cliente para que no se pierdan al hacer Postback?

40. Cuál es el control web mas usado en una aplicación con ASP .NET?

41. Cómo se llama la propiedad que permite crear dinámicamente las columnas en un control GridView?

42. Qué pasos debe realizar para personalizar columnas en un GridView?

43. Cuantos tipos de paginación podemos tener en una aplicación web?

44. Qué propiedades debe configurase para paginar un GridView?

45. En qué evento hay que programar la paginación del GridView?

46. Qué propiedad debe configurase para ordenar las columnas en un GridView?

47. En qué evento hay que programar la ordenación en el GridView?

48. Qué evento del control GridView puede usarse para crear dinámica mente controles?

49. Qué instrucción de enlace de datos es mas eficiente: DataBinder.Eval o Container.DataItem?

50. Con qué propiedad del GridView se especifica el registro que se va a editar?

51. Cuál es la diferencia entre guardar un dato usando el objeto Session y usando el objeto ViewState?

52. Qué se debe hacer para que una columna del GridView al pasar al modo edición no sea siempre un TextBox?

53. Cuál es la ventaja de usar plantillas en controles enlazados a datos?

54. Menciona 3 controles web que soporten plantillas.

55. Si se usa un control Repeater y se enlaza a un origen de datos, que hace falta para visualizar sus datos?

56. Cuál es el principal elemento de una plantilla que nunca debe faltar y especifica el diseño de las filas a repetirse?

57. Con qué etiquetas (tags) se indica en una plantilla que vamos a usar código incrustado del servidor, por ejemplo para llamar a una función?

58. Cuál es la diferencia del control DataList con respecto al Repeater?

59. Qué indica el elemento AlternatingItemTemplate en una plantilla?

60. En qué tipo de controles (HTML o Web) puede usarse el código incrustado del servidor?

61. Qué es una plantilla jerárquica y para qué sirve?

62. En una plantilla de un DataList con qué código incrustado del servidor se obtiene el índice de la fila actual enlazada al origen de datos?

El Libro del Día: Programming ASP.NET MVC 4

El Libro del Día: 2014-06-18

Titulo: Programming ASP.NET MVC 4
Autor: Jess Cbaduvick, Todd Snyder, Hrusikesh Panda
Editorial: O'Reilly
Nro Paginas: 492

Capítulos:
Part I. Up and Running
1. Fundamentals of ASP.NET MVC
2. ASP.NET MVC for Web Forms Developers
3. Working with Data
4. Client-Side Development
Part II. Going to the Next Level
5. Web Application Architecture
6. Enhancing Your Site with AJAX
7. The ASP.NET Web API
8. Advanced Data
9. Security
10. Mobile Web Development
Part III. Going Above and Beyond
11. Parallel, Asynchronous, and Real-Time Data Operations
12. Caching
13. Client-Side Optimization Techniques
14. Advanced Routing
15. Reusable UI Components
Part IV. Quality Control
16. Logging
17. Automated Testing
18. Build Automation
Part V. Going Live
19. Deployment
Part VI. Appendixes
A. ASP.NET MVC and Web Forms Integration
B. Leveraging NuGet as a Platform
C. Best Practices
D. Cross-Reference: Targeted Topics, Features, and Scenarios

Descarga:
Programming_ASPNET_MVC4

martes, 17 de junio de 2014

El Demo del Día: Animación usando Sprites en Windows Forms

Animación usando Sprites en Windows Forms

El Demo de hoy es una animación en Windows Forms usando un sprite o archivo con una secuencia de imagenes. Los sprites permiten reducir el numero de accesos a archivos para una aplicación que trabaja con imagenes, sobre todo es muy usado en los juegos.

Paso 1: Archivo con el Sprite a Animar

En este ejemplo tenemos un archivo llamado "Caminante.jpg" que tiene 3 filas x 6 columnas, es decir 18 cuadros, pero en este caso solo hay 14 imágenes diferentes. La primera fila tiene 6 imágenes con posiciones hacia la derecha y la segunda fila tiene 6 imágenes con posiciones hacia la izquierda.
El archivo tiene una dimensión de 624 x 450 pixeles por lo que cada imagen seria de 104 de ancho por 150 de alto.



Paso 2: Diseño del Formulario Windows Forms en .NET

Debemos crear una Aplicación en C# para Windows Forms llamada: "Animacion_Sprite" y renombrar el formulario a "frmCaminante".
Primero agregar un control PictureBox llamado "picCaminante" de tamaño "50x50", luego 2 controles RadioButton: "rbDerecha" y "rbIzquierda".
Finalmente, agregar un Timer llamado: "tmrAnima" con la propiedad Enable en "true" y el Interval en "100" milisegundos, tal como se muestra en la figura:



Paso 3: Código del Formulario en C# .NET

Escribir el siguiente código en el formulario, la función cargarImagen esta asociada al evento "load" del formulario y la función "animarCaminante" esta asociado al evento "Tick" del Timer. Además la función "caminarDerecha" esta asociada al radio button "rbDerecha" y la función: "caminarIzquierda" esta asociada al radio button "rbIzquierda".

    public partial class frmCaminante : Form
    {
        Bitmap bmp;
        Rectangle rect;
        int posX,posY,x,c;

        public frmCaminante()
        {
            InitializeComponent();
        }

        private void cargarImagen(object sender, EventArgs e)
        {
            bmp = new Bitmap("Caminante.png");          
        }

        private void animarCaminante(object sender, EventArgs e)
        {
            rect = new Rectangle(posX, posY, 104, 150);
            picCaminante.Image = bmp.Clone(rect, bmp.PixelFormat);
            if (rbDerecha.Checked) animarDerecha();
            if (rbIzquierda.Checked) animarIzquierda();
        }

        private void animarDerecha()
        {
            posX += 104;
            c++;
            picCaminante.Left = x;
            if (x <= this.Width) { x += 10; }
            else { x = -picCaminante.Width; }
            if (c == 5)
            {
                c = 0;
                posX = 104;
            }
        }

        private void animarIzquierda()
        {
            posX += 104;
            c++;
            picCaminante.Left = x;
            if (x>-picCaminante.Width) { x -= 10; }
            else { x = this.Width; }
            if (c == 5)
            {
                c = 0;
                posX = 104;
            }
        }

        private void caminarDerecha(object sender, EventArgs e)
        {
            if (rbDerecha.Checked)
            {
                c = 0;
                posX = 104;
                posY = 0;
            }
        }

        private void caminarIzquierda(object sender, EventArgs e)
        {
            if (rbIzquierda.Checked)
            {
                c = 0;
                posX = 104;
                posY = 150;
            }
        }
    }

Paso 4: Ejecución del Formulario Windows Forms

Después de escribir el código de arriba, crear el archivo: "Caminante.jpg" en la carpeta bin/Debug de la aplicación y ejecutar pulsando F5. Por defecto la animación se inicia a la derecha, para cambiar seleccionar el radio button.


Descarga:
Demo04_Animacion_Sprite

Libro La Biblia de Visual Basic .NET - Preguntas de Repaso - Capítulo 4

Preguntas de Repaso: Desarrollando Aplicaciones Windows Forms

1.    Cual es la ventaja de crear aplicaciones Windows con Windows Forms?

2.    Qué propiedades del formulario deben configurarse para que no pueda modificarse de tamaño?

3.    Qué propiedad del formulario debe configurase para mostrar en el formulario un gráfico en forma de elipse o cualquier forma deseada?

4.    En qué evento del formulario debe programarse la creación de un gráfico?

5.    Menciona 3 controles básicos de Windows Forms.

6.    Qué propiedad del control TextBox permite limitar la cantidad de caracteres ingresados?

7.    De qué formas puede crearse un TextBox que permita ingresar una contraseña o password?

8.    Qué debe hacerse para que al dar Enter sobre cualquier control de entrada se dispare el procedimiento asociado al clic de un botón?

9.    De forma similar, qué debe hacerse para que al pulsar la tecla Escape se dispare el procedimiento asociado al clic de un botón de salida?

10. Qué se debe configurar en un control Label para que muestre el símbolo & como un carácter mas o literal.

11. Menciona 3 controles de listas de Windows Forms.

12. Cuál es la propiedad más importante de los controles de listas?

13. Menciona 3 métodos de la propiedad Items para manejar listas.

14. Menciona el evento más importante en el cual generalmente se programa cuando se selecciona un elemento de una lista.

15. Cuál es la forma mas recomendada de llenar los elementos de una lista.

16. Si la lista se va a llenar elemento por elemento qué métodos debe usarse antes y después de llenar la lista para evitar escribir cada elemento en pantalla?

17. Menciona los 2 controles de vistas en Windows Forms.

18. Cuál es la propiedad más importante del control TreeView?

19. Cuál es la propiedad más importante del control ListView?

20. Cuáles son las vistas que puede presentar el control ListView?

21. Cuáles son las propiedades donde se configuran las imágenes a mostrar en un ListView?

22. Cómo se llama el control Windows Forms que permite dividir el formulario en 2 partes, por ejemplo para separar a un TreewView de un ListView?

23. Qué control permite guardar una colección de imágenes?

24. Qué es un formulario MDI y cómo se crea en Windows Forms?

25. Cómo se puede cambiar el fondo de un formulario MDI?.

26. Qué propiedad del formulario MDI padre indica la cantidad de formularios hijos activos?

27. Qué bede configurarse en Visual Studio para trabajar con un formulario Login que al auntenticarse se cierre y abra un formulario MDI que cuando se cierre finalize toda la aplicación?.

28. Cúantos tipos de menús hay y cómo se crean en Windows Forms?

29. Qué propiedad es necesario configurar de un control para que se muestre un menú contextual?

30. Cómo se puede cargar dinámicamente un formulario teniendo como dato su nombre?

31. Qué tipo de control permite agregar cualquier control como opción o elemento de un menú?

32. Cómo se llama el control de Windows Forms que muestra un calendario con los días de un mes?

33. Menciona los 5 diálogos comunes de Windows que son componentes de Windows Forms.

34. Cómo se llama el método común que tienen todos los diálogos de Windows que permiten mostrar el diálogo en pantalla?

35. Qué propiedades comunes tienen los diálogos de archivos OpenFile Dialog y SaveFileDialog en Windows Forms?

36. Cuál es la propiedad más importante del diálogo de color?

37. Cuál es la propiedad más importante del diálogo de fuente?

38. Cómo se llama el diálogo que permite mostrar directorios?

39. Menciona las barras que se pueden crear en Windows Forms.

40. Cómo se llama la colección de elementos que tienen ambas barras en Windows Forms?

41. Qué tipo de ToolStripItem tiene la Barra de Herramientas que no tiene la Barra de Estado?

42. Cuál es el control mas usado para presentar una lista de datos en Windows Forms?

43. Menciona 3 propiedades Allow del control DataGridView de Windows.

44. Qué pasos debe realizar para crear un DataGridView con columnas personalizadas?

45. Menciona los 5 tipos de columnas personalizadas que puede tener el DataGridView.

46. Cómo se llama la propiedad de la columna personalizada que especifica que dato (campo o propiedad) vamos a presentar?

47. Qué pasos debe realizar para crear un DataGridView con una columna que muestre una imagen?

48. En qué evento del DataGridView hay que programar para formatear las columnas del control?

49. Cómo se configura el tamaño de la imagen mostrada en la columna del DataGridView?

50. En qué evento del DataGridView hay que programar para personalizar las cabeceras del control?

51. Cómo se crea un gráfico personalizado dentro de una columna del control GridView?

52. Para qué se usa el modo Virtual del DataGridView?

53. Qué propiedades del DataGridView hay que configurar para crear una paginación de datos?

54. En qué evento del DataGridView hay que programar para mostrar los valores de las celdas en una paginación?

55. Qué método del DataGridView hay que invocar para actualizar los valores de las celdas mostradas en la paginación?

56. Cómo se clasifican los controles que se pueden crear en Windows?

57. Qué tipo de control crearía si desea aumentar las características de un control existente en Windows Forms?

58. Qué tipo de control crearía si desea usar varios controles de Windows?

59. De qué clase hereda el control personalizado o dibujado?

60. Mencione 3 formas de crear un reporte en Windows Forms.

61. Para qué se usa la clase PrintDocument y en qué espacio de nombres se encuentra?

62. En qué evento de la clase PrintDocument se tiene que escribir código para crear la pagina a imprimir?

63.  Menciona el control y los 3 diálogos que se pueden asociar a la clase PrintDocument para crear reportes.

64. Cuál es la diferencia entre el control PrintPreviewControl y el diálogo PrintPreview al crear la vista preliminar del reporte?

65. En qué consiste los Informes de Microsoft y cuáles son sus dos componentes principales?

66. Para qué sirve el control ReportViewer?

67. Cuáles son las barras de herramientas que se usan en el diseñador de informes de Microsoft.

68. Qué propiedades del control ReportViewer deben configurarse para mostrar un reporte de datos?

69. A qué formatos puede exportar el ReportViewer?

70. Cuál es la diferencia entre crear un gráfico en Excel o usar el control Chart?

71. Qué propiedades son las más importantes de la clase Chart?

72. En qué espacio de nombres se ubica la clase Chart?

El Libro del Día: Pro HTML5 with Visual Studio 2012

El Libro del Día: 2014-06-17

Titulo: Pro HTML5 with Visual Studio 2012
Autor: Mark J Collins
Editorial: Apress
Nro Paginas: 409

Capítulos:
Part 1: What is HTML5?
Chapter 1: Before You Begin
Part 2: Using the New HTML5 Features
Chapter 2: ASP.NET Web Forms
Chapter 3: MVC Web Applications
Chapter 4: Cascading Style Sheets
Chapter 5: Scripting Enhancements
Chapter 6: Mobile Web Applications
Part 3: Developing with HTML5
Chapter 7: Supporting Older Browsers
Chapter 8: Audio and Video
Chapter 9: Scalable Vector Graphics
Chapter 10: Canvas
Part 4: Digging Deeper
Chapter 11: Indexed DB
Chapter 12: Geolocation and Mapping
Chapter 13: WebSockets
Chapter 14: Drag and Drop
Appendix A: Chapter 4 - Sample Content
Appendix B: Chapter 4 – Completed Style
Appendix C: Chapter 14 – Final Code

Descarga:
ProHTML5_VisualStudio2012

lunes, 16 de junio de 2014

El Demo del Día: Convertir DataTable en Lista de Objetos y Viceversa

Convertir DataTable en Lista de Objetos y Viceversa

Cuando trabajamos en forma distribuida, usamos Librerías, Clases y Métodos, algunos trabajamos con Listas de Objetos y otros con DataTables y DataSets. En ambos casos, muchas veces necesitamos la funcionalidad de la otra estructura de datos, por ejemplo si usamos Listas de Objetos y queremos migrar o insertar gran cantidad de datos hacia SQL Server mejor sería usar SqlBulkCopy, pero el metodo WriteToServer necesita como parámetro un DataTable, es por eso que presento un par de métodos que permiten realizar el cambio de uno a otro para cuando se necesite.

Paso 1: Crear una Clase Genérica para crear los Métodos que usen la Lista de Objetos
using System.Reflection;
using System.Data;

namespace Conversion_DataTable_Lista
{
    public class ucTablaLista<T>
    {
    }
}

Paso 2: Función Genérica para Convertir un DataTable en Lista de Objetos
        public static List<T> TablaALista(DataTable tabla)
        {
            List<T> lista = new List<T>();
            Type tipo = typeof(T);
            object obe = null;
            string tipoDato;
            string campo;
            for (int i = 0; i < tabla.Rows.Count; i++)
            {
                obe = Activator.CreateInstance(tipo);
                for(int j=0;j<tabla.Columns.Count;j++)
                {
                    campo = tabla.Columns[j].ColumnName;
                    tipoDato = tabla.Columns[j].DataType.ToString().ToLower();
                    if (tipoDato.Contains("int16")) obe.GetType().GetProperty(campo).
                      SetValue(obe, (short)tabla.Rows[i][j]);
                    else
                    {
                        if (tipoDato.Contains("int32")) obe.GetType().GetProperty(campo).
                          SetValue(obe, (int)tabla.Rows[i][j]);
                        else
                        {
                            if (tipoDato.Contains("decimal")) obe.GetType().GetProperty(campo).
                              SetValue(obe, (decimal)tabla.Rows[i][j]);
                            else obe.GetType().GetProperty(campo).SetValue(obe,
                              tabla.Rows[i][j].ToString());
                        }
                    }                  
                }
                lista.Add((T)obe);
            }
            return (lista);
        }

Paso 3: Función Genérica para Convertir una Lista de Objetos en DataTable
        public static DataTable ListaATabla(List<T> lista)
        {
            DataTable tabla = new DataTable();
            //Crear la Estructura de la Tabla a partir de la Lista de Objetos
            PropertyInfo[] propiedades =  lista[0].GetType().GetProperties();
            for (int i = 0; i < propiedades.Length; i++)
            {
                tabla.Columns.Add(propiedades[i].Name, propiedades[i].PropertyType);
            }
            //Llenar la Tabla desde la Lista de Objetos
            DataRow fila = null;
            for (int i = 0; i < lista.Count; i++)
            {
                propiedades = lista[i].GetType().GetProperties();
                fila = tabla.NewRow();
                for (int j = 0; j < propiedades.Length; j++)
                {
                    fila[j] = propiedades[j].GetValue(lista[i], null);
                }
                tabla.Rows.Add(fila);
            }
            return (tabla);
        }

Paso 4: Crear una Clase Entidad para Almacenar los Productos
    public class beProducto
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public int SupplierID { get; set; }
        public int CategoryID { get; set; }
        public decimal UnitPrice { get; set; }
        public short UnitsInStock { get; set; }
    }

Paso 5: Crear un  Formulario con una Grilla que pueda usar las 2 Funciones
Asumiendo que las 2 funciones estáticas fueron creadas en una clase llamada "ucTablaLista" y hemos creado un formulario llamado: "frmProducto" conteniendo un control DataGridView llamado: "dgvProducto" y 2 botones llamados: "btnDataTableALista" y "btnListaADataTable", tal como se muestra en la siguiente imagen:


Escribir el siguiente código en el formulario:

public partial class frmProducto : Form
    {
        private DataTable tabla;
        private List<beProducto> lista;

        public frmProducto()
        {
            InitializeComponent();
        }

        private void listarProductos(object sender, EventArgs e)
        {
            using (SqlConnection con = new SqlConnection("uid=UsuarioNW;pwd=123456;
            data source=NombreServidor;initial catalog=Northwind"))
            {
                try
                {
                    tabla = new DataTable();
                    lista = new List<beProducto>();
                    con.Open();
                    SqlDataAdapter dap = new SqlDataAdapter("Select ProductID,ProductName,
                      SupplierID,CategoryID,UnitPrice,UnitsInStock From Products", con);
                    dap.Fill(tabla);
                    dgvProducto.DataSource = tabla;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void btnDataTableALista_Click(object sender, EventArgs e)
        {
            lista = ucTablaLista<beProducto>.TablaALista(tabla);
            dgvProducto.DataSource = lista;
            this.Text = String.Format("Objetos en la Lista: {0}", lista.Count);
        }

        private void btnListaADataTable_Click(object sender, EventArgs e)
        {
            tabla = ucTablaLista<beProducto>.ListaATabla(lista);
            dgvProducto.DataSource = tabla;
            this.Text = String.Format("Filas en la Tabla: {0}", tabla.Rows.Count);
        }
    }

Paso 6: Ejecutar la aplicación y Probar
Para ejecutar la aplicación se tiene que cambiar la cadena de conexión: usuario, password y nombre del servidor, la base de datos usada es Northwind.


Descarga:
Demo03_Conversion_DataTable_Lista