Mostrando las entradas con la etiqueta ListView. Mostrar todas las entradas
Mostrando las entradas con la etiqueta ListView. Mostrar todas las entradas

jueves, 30 de noviembre de 2017

Entrenamiento - 2do Curso de Desarrollo de Aplicaciones Móviles Bajo Android

2do Curso de Desarrollo de Aplicaciones Móviles Bajo Android

Comparto con ustedes el contenido del nuevo programa de capacitación que se estará brindando para todos los interesados en el desarrollo de aplicaciones nativas en Android.

Este curso será presencial en la ciudad de Lima, Perú y será impartido por el consultor Eduardo Monroy Husillos de nacionalidad española, quien cuenta con amplia experiencia en desarrollo bajo esta plataforma y con especialidad en Internet de las Cosas IoT.

Formación académica del expositor:

Maestría especialidad de electrónica industrial (Escuela de Ingenieros de Bilbao).
Postgrado en sistema de transmisión de datos, telecomunicaciones analógicas y digitales. (Escuela de Ingenieros de Bilbao)
Máster en programación en dispositivos móviles iOS. (Standford University)
Capacitación en programación en Android (Aula Mentor – Ministerio de Educación)
Sistemas de localización RFID Activa IP (Dusseldorf – Alemania)
Técnicas de localización mediante sensores Smartphone (Heathrow – Inglaterra)

Contenido del curso:

Marco Teórico:

Conceptos Generales:

Entorno de desarrollo Android (Android Studio).
Estructura de un proyecto Android
Componentes de una aplicación Android
Desarrollo de una aplicación sencilla

Interfaz de Usuario:

Interfaz de usuario (Layouts)
Interfaz de usuario (CardView)
Interfaz de usuario (Tabs)
Interfaz de usuario (Fragments)
Interfaz de usuario (controles personalizados)
Controles básicos (botones)
Controles básicos (texto e imágenes)
Controles básicos (Checkbox y RadioButton)
Controles de selección (Spinner)
Controles de selección (ListView)
Controles de selección (ViewHolder)
Controles de selección (GridView)
Controles de selección (RecyclerView)
ActionBar / AppBar / ToolBar + Navegacion (filter / Tabs)
Animaciones básicas (CoordinatorLayout)
Colores (Librería Palette)

Menús:

Menús y submenús básicos
Menús contextuales
Opciones avanzadas

Widgets:

Interfaz de usuario en Android (uso de Widgets)

Gestión de Preferencias:

SharedPreferences
PreferenceActivity

Base de Datos:

Primeros pasos con SqLite
Inserción, actualización y eliminación de registros
Consulta y recuperación de registros.

Programación Android Wear

Desarrollo de apps para weareables
Uso de activities
Uso de sensores
Reconocimiento de Voz

Ficheros (FileManager):

Lectura
Escritura
Edición
Borrado

Tratamiento de XML:

SAX
SAX simplificado
DOM
XMLPULL
Otras alternativas para leer y escribir XML

Notificaciones:

Toast
Barra de Estado
Diálogos
Snackbar
 
Acceso a Servicios Web:

SOAP
REST

Tareas en Segundo Plano:

Thread y AsyncTask
IntentService
Depuración de Código:

Logging

Sensores, Comunicaciones e interconexión con dispositivos físicos (IoT):

GPS
Acelerómetro
Sensor de Huella dactilar
Sensor de proximidad
Sensor de iluminación
Sensor de temperatura
Bluetooth
Bluetooth 4.0
Cámara
NFC

Reconocimiento de Voz

Google Play Services

Localización geográfica usando los servicios de Google
Mapas en Android
Conexión con Google Drive
Admod (Publiciad en las apps)

Pasarela de pago PayPal

Uso de la Api de PayPal para poder hacer pagos en nuestras apps

Publicidad en la App

Inclusión de Admob en nuestras apps

Firebase para Android

Base de datos en tiempo real (RealTime DataBase)
Autentificación
Firebase Storage
Notificaciones Push

Publicación de Aplicación Google Play

Alta como desarrollador en google developer program.
Pasos para la publicación de una App

Marco Práctico:

En cada sesión de formación se desarrollará Apps con ejemplos de lo impartido que estará disponible para que el alumno pueda practicar en su casa.

A lo largo del curso se impartirá los conocimientos necesarios para que el alumno pueda crear su propia App. En este caso será la creación de aplicación de mensajería (SuperWhatsApp)

IoT (Internet de las cosas)

En esta formación impartiremos los principios básicos de IoT y crearemos apps que se comuniquen con dispositivos físicos. Estos dispositivos los desarrollaremos utilizando la plataforma de Arduino y sus complementos.

Horario

Lunes de 7:00 p.m. a 10:00 p.m.
Miércoles de 7:00 p.m. a 10:00 p.m.

Fecha de inicio

Lunes 11 de Diciembre de 2017

Duración del curso

Total: 72 horas
Tiempo: 3 meses
Frecuencia: 6 horas semanales (24 horas mensuales)

Inversión

Mensual: 360.00 soles
Total 3 meses: 1,080.00 soles

Forma de Pago

Bajo depósito en cuenta bancaria, máximo 3 días previo al inicio de cada mes (360.00 soles)
Banco: Interbank
Cuenta en moneda nacional: 637-3066861788
Código interbancario: 00363701306686178864
A nombre de: Edward Schwarz Moreno
DNI: 09564483

Contacto

Los interesados enviar un mail a la cuenta jmoreno@gctiperu.com con los siguientes datos:

Asunto: Curso de Desarrollo de Aplicaciones Móviles Bajo Android

Contenido del correo:
Nombre completo
Lugar de trabajo o estudio
Número de teléfono celular

Registro

Sólo se considerará a los 25 primeros que envíen correo electrónico adjuntando el comprobante por el depósito realizado dado que la capacidad del lugar es limitada. La metodología del curso seguirá siendo la misma que se ha venido aplicando a los tallares de MVC-JavaScript.

No se entregará comprobante por el pago mensual y no se hará entrega de certificado de asistencia al curso.

lunes, 1 de junio de 2015

El Demo del Día: Automatizar la Programación de Tareas de Windows en .NET

Automatizar la Programación de Tareas de Windows en .NET

Windows ofrece un servicio muy útil que permite ejecutar tareas programadas por fechas (Task Scheduler), este un gran complemento para ejecutar aplicaciones de consola como por ejemplo para actualización de aplicaciones y/o archivos, envío de notificaciones y/o mensajes de correos, backups, etc.

Requerimiento

Se desea crear una aplicación que permita automatizar la programación de tareas para no hacerla manualmente a través de la aplicación de consola taskschd.msc. Sino tener una aplicación personalizada que permita listar las tareas, crear una nueva tarea y eliminar una tarea existente.

Solución

Crearemos una aplicación Windows Forms .NET en C# que use la clase TaskService de la librería manejada Microsoft.Win32.TaskScheduler.dll que la podemos descargar libremente de la siguiente dirección: Task Scheduler Managed Wrapper

Crear una Aplicación Windows Forms en C#

Abrir Visual Studio y crear una aplicación Windows Forms en C# llamada "ProgramacionTareas", cambiarle de nombre al formulario por "frmListaTareas" y realizar el diseño similar a la figura mostrada:


Nota: En el diseño hay un ListView llamado "lvwTarea", un menú contextual llamado "mnuTarea" con 2 opciones: mnuNuevaTarea y mnuEliminarTarea.

Hacer una referencia a la librería: "Microsoft.Win32.TaskScheduler.dll" y escribir el siguiente código en el formulario "frmListaTareas":

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using net=System.Threading.Tasks;
using Microsoft.Win32.TaskScheduler; //TaskService

namespace ProgramacionTareas
{
    public partial class frmListaTareas : Form
    {
        public frmListaTareas()
        {
            InitializeComponent();
        }

        private void configurarListView()
        {
            lvwTarea.Columns.Add("Nombre de la Tarea", 400);
            lvwTarea.Columns.Add("Folder", 300);
            lvwTarea.Columns.Add("Status", 100);
            lvwTarea.View = View.Details;          
            lvwTarea.MultiSelect = false;
            lvwTarea.GridLines = true;
            lvwTarea.FullRowSelect = true;
            lvwTarea.HotTracking = true;
        }

        private void listarTareas(object sender, EventArgs e)
        {
            configurarListView();
            IEnumerable<Task> tareas = null;
            net.TaskScheduler ui =
                net.TaskScheduler.FromCurrentSynchronizationContext();
            System.Threading.Tasks.Task.Run(() =>
            {
                TaskService prog = new TaskService();
                tareas = prog.AllTasks;
            }).ContinueWith(x => mostrarTareas(tareas),ui);
        }

        private void seleccionarTareas(ListViewItem fila,Task tarea,string estado)
        {
            if (estado.Equals("Running"))
            {
                fila.ForeColor = Color.White;
                fila.BackColor = Color.Red;
            }
            if (tarea.Folder.Name.Equals("DSOFT"))
            {
                fila.ForeColor = Color.Yellow;
                fila.BackColor = Color.Green;
            }
        }

        private void mostrarTareas(IEnumerable<Task> tareas)
        {
            ListViewItem fila;
            string estado;
            foreach (Task tarea in tareas)
            {
                estado = tarea.State.ToString();
                fila = lvwTarea.Items.Add(tarea.Name);
                fila.SubItems.Add(tarea.Folder.Name);
                fila.SubItems.Add(estado);
                seleccionarTareas(fila, tarea, estado);
            }
        }

        private void crearNuevaTarea(object sender, EventArgs e)
        {
            frmNuevaTarea frm = new frmNuevaTarea();
            if (frm.ShowDialog().Equals(DialogResult.OK))
            {
                TaskService programador = new TaskService();
                Trigger evento = Trigger.CreateTrigger(TaskTriggerType.Daily);
                evento.StartBoundary = frm.dtpFechaInicio.Value.AddMinutes(1);
                evento.EndBoundary = frm.dtpFechaFin.Value;
                ExecAction accion = new ExecAction();
                accion.Path = frm.txtPrograma.Text;
                Task tarea = programador.AddTask
                    (@"\DSOFT\" + frm.txtNombre.Text, evento, accion);
                if (tarea != null)
                {
                    string estado = tarea.State.ToString();
                    ListViewItem fila = lvwTarea.Items.Add(tarea.Name);
                    fila.SubItems.Add(tarea.Folder.Name);
                    fila.SubItems.Add(estado);
                    seleccionarTareas(fila, tarea, estado);
                }
            }
        }

        private void eliminarTarea(object sender, EventArgs e)
        {
            if (lvwTarea.SelectedItems != null && lvwTarea.SelectedItems.Count > 0)
            {              
                ListViewItem fila =lvwTarea.SelectedItems[0];
                string nombreCarpeta = fila.SubItems[1].Text;
                TaskService programador = new TaskService();
                TaskFolder carpeta = programador.GetFolder(nombreCarpeta);
                if (carpeta != null)
                {
                    string nombreTarea = fila.SubItems[0].Text;
                    Task tarea = programador.GetTask
                        (String.Format(@"\{0}\{1}", nombreCarpeta, nombreTarea));
                    if (tarea != null)
                    {
                        if (tarea.State.Equals(TaskState.Running)) tarea.Stop();
                        try
                        {
                            carpeta.DeleteTask(nombreTarea, true);
                            fila.Remove();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "No se pudo eliminar la tarea");
                        }
                    }
                }
            }
        }
    }
}

Nota: Para el ejemplo, se ha creado en el Task Scheduler de Windows una carpeta llamada "DSOFT"

Agregar otro formulario al proyecto y ponerle como nombre "frmNuevaTarea" y diseñarlo similar a como se ve en la siguiente figura:


Nota: En el diseño hay 2 TextBoxs llamados txtNombre y txtPrograma, además 2 DateTimePicker llamados: dtpFechaInicio y dtpFechaFin, finalmente 3 botones: "btnAbrirPrograma", "btnAceptar" y "btnCancelar". El botón "btnAceptar" tiene configurado la propiedad DialogResult en OK y el botón "btnCancelar" tiene configurado la propiedad DialogResult en Cancel.

Escribir el siguiente código en el formulario "frmNuevaTarea":

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ProgramacionTareas
{
    public partial class frmNuevaTarea : Form
    {
        public frmNuevaTarea()
        {
            InitializeComponent();
        }

        private void mostrarDialogoAbrirPrograma(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "Selecciona el Programa a Abrir";
            ofd.Filter = "Archivos de programas|*.exe";
            if (ofd.ShowDialog().Equals(DialogResult.OK))
            {
                txtPrograma.Text = ofd.FileName;
            }
        }
    }
}

Ejecutar y Probar la Aplicación Windows Forms

Antes de ejecutar la aplicación, para poder comprobar el listado de tareas, la creación de una nueva tarea y la eliminación de una tarea existente hay que abrir el Task Scheduler, para esto pulsar Ctrl + R y escribir el siguiente comando: taskschd.msc

Se mostrará la consola del Task Scheduler similar al mostrado en la siguiente figura:


Nota: Crear una carpeta personalizada para guardar nuestras tareas programadas llamada "DSOFT" y crear un par de tareas básicas dentro de esta carpeta.

Grabar la aplicación y pulsar F5 para ejecutarla, inmediatamente se listaran las tareas programadas similar a la siguiente figura:


En la ventana las tareas de la carpeta personalizada creada "DSOFT" se mostrarán con fondo verde y color amarillo y las tareas que están ejecutándose se mostrarán con fondo rojo y color blanco.

Dar clic derecho sobre la lista (ListView) y aparecerá un menú contextual con 2 opciones, seleccionar la primera opción: "Nueva Tarea" y aparecerá el siguiente cuadro de diálogo:


Llenar los datos de la nueva tarea: nombre, fecha de inicio, fecha de fin y seleccionar el programa a ejecutar, clic al botón "Aceptar" y la tarea se agregará al final de la lista, similar a la siguiente figura:


Comprobar que la tarea aparece en la consola del Task Scheduler de Windows (clic derecho y refrescar), además se ha programado para que después de un minuto del "Aceptar" se ejecute.

Clic derecho a la tarea creada recientemente y seleccionar la opción: "Eliminar Tarea", e inmediatamente se eliminará la tarea, también comprobarlo en la consola del Task Scheduler de Windows (clic derecho y refrescar).

Comentario

En este post hemos aprendido como crear nuestro propio Administrador de Tareas Programadas usando la clase TaskService de la librería manejada: Microsoft.Win32.TaskScheduler.dll.

Esto es de mucha utilidad cuando a veces nos restringen el acceso a las Herramientas de Windows y necesitamos crear una Nueva Tarea para ejecutar una aplicación, sobre todo para programas en Batch.

Descarga del Código
DemoDia_ProgramacionTareas

viernes, 27 de febrero de 2015

El Demo del Día: Graficar en el ListView de WinForms

Graficar en el ListView de WinForms

En este post veremos como crear graficos dentro de un ListView en Windows Forms, por ejemplo, para listar los empleados con su foto y una imagen con un número de estrellas que muestran su desempeño.

Requerimiento

Se necesita mostrar imágenes en los sub elementos de un elemento de un ListView. Por defecto, este muestra solo textos pero no imagenes.

Solución

- Configurar la Propiedad OwnerDraw en true del ListView
- Programar los eventos DrawColumnHeader, DrawItem y DrawSubItem para dibujar las cabeceras, las filas y pintar los sub elementos (textos e imágenes cargadas de archivos de disco).

Crear una Aplicación Windows Forms en C#

En Visual Studio crear un proyecto Windows Forms en C# con el nombre de "ListView_Grafico", luego cambiar el nombre del formulario a "frmEmpleado".

Crear una carpeta llamada "Imagenes" y agregar 9 archivos jpg con el nombre de 1.jpg, 2jpg, hasta 9.jpg con las fotos de los empleados. También conseguir una imagen "Rating.png" de 334 x 281 conteniendo el rating de desempeño, similar a la siguiente figura:



Nota: Vamos a usar un solo archivo (sprite) para mostrar los desempeños que van del 1 al 4.

Crear la Clase Entidad para el Empleado

Crear la clase "beEmpleado" escribiendo el siguiente código:

namespace ListView_Grafico
{
    public class beEmpleado
    {
        public int IdEmpleado { get; set; }
        public string Nombres { get; set; }
        public int Desempeño { get; set; }
    }
}

Programar el Formulario con el ListView

Regresar al formulario "frmEmpleado" y agregar un ListView llamado "lvwEmpleado" el cual debe estar acoplado a todo el formulario cuyo tamaño es de 600 de ancho x 550 de alto y esta centrado, similar a la siguiente figura:


Escribir el siguiente código en el formulario:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace ListView_Grafico
{
    public partial class frmEmpleado : Form
    {
        List<beEmpleado> lbeEmpleado;
        Bitmap bmp;
        Rectangle rect;        
        string ruta = @"C:\Data\NET\Practicas\WinForms\ListView_Grafico\Imagenes\";

        public frmEmpleado()
        {
            InitializeComponent();
        }

        private void crearImagenRating()
        {
            string archivo = String.Format("{0}Rating.png",ruta);
            bmp = new Bitmap(archivo);
        }

        private void crearColumnasListView()
        {
            lvwEmpleado.Columns.Add("Id", 50);
            lvwEmpleado.Columns.Add("Nombre del Empleado", 220);
            lvwEmpleado.Columns.Add("Foto", 100);
            lvwEmpleado.Columns.Add("Desempeño", 100);
        }

        private void configurarListView()
        {
            //Configurar el Alto de las Filas
            ImageList imgList = new ImageList ();
            imgList.ImageSize = new Size(1, 50);
            lvwEmpleado.SmallImageList = imgList;
            //Configurar la Apariencia
            lvwEmpleado.View = View.Details;
            lvwEmpleado.FullRowSelect = true;
            lvwEmpleado.HotTracking = true;
            //Configurar el Pintado
            lvwEmpleado.OwnerDraw = true;         
            lvwEmpleado.DrawColumnHeader += 
            new DrawListViewColumnHeaderEventHandler(dibujarCabecera);
            lvwEmpleado.DrawItem += 
            new DrawListViewItemEventHandler(dibujarFila);
            lvwEmpleado.DrawSubItem += 
            new DrawListViewSubItemEventHandler(dibujarCelda);
        }

        private void obtenerEmpleados()
        {
            lbeEmpleado = new List<beEmpleado>();
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 1, 
            Nombres = "Nadine Heredia", Desempeño = 2 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 2, 
            Nombres = "Ollanta Humala", Desempeño = 2 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 3, 
            Nombres = "Valeria Maza", Desempeño = 4 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 4, 
            Nombres = "Cristina Fernandez", Desempeño = 3 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 5, 
            Nombres = "Alan Garcia", Desempeño = 1 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 6, 
            Nombres = "Alberto Fujimori", Desempeño = 2 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 7, 
            Nombres = "Alejandro Toledo", Desempeño = 3 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 8, 
            Nombres = "Inocencio Perez", Desempeño = 1 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 9, 
            Nombres = "Luis Dueñas", Desempeño = 4 });
        }

        private void llenarListViewEmpleados()
        {
            ListViewItem fila;
            foreach (beEmpleado obeEmpleado in lbeEmpleado)
            {                
                fila = lvwEmpleado.Items.Add(obeEmpleado.IdEmpleado.ToString());
                fila.SubItems.Add(obeEmpleado.Nombres);
                fila.SubItems.Add(obeEmpleado.IdEmpleado.ToString());
                fila.SubItems.Add(obeEmpleado.Desempeño.ToString());
            }
        }

        private void crearListView(object sender, EventArgs e)
        {
            crearImagenRating();
            crearColumnasListView();
            configurarListView();
            obtenerEmpleados();
            llenarListViewEmpleados();            
        }

        private void dibujarCabecera(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            e.Graphics.FillRectangle(Brushes.Black, e.Bounds);
            StringFormat sf= new StringFormat();
            sf.Alignment=StringAlignment.Center;
            sf.LineAlignment = StringAlignment.Center;
            e.Graphics.DrawString(e.Header.Text, new Font("Arial", 10, FontStyle.Bold),
            Brushes.White, e.Bounds, sf);
        }

        private void dibujarFila(object sender, DrawListViewItemEventArgs e)
        {
            rect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, 50);
            if ((e.State & ListViewItemStates.Selected) != 0)
            {
                e.Graphics.FillRectangle(Brushes.Black, rect);
                e.DrawFocusRectangle();
            }
        }

        private void dibujarCelda(object sender, DrawListViewSubItemEventArgs e)
        {
            if (e.ColumnIndex > -1)
            {
                rect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width-20, 50);
                if (e.ColumnIndex < 2)
                {
                    Font fuente = new Font("Arial", 8);
                    Brush brocha = Brushes.Black;
                    StringFormat sf = new StringFormat();
                    sf.LineAlignment = StringAlignment.Center;
                    bool seleccionado = (e.ItemState & ListViewItemStates.Selected) != 0;
                    if (seleccionado)
                    {
                        brocha = Brushes.White;
                        fuente = new Font("Arial", 10, FontStyle.Bold);
                    }
                    e.Graphics.DrawString(e.SubItem.Text, fuente, brocha, rect,sf);
                    return;
                }
                else
                {
                    if (e.ColumnIndex == 2)
                    {
                        using (MemoryStream ms = new MemoryStream(obtenerFoto(e.SubItem.Text)))
                        {
                            Image img = Image.FromStream(ms);
                            e.Graphics.DrawImage(img, rect);
                        }
                    }
                    else
                    {
                        int n=int.Parse(e.SubItem.Text);
                        int h = 281/4;
                        int y=h*(n-1);
                        rect = new Rectangle(0, y, 334, h);
                        Image img = bmp.Clone(rect, bmp.PixelFormat);
                        e.Graphics.DrawImage(img, e.Bounds.X, e.Bounds.Y, 100, 40);
                    }
                }
            }
        }

        private byte[] obtenerFoto(string idEmpleado)
        {            
            string archivo = String.Format("{0}{1}.jpg", ruta, idEmpleado);
            byte[] foto = File.ReadAllBytes(archivo);
            return foto;
        }
    }
}

Nota: La función principal es "crearListView" y esta asociada al evento "Load" del formulario, la cual llama a casi todos los métodos usados.

Una de los problemas que se presento al momento de desarrollar fue aumentar el alto de cada fila, lo cual se logra asociando un ImageList a la propiedad SmallImageList del ListView, para lo cual se le da un tamaño al ImageList mediante su propiedad "ImageSize", por ejemplo, le damos el alto de 50.

Probar la Aplicación Windows Forms

Grabar la aplicación y ejecutarla con F5. Se mostrará la siguiente ventana:


Observar que la cabecera del ListView tiene fondo negro, texto de color blanco en negrita y centrado horizontal y alineado vertical al centro.

Los elementos del ListView cuando no están seleccionados tienen fondo blanco, texto de color negro y están alineados verticalmente al centro.

Al pasar el mouse por cada elemento este se selecciona (propiedad HotTracking=true) y el fondo es negro y el color del texto es blanco en negrita y con fuente mas grande.

En la tercera columna se muestran las fotos obtenidas de los archivos de acuerdo al código del empleado y finalmente, en la última columna se presenta una sección del archivo de Rating, el cual se dividió lógicamente en 5 filas y de acuerdo al desempeño se obtiene solo una fila.

Comentario Final

En este breve post he compartido como crear gráficos dentro de un ListView para mejorar su apariencia, hay controles de terceros muy buenos como el ObjectListView que permiten mostrar todo tipo de imágenes, y lo que quería era demostrar que también podemos hacer lo mismo configurando la propiedad OwnerDraw y programando en los eventos DrawColumnHeader, DrawItem y DrawSubItem.

Descarga

lunes, 12 de enero de 2015

Entrenamiento - Tercer Seminario .NET (Reflection y Creación de Librerías de Controles WinForms)

Tercer Seminario .NET: Reflection y Creación de Librerías de Controles WinForms

Este Miércoles 14 de Enero continuaremos con los Seminarios de .NET, esta vez para conocer mas a fondo "Reflection" y su uso en la "Creación de Librería de Controles".

Los que asistan verán muchas Demos reales de controles que le serán útiles en su desarrollo, tales como:

- Log de Objetos Recursivo
- Buscador de Miembros en Múltiples Assemblies
- Texto con Formato Numérico, Cadena, Fecha
- ListView con DataSource
- TreeView con DataSource
- DataGridView Paginado
- Búsqueda de Datos
- Ubigeo (Dpto, Prov, Dist)

La inversión del Seminario es de 40 soles sin certificado y 60 soles con certificado.

El lugar es en el Auditorio CEFAS en Jr Manuel Segura 271 Santa Beatriz (Lima) altura de la cuadra 15 de la Av Arequipa.

La entrada es a partir de las 6:30 pm y el seminario es de 7:00 pm a 10:00 pm.

Los interesados deberán enviar un correo a: Luis.duenash@gmail.com con copia a informes@hte.com.pe confirmando su participación.

Los esperamos.

lunes, 5 de enero de 2015

Entrenamiento - Talleres de .NET HTE para Enero

Talleres de .NET HTE para Enero

En este mes de Enero tenemos programado 2 Talleres de .NET sobre Creación de Controles.

A todos los programadores y desarrolladores de .NET que quieran crear Librerías de Controles para facilitar y agilizar el desarrollo mediante la reusabilidad se les recomienda asistir a ambas charlas donde usaremos intensivamente Reflection para crear Controles Enlazados a Datos.

Aquí les dejo la información del evento y ya se pueden ir inscribiendo de cualquiera de las 2 formas:
- Reservación por Correo
- Pago y Confirmación por Correo (envío del voucher)

El correo sigue siendo Luis.duenash@gmail.com e informes@hte.com.pe

La inversión por cada charla de 3 horas es de 40 soles y el que desea Certificado serán 20 soles adicionales.

Nota: El Certificado es opcional, solo para los que lo soliciten.

El horario es de 7:00 a 10:00 pm, pero el ingreso para el registro es a partir de las 6:30 pm.




Los esperamos.

jueves, 18 de septiembre de 2014

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

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

Titulo: Programming Microsoft ASP.NET 4
Autor: Dino Esposito
Editorial: Microsoft
Nro Paginas: 988

Capítulos:
Part I The ASP.NET Runtime Environment
1 ASP.NET Web Forms Today
2 ASP.NET and IIS
3 ASP.NET Configuration
4 HTTP Handlers, Modules, and Routing
Part II ASP.NET Pages and Server Controls
5 Anatomy of an ASP.NET Page
6 ASP.NET Core Server Controls
7 Working with the Page
8 Page Composition and Usability
9 ASP.NET Input Forms
10 Data Binding
11 The ListView Control
12 Custom Controls
Part III Design of the Application
13 Principles of Software Design
14 Layers of an Application
15 The Model-View-Presenter Pattern
Part IV Infrastructure of the Application
16 The HTTP Request Context
17 ASP.NET State Management
18 ASP.NET Caching
19 ASP.NET Security
Part V The Client Side
20 Ajax Programming
21 jQuery Programming

Descarga:
Programming_Microsoft_ASPNET_4