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

viernes, 24 de noviembre de 2017

El Manual del Día: Visual Web Developer Parte 2

MSDN - Manual de Visual Web Developer Parte 2

Titulo: Manual de Visual Web Developer Parte 2
Fuente Original: Microsoft Developer Network (MSDN)
Compilado Por: Luis Dueñas Huaroto (Lduenas)
Año de Compilación: 2008
Número de Páginas: 473

Indice del Manual de Visual Web Developer (Parte 2)

6. Introducción a la Infraestructura de ASP .NET
  6.1. Información General sobre Controladores HTTP y Módulos HTTP
    6.1.1. Cómo: Registrar Controladores HTTP
    6.1.2. Cómo: Configurar una Extensión de Controlador HTTP en IIS
    6.1.3. Tutorial: Crear un Controlador HTTP Sincrónico
    6.1.4. Cómo: Crear un Controlador HTTP Asincrónico
    6.1.5. Tutorial: Crear y Registrar Generadores de Controladores http
    6.1.6. Tutorial: Crear y Registrar un Módulo HTTP Personalizado
  6.2. Información General sobre la Administración de Estados de ASP .NET
    6.2.1. Información General sobre las Cookies en ASP .NET
      6.2.1.1. Cómo: Escribir una Cookie
      6.2.1.2. Cómo: Leer una Cookie
      6.2.1.3. Cómo: Eliminar una Cookie
    6.2.2. Información General sobre el Estado de Vista en ASP .NET
    6.2.3. Información General sobre el Estado de Sesión de ASP .NET
      6.2.3.1. Identificadores de Sesión
      6.2.3.2. Eventos de Estado de Sesión
      6.2.3.3. Modos de Estado de Sesión
      6.2.3.4. Proteger el Estado de Sesión
      6.2.3.5. Cómo: Guardar Valores en un Estado de Sesión
      6.2.3.6. Cómo: Leer los Valores de un Estado de Sesión
      6.2.3.7. Implementar un Proveedor de Almacén de Estados de Sesión
    6.2.4. Información General sobre el Estado de Aplicación de ASP .NET
      6.2.4.1. Cómo: Guardar Valores en un Estado de Aplicación
      6.2.4.2. Cómo: Leer los Valores de un Estado de Aplicación
    6.2.5. Información General sobre las Propiedades de Perfil de ASP .NET
      6.2.5.1. Identificación de Usuario para las Propiedades de Perfil de ASP .NET
      6.2.5.2. Definición de las Propiedades de Perfil ASP .NET
      6.2.5.3. Proveedores de Perfiles de ASP .NET
      6.2.5.4. Proteger las Propiedades de Perfil
      6.2.5.5. Tutorial: Mantener la Información de Usuarios de Sitios Web con Propiedades de Perfil
      6.2.5.6. Usar Información de Perfiles con AJAX en ASP .NET
      6.2.5.7. Implementar un Proveedor de Perfiles
      6.2.5.8. Información General sobre el Servicio de Perfiles de WCF
        6.2.5.8.1. Cómo: Habilitar el Servicio de Perfiles de WCF
    6.2.6. Recomendaciones de Administración de Estado de ASP .NET
  6.3. Enrutamiento de ASP .NET
    6.3.1. Cómo: Definir una Ruta
    6.3.2. Cómo: Crear una Dirección URL a partir de una Ruta
    6.3.3. Cómo: Utilizar el Enrutamiento con Formularios Web
7. Utilizar Controles de ASP .NET
  7.1. Controles de Usuario ASP .NET
    7.1.1. Información General sobre los Controles de Usuario ASP .NET
    7.1.2. Cómo: Convertir Páginas de Formularios Web Forms en Controles de Usuario
    7.1.3. Cómo: Incluir un Control de Usuario en una Página Web ASP .NET
    7.1.4. Cómo: Crear Instancias de Controles de Usuario ASP .NET mediante Programación
    7.1.5. Cómo: Crear Controles de Usuario ASP .NET con Plantillas
    7.1.6. Cómo: Crear Controles de Usuario ASP .NET
    7.1.7. Cómo: Incluir Controles de Usuario ASP .NET en Páginas Web
    7.1.8. Tutorial: Crear Elementos Reutilizables con Controles Usuario ASP .NET
  7.2. Controles de Servidor ASP .NET
    7.2.1. Información General sobre los Controles de Servidor Web ASP .NET
      7.2.1.1. Cómo: Agregar Controles de Servidor Web a una Página de Formularios Web Forms mediante el Diseñador de Web Forms
        7.2.1.1.1. Cómo: Agregar Controles de Servidor a una Página Web ASP .NET mediante la Sintaxis de ASP .NET
      7.2.1.2. Cómo: Crear Plantillas de Controles de Servidor Web mediante el Diseñador
      7.2.1.3. Cómo: Establecer las Propiedades de Estilo de un Control de Servidor ASP .NET en el Diseñador
      7.2.1.4. Cómo: Establecer Propiedades de un Control de Servidor ASP .NET
    7.2.2. Trabajar con Controles de Servidor Web ASP .NET
      7.2.2.1. Cómo: Agregar Controles de Servidor a una Página Web ASP .NET mediante la Sintaxis de ASP .NET
      7.2.2.2. Agregar Controles de Servidor HTML a una Página Web ASP .NET
        7.2.2.2.1. Cómo: Agregar Controles de Servidor HTML a una Página Web mediante la Sintaxis de ASP .NET
        7.2.2.2.2. Cómo: Convertir Controles de Servidor HTML en Elementos HTML
      7.2.2.3. Cómo: Especificar si los Controles de Servidor Web ASP .NET se Publican en el Servidor
      7.2.2.4. Controles de Servidor Web y Funciones del Explorador
        7.2.2.4.1. Proteger Archivos de Definición de Explorador
      7.2.2.5. Orden de Tabulación, Foco y Claves de Acceso en los Controles de Servidor Web de ASP .NET
        7.2.2.5.1. Cómo: Establecer el Foco en los Controles de Servidor Web
        7.2.2.5.2. Cómo: Establecer Teclas de Acceso para los Controles de Servidor Web
      7.2.2.6. Controles de Servidor Web ASP .NET y Estilos de CSS
        7.2.2.6.1. Cómo: Establecer Propiedades de Estilo de un Control de Servidor ASP .NET mediante Sintaxis de ASP .NET
        7.2.2.6.2. Cómo: Establecer Propiedades de Estilo de un Control de Servidor ASP .NET mediante Programación
      7.2.2.7. Plantillas de Controles de Servidor Web ASP .NET
        7.2.2.7.1. Cómo: Crear Plantillas de Controles Web ASP .NET mediante Declaración
        7.2.2.7.2. Cómo: Responder a Eventos Button en Controles Enlazados a Datos
        7.2.2.7.3. Cómo: Crear Plantillas de Controles de Servidor Web ASP .NET Dinámicamente
      7.2.2.8. Agregar Controles ASP .NET mediante Programación
        7.2.2.8.1. Cómo: Agregar Controles a una Página Web ASP .NET mediante Programación
        7.2.2.8.2. Controles de Servidor Web Dinámicos y Estado de Vista
      7.2.2.9. Obtener Acceso a Controles ASP .NET mediante Programación
        7.2.2.9.1. Identificación de Controles de Formularios Web Forms
        7.2.2.9.2. Resolución del Identificador de un Control de Formularios Web Forms
        7.2.2.9.3. Cómo: Localizar Controles Secundarios por Id en una Página Web
        7.2.2.9.4. Utilizar una Colección de Controles en una Página Web
        7.2.2.9.5. Cómo: Buscar Controles de Formularios Web Forms en una Página recorriendo la Colección Controls
        7.2.2.9.6. Utilizar la Propiedad NamingContainer para Determinar el Contenedor de Nombres de un Control
        7.2.2.9.7. Cómo: Obtener Acceso a Miembros de un Contenedor de Nombres de un Control de Servidor Web
    7.2.3. Controles Estándar del Cuadro de Herramientas
      7.2.3.1. Información General sobre AdRotator
        7.2.3.1.1. Tutorial: Mostrar y Realizar un Seguimiento de los Anuncios con el Control AdRotator
        7.2.3.1.2. Cómo: Mostrar Anuncios desde un Archivo XML mediante el Control AdRotator
        7.2.3.1.3. Cómo: Mostrar Anuncios desde una Base de Datos mediante el Control AdRotator
        7.2.3.1.4. Cómo: Seleccionar Anuncios en un Control AdRotator mediante Programación
      7.2.3.2. Información General sobre BulletedList
        7.2.3.2.1. Cómo: Agregar Controles BulletedList a una Página
        7.2.3.2.2. Cómo: Responder cuando el Usuario hace Clic en Controles BulletedList
      7.2.3.3. Información General sobre Button
        7.2.3.3.1. Cómo: Agregar Controles Button a una Página
        7.2.3.3.2. Cómo: Agregar Controles ImageButton a una Página
        7.2.3.3.3. Cómo: Determinar las Coordenadas de un Control ImageButton
        7.2.3.3.4. Cómo: Responder a los Eventos de un Control Button
        7.2.3.3.5. Cómo: Responder a los Eventos de un Control Button en una Secuencia de Comandos del Cliente
      7.2.3.4. Información General sobre Calendar
        7.2.3.4.1. Cómo: Controlar el Desplazamiento por Meses en el Control Calendar
        7.2.3.4.2. Cómo: Controlar la Selección de Fecha del Usuario en un Control Calendar
        7.2.3.4.3. Cómo: Personalizar la Apariencia del control Calendar
        7.2.3.4.4. Cómo: Personalizar Días Aislados en un Control Calendar
        7.2.3.4.5. Cómo: Dar Formato mediante Estilos a los Elementos del Control Calendar
        7.2.3.4.6. Cómo: Responder a la Selección de Fecha en el Calendar
        7.2.3.4.7. Cómo: Leer las Fechas Seleccionadas en Control Calendar
        7.2.3.4.8. Cómo: Seleccionar Fechas mediante Programación en un Control Calendar
        7.2.3.4.9. Cómo: Establecer la Fecha Actual mediante Programación en un Control Calendar
        7.2.3.4.10. Cómo: Mostrar las Fechas Seleccionadas de una Base de Datos en el Control Calendar
      7.2.3.5. Información General sobre CheckBox y CheckBoxList
        7.2.3.5.1. Cómo: Agregar Controles CheckBox a una Página
        7.2.3.5.2. Cómo: Agregar Controles CheckBoxList a una Página
        7.2.3.5.3. Cómo: Configurar las Opciones de Diseño de un Control CheckBoxList
        7.2.3.5.4. Cómo: Obtener y Establecer el Valor de un Control CheckBox mediante Programación
        7.2.3.5.5. Cómo: Responder a la Selección del Usuario en un Control CheckBox
      7.2.3.6. Información General sobre DropDownList
        7.2.3.6.1. Cómo: Agregar Controles DropDownList a una Página
      7.2.3.7. Información General sobre FileUpload
        7.2.3.7.1. Cómo: Cargar Archivos con el Control FileUpload
      7.2.3.8. Información General sobre HiddenField
      7.2.3.9. Información General sobre HyperLink
        7.2.3.9.1. Cómo: Agregar Controles HyperLink a una Página
      7.2.3.10. Información General sobre Image
        7.2.3.10.1. Cómo: Agregar Controles Image a una Página
      7.2.3.11. Información General sobre ImageMap
        7.2.3.11.1. Cómo: Agregar Controles ImageMap a una Página
        7.2.3.11.2. Cómo: Responder Cuando el Usuario hace Clic en Controles ImageMap
      7.2.3.12. Información General sobre Label
        7.2.3.12.1. Cómo: Agregar Controles Label a una Página
        7.2.3.12.2. Cómo: Utilizar controles Label como Títulos
      7.2.3.13. Información General sobre ListBox
        7.2.3.13.1. Cómo: Agregar Controles ListBox a una Página
        7.2.3.13.2. Cómo: Agregar Elementos a Controles List
        7.2.3.13.3. Cómo: Establecer la Selección en Controles List
        7.2.3.13.4. Cómo: Rellenar Controles List desde un Origen de Datos
        7.2.3.13.5. Cómo: Responder a los Cambios en Controles List
        7.2.3.13.6. Cómo: Determinar la Selección en Controles List
      7.2.3.14. Información General sobre Literal
        7.2.3.14.1. Cómo: Agregar Controles Literal a una Página
      7.2.3.15. Información General sobre el Control Localize
        7.2.3.15.1. Cómo: Agregar Controles Localize a las Páginas
      7.2.3.16. Información General sobre MultiView y View
        7.2.3.16.1. Cómo: Agregar Controles MultiView a una Página
      7.2.3.17. Información General sobre Panel
        7.2.3.17.1. Cómo: Agregar Controles Panel a una Página
      7.2.3.18. Información General sobre PlaceHolder
        7.2.3.18.1. Cómo: Agregar Controles PlaceHolder a una Página
      7.2.3.19. Información General sobre RadioButton y RadioButtonList
        7.2.3.19.1. Cómo: Agregar Controles RadioButton a una Página
        7.2.3.19.2. Cómo: Agregar Controles RadioButtonList a una Página
        7.2.3.19.3. Cómo: Establecer y Obtener la Selección de un Control RadioButton
        7.2.3.19.4. Cómo: Configurar las Opciones de Diseño de un Control RadioButtonList
        7.2.3.19.5. Cómo: Responder a la Selección de un Usuario en un Grupo de Controles RadioButton
      7.2.3.20. Información General sobre el Control Substitution
      7.2.3.21. Información General sobre los Controles Table, TableRow y TableCell
        7.2.3.21.1. Cómo: Agregar Controles Table a una Página
        7.2.3.21.2. Cómo: Agregar Filas y Celdas Dinámicamente a un Control Table
      7.2.3.22. Información General sobre TextBox
        7.2.3.22.1. Cómo: Obtener y Establecer los Valores de los Controles TextBox
        7.2.3.22.2. Cómo: Establecer un Control TextBox para Escribir Contraseñas
        7.2.3.22.3. Cómo: Especificar la Entrada de Varias Líneas de Datos en un Control TextBox
        7.2.3.22.4. Cómo: Responder a los Cambios en un Control TextBox
      7.2.3.23. Información General sobre Wizard
        7.2.3.23.1. Tutorial: Crear un Control ASP .NET Wizard Básico
        7.2.3.23.2. Tutorial: Uso Avanzado del Control Wizard de ASP .NET
      7.2.3.24. Información General sobre el Control XML
        7.2.3.24.1. Cómo: Agregar Controles XML a una Página
        7.2.3.24.2. Cómo: Cargar Datos XML en el Control XML
        7.2.3.24.3. Cómo: Transformar Datos XML en el Control XML
        7.2.3.24.4. Tutorial: Mostrar un Documento XML en una Página mediante Transformaciones
      7.2.3.25. Seguridad de Controles Estándar
    7.2.4. Controles de Datos del Cuadro de Herramientas
      7.2.4.1. Controles de Servidor Web de Datos
        7.2.4.1.1. Información General sobre los Controles Enlazados a Datos
        7.2.4.1.2. Información General sobre el Control ListView
          7.2.4.1.2.1. Tutorial: Mostrar, Paginar y Ordenar Datos con el Control ListView
          7.2.4.1.2.2. Tutorial: Modificar Datos con el Control ListView
        7.2.4.1.3. Información General sobre el Control GridView
          7.2.4.1.3.1. Comparar los Controles GridView y DataGrid
          7.2.4.1.3.2. Ordenar los Datos de un Control GridView
          7.2.4.1.3.3. Paginación en un Control GridView
          7.2.4.1.3.4. Modificar los Datos de un Control GridView
          7.2.4.1.3.5. Eventos del Control GridView
          7.2.4.1.3.6. Crear una Columna Personalizada en un Control GridView
          7.2.4.1.3.7. Cómo: Establecer Dinámicamente el Ancho de las Columnas en el Control GridView
          7.2.4.1.3.8. Cómo: Habilitar la Paginación Predeterminada en el Control GridView
          7.2.4.1.3.9. Cómo: Habilitar la Edición Predeterminada en el Control GridView
          7.2.4.1.3.10. Cómo: Habilitar la Selección Predeterminada en el Control GridView
          7.2.4.1.3.11. Cómo: Habilitar la Eliminación Predeterminada en el Control GridView
          7.2.4.1.3.12. Cómo: Personalizar Controles para la Edición en el Control de GridView
          7.2.4.1.3.13. Cómo: Responder a Eventos de Botón en un Control GridView
          7.2.4.1.3.14. Tutorial: Mostrar una Lista Desplegable mientras se Edita en el Control de GridView
          7.2.4.1.3.15. Tutorial: Ordenación Simple del Control GridView
          7.2.4.1.3.16. Tutorial: Realizar Actualizaciones Masivas en Filas Enlazadas a un Control GridView
          7.2.4.1.3.17. Tutorial: Crear un Control GridView Anidado
          7.2.4.1.3.18. Tutorial: Mostrar Datos mediante un Procedimiento Almacenado en el Control GridView
        7.2.4.1.4. Información General sobre DetailsView
          7.2.4.1.4.1. Paginación en un Control DetailsView
          7.2.4.1.4.2. Modificar Datos mediante un Control DetailsView
          7.2.4.1.4.3. Crear una Fila Personalizada en un DetailsView
          7.2.4.1.4.4. Eventos del Control DetailsView
        7.2.4.1.5. Información General sobre FormView
          7.2.4.1.5.1. Crear Plantillas para el Control FormView
          7.2.4.1.5.2. Paginación en un Control FormView
          7.2.4.1.5.3. Modificar Datos mediante un Control FormView
          7.2.4.1.5.4. Eventos del Control FormView
          7.2.4.1.5.5. Tutorial: Mostrar Datos con Formato en Páginas Web con el Control FormView
        7.2.4.1.6. Información General sobre Repeater
          7.2.4.1.6.1. Cómo: Agregar Controles Repeater a una Página
        7.2.4.1.7. Información General sobre DataList
          7.2.4.1.7.1. Cómo: Especificar el Formato de Flujo o Tabla en Controles DataList
          7.2.4.1.7.2. Cómo: Especificar la Disposición Horizontal o Vertical en los Controles DataList
          7.2.4.1.7.3. Cómo: Permitir que los Usuarios Seleccionen Elementos en los Controles DataList
          7.2.4.1.7.4. Cómo: Permitir que los Usuarios Editen Elementos en Controles DataList
          7.2.4.1.7.5. Cómo: Permitir a los Usuarios Eliminar Elementos en Controles DataList
          7.2.4.1.7.6. Cómo: Responder a los Eventos de Botón en Elementos DataList o Repeater
          7.2.4.1.7.7. Cómo: Personalizar Elementos DataList en Tiempo de Ejecución
          7.2.4.1.7.8. Cómo: Personalizar Elementos Dinámicamente en el Control DataList
          7.2.4.1.7.9. Cómo: Crear Plantillas Dinámicamente en los Controles DataList
          7.2.4.1.7.10. Cómo: Agregar Controles DataList a una Página
          7.2.4.1.7.11. Tutorial: Mostrar y Dar Formato a Datos con el Control DataList
      7.2.4.2. Controles de Servidor Web de Orígenes de Datos
        7.2.4.2.1. Información General sobre los Controles de Origen de Datos
        7.2.4.2.2. Establecer Enlaces a Datos utilizando un Control de Origen de Datos
        7.2.4.2.3. Utilizar Parámetros con Controles de Origen de Datos
          7.2.4.2.3.1. Cómo un Control de Origen de Datos Crea Parámetros para Campos Enlazados a Datos
        7.2.4.2.4. Ordenar Datos con Controles de Origen de Datos
        7.2.4.2.5. Modificar Datos mediante Controles de Origen de Datos
        7.2.4.2.6. Filtrar Datos utilizando Controles de Origen de Datos
        7.2.4.2.7. Almacenar Datos en Memoria Caché utilizando Controles de Origen de Datos
        7.2.4.2.8. Controlar Valores Null de Base de Datos mediante Controles de Origen de Datos
        7.2.4.2.9. Información General sobre el Control LinqDataSource
          7.2.4.2.9.1. Tutorial: Recuperar, Actualizar, Insertar y Eliminar Datos con los Controles LinqDataSource y DetailsView
          7.2.4.2.9.2. Tutorial: Seleccionar y Filtrar un Subconjunto de Datos con los Controles LinqDataSource y GridView
          7.2.4.2.9.3. Tutorial: Usar una Marca de Tiempo con el Control LinqDataSource para Comprobar la Integridad de los Datos
          7.2.4.2.9.4. Cómo: Agrupar y Agregar Datos utilizando el Control LinqDataSource
          7.2.4.2.9.5. Cómo: Actualizar, Insertar y Eliminar Datos con el Control LinqDataSource
        7.2.4.2.10. Información General sobre SqlDataSource
          7.2.4.2.10.1. Seleccionar Datos mediante el Control SqlDataSource
          7.2.4.2.10.2. Utilizar Parámetros con el Control SqlDataSource
          7.2.4.2.10.3. Modificar Datos mediante el Control SqlDataSource
          7.2.4.2.10.4. Almacenar Datos en Caché con el Control SqlDataSource
          7.2.4.2.10.5. Cómo: Habilitar el Filtrado para el Control SqlDataSource
          7.2.4.2.10.6. Cómo: Conectar con una Base de Datos de SQL Server mediante el Control SqlDataSource
          7.2.4.2.10.7. Cómo: Conectar con una Base de Datos de Access mediante el Control SqlDataSource
          7.2.4.2.10.8. Cómo: Conectar con una Base de Datos ODBC mediante el Control SqlDataSource
          7.2.4.2.10.9. Cómo: Conectar con una Base de Datos de Oracle mediante el Control SqlDataSource
        7.2.4.2.11. Información General sobre el Control AccessDataSource
          7.2.4.2.11.1. Recuperar Datos utilizando el Control AccessDataSource
          7.2.4.2.11.2. Cómo: Conectar con una Base de Datos de Access mediante el Control AccessDataSource
        7.2.4.2.12. Información General sobre el Control ObjectDataSource
          7.2.4.2.12.1. Utilizar Parámetros con el Control ObjectDataSource
          7.2.4.2.12.2. Tutorial: Enlace de Datos en Páginas Web con un Componente de Datos
          7.2.4.2.12.3. Crear un Objeto de Origen para un Control ObjectDataSource
            7.2.4.2.12.3.1. Ejemplo de Objeto de Origen ObjectDataSource
            7.2.4.2.12.3.2. Ejemplo de ObjectDataSource con Establecimiento Inflexible de Tipos
        7.2.4.2.13. Información General sobre el Control XmlDataSource
          7.2.4.2.13.1. Filtrar Datos mediante el Control XmlDataSource
          7.2.4.2.13.2. Enlazar un Control Tabular con XmlDataSource
          7.2.4.2.13.3. Tutorial: Crear una Página Web para Mostrar Datos XML
        7.2.4.2.14. Información General sobre SiteMapDataSource

Descarga
Manual_Visual_Web_Developer_Parte2

miércoles, 22 de noviembre de 2017

El Manual del Día: Windows Forms 3.5

MSDN - Manual de Windows Forms

Titulo: Manual de Windows Forms 3.5
Fuente Original: Microsoft Developer Network (MSDN)
Compilado Por: Luis Dueñas Huaroto (Lduenas)
Año de Compilación: 2008
Número de Páginas: 324

Indice del Manual de Windows Forms

1. Lo Nuevo en Formularios Windows Forms para .NET Framework 3.5
2. Adiciones a Formularios Windows Forms para .NET Framework 2.0
  2.1. Nuevas Adiciones a las Características Existentes en los Formularios Windows Forms
3. Introducción a los Formularios Windows Forms
  3.1. Información General sobre Formularios Windows Forms
  3.2. Crear un Nuevo Formulario Windows Forms
    3.2.1. Coordenadas de Formularios Windows Forms
    3.2.2. Tutorial: Crear un Formulario Windows Forms Sencillo
    3.2.3. Tutorial: Introducción al Diseñador de Windows Forms
    3.2.4. Cómo: Crear una Aplicación de Windows Forms desde la Línea de Comandos
    3.2.5. Cómo: Crear un proyecto de aplicación para Windows
    3.2.6. Cómo: Agregar Formularios Windows Forms a un Proyecto
    3.2.7. Cómo: Elegir el Formulario de Inicio en una Aplicación para Windows
    3.2.8. Cómo: Mostrar Formularios Windows Forms en el Diseñador
    3.2.9. Cómo: Mantener un Formulario Windows Forms en Primer Plano
    3.2.10. Cómo: Compilar y Ejecutar un Ejemplo de Código Completo de Formularios Windows Forms utilizando Visual Studio
  3.3. Crear Controladores de Eventos en Formularios Windows Forms
    3.3.1. Información General sobre Eventos
    3.3.2. Información General sobre Controladores de Eventos
    3.3.3. Cómo: Crear Controladores de Eventos en Tiempo de Ejecución
    3.3.4. Cómo: Conectar Varios Eventos con un Unico Controlador de Eventos
    3.3.5. Orden de Eventos en los Formularios Windows Forms
    3.3.6. Cómo: Crear Controladores de Eventos con el Diseñador
    3.3.7. Cómo: Crear Controladores de Eventos Predeterminados en el Diseñador
  3.4. Ajustar el Tamaño y la Escala de Formularios Windows Forms
    3.4.1. Cómo: Cambiar el Tamaño de Formularios Windows Forms con el Diseñador
    3.4.2. Cómo: Cambiar el Tamaño de los Formularios Windows Forms
    3.4.3. Tutorial: Crear un Formulario Windows Forms de Entrada de Datos de Tamaño Variable
    3.4.4. Ajuste Automático de Escala en Formularios Windows Forms
    3.4.4.1. Cómo: Responder a los Cambios de las Combinaciones de Fuentes en una Aplicación de Windows Forms
  3.5. Cambiar la Apariencia de Formularios Windows Forms
    3.5.1. Cómo: Cambiar los Bordes de Formularios Windows Forms
    3.5.2. Cómo: Agregar Imágenes de Fondo a Formularios Windows Forms
    3.5.3. Cómo: Cambiar los Bordes de Formularios Windows Forms mediante el Diseñador
    3.5.4. Cómo: Crear Formularios Windows Forms Transparentes
    3.5.5. Cómo: Crear Formularios Windows Forms No Rectangulares
    3.5.6. Cómo: Mostrar Formularios Windows Forms Modales y No Modales
    3.5.7. Cómo: Habilitar Estilos Visuales en Windows XP
    3.5.8. Cómo: Hacer Invisible un Formulario Windows Forms de Inicio
    3.5.9. Cómo: Establecer la Ubicación en Pantalla de Formularios Windows Forms
  3.6. Controles de Formularios Windows Forms
    3.6.1. Insertar Controles en Formularios Windows Forms
      3.6.1.1. Cómo: Agregar Controles a Formularios Windows Forms
      3.6.1.2. Cómo: Agregar Controles sin una Interfaz de Usuario a Formularios
      3.6.1.3. Cómo: Agregar o Quitar Controles de una Colección en Tiempo de Ejecución
      3.6.1.4. Tutorial: Rellenar Automáticamente el Cuadro de Herramientas con Componentes Personalizados
      3.6.1.5. Cómo: Agregar Controles ActiveX a Formularios Windows Forms
      3.6.1.6. Consideraciones al Alojar un Control ActiveX en un Formulario
    3.6.2. Organizar Controles en Formularios Windows Forms
      3.6.2.1. Cómo: Alinear Varios Controles en Formularios Windows Forms
      3.6.2.2. Cómo: Delimitar Controles en Formularios Windows Forms
      3.6.2.3. Cómo: Copiar Controles Entre Formularios Windows Forms
      3.6.2.4. Cómo: Acoplar Controles en Formularios Windows Forms
      3.6.2.5. Cómo: Disponer Objetos en Capas en Formularios Windows Forms
      3.6.2.6. Cómo: Bloquear Controles en Formularios Windows Forms
      3.6.2.7. Cómo: Colocar los Controles en Formularios Windows Forms
      3.6.2.8. Cómo: Cambiar el Tamaño de los Controles en Formularios Windows
      3.6.2.9. Cómo: Establecer Opciones de Cuadrícula para Todos los Formularios Windows Forms
      3.6.2.10. Cómo: Establecer el Orden de Tabulación en Formularios Windows
      3.6.2.11. Tutorial: Organizar Controles en Formularios Windows Forms Mediante Líneas de Ajuste
      3.6.2.12. Cómo: Organizar Controles con las Líneas de Ajuste y la Cuadrícula en Formularios Windows Forms
      3.6.2.13. Cómo: Reasignar Controles Existentes en un Elemento Primario Diferente
      3.6.2.14. Tutorial: Diseñar Controles de Formularios Windows Forms con Relleno, Márgenes y la Propiedad AutoSize
    3.6.3. Asignar Etiquetas a Controles Individuales de Formularios Windows Forms y Proporcionar Accesos Directos a los Mismos
      3.6.3.1. Cómo: Establecer el Texto Mostrado por un Control de Formulario
      3.6.3.2. Cómo: Establecer el Texto Mostrado por un Control de Formularios Windows Forms mediante el Diseñador
      3.6.3.3. Cómo: Establecer la Imagen que Muestra un Control de Formulario
      3.6.3.4. Cómo: Establecer la Imagen Mostrada por un Control de Formularios Windows Forms mediante el Diseñador
      3.6.3.5. Cómo: Crear Teclas de Acceso para Controles de Windows Forms
      3.6.3.6. Cómo: Crear Teclas de Acceso para Controles de Formularios Windows Forms mediante el Diseñador
      3.6.3.7. Proporcionar Información de Accesibilidad de Controles en un Formulario Windows Forms
    3.6.4. Controles que se Utilizan en Formularios Windows Forms
      3.6.4.1. Controles de Formularios Windows Forms por Función
      3.6.4.2. Controles Compatibles con Dibujos Propietarios Integrados
      3.6.4.3. Controles de Formularios Windows Forms Usados para Mostrar Opciones
        3.6.4.3.1. Cuándo Utilizar un control ComboBox de Formularios Windows Forms en lugar de un Control ListBox
        3.6.4.3.2. Cómo: Obtener Acceso a Elementos Específicos de un Control ComboBox, CheckedListBox o ListBox
        3.6.4.3.3. Cómo: Agregar y Quitar Elementos de un Control ComboBox, CheckedListBox o ListBox
        3.6.4.3.4. Cómo: Crear una Tabla de Búsqueda para un Control ComboBox, ListBox o CheckedListBox
        3.6.4.3.5. Cómo: Enlazar un Control ComboBox o ListBox de Formularios Windows Forms a Datos
        3.6.4.3.6. Cómo: Ordenar el Contenido de un Control ComboBox, CheckedListBox o ListBox
    3.6.5. Desarrollar Controles Personalizados de Formularios Windows Forms con .NET Framework
      3.6.5.1. Información General sobre cómo Utilizar Controles en los Formularios
      3.6.5.2. Variedades de Controles Personalizados
        3.6.5.2.1. Recomendaciones sobre Tipos de Controles
      3.6.5.3. Fundamentos de Desarrollo de Controles de Formularios Windows
      3.6.5.4. Propiedades de los Controles de Formularios Windows Forms
        3.6.5.4.1. Definir una Propiedad en los Controles
        3.6.5.4.2. Definir Valores Predeterminados con los Métodos ShouldSerialize y Reset
        3.6.5.4.3. Eventos de Cambio de Propiedades
        3.6.5.4.4. Cómo: Exponer Propiedades de Controles Constituyentes
        3.6.5.4.5. Implementación de Métodos en Controles Personalizados
      3.6.5.5. Eventos de los Controles de Formularios Windows Forms
        3.6.5.5.1. Reemplazar el Método OnPaint
        3.6.5.5.2. Controlar la Introducción de Datos por el Usuario
        3.6.5.5.3. Definir un Evento en los Controles de Formularios Windows
      3.6.5.6. Atributos en Controles de Formularios Windows Forms
      3.6.5.7. Dibujo y Representación Personalizados de Controles
        3.6.5.7.1. Representar un Control de Formularios Windows Forms
        3.6.5.7.2. Controles Dibujados por el Usuario
        3.6.5.7.3. Controles Constituyentes
        3.6.5.7.4. Cómo: Hacer un Control No Visible en Tiempo de Ejecución
        3.6.5.7.5. Cómo: Proporcionar un Fondo Transparente a un Control
        3.6.5.7.6. Representar Controles con Estilos Visuales
          3.6.5.7.6.1. Cómo: Utilizar una Clase de Representación de Controles
          3.6.5.7.6.2. Cómo: Representar un Elemento de Estilo Visual
      3.6.5.8. Diseño de los Controles de Formularios Windows Forms
        3.6.5.8.1. Información General sobre la Propiedad AutoSize
        3.6.5.8.2. Cómo: Alinear un Control con los Bordes de los Formularios
        3.6.5.8.3. Márgenes y Relleno en Controles de Formularios Windows
        3.6.5.8.4. Cómo: Crear un Borde Alrededor de un Control con Relleno
        3.6.5.8.5. Cómo: Implementar un Motor de Diseño Personalizado
      3.6.5.9. Subprocesamiento Múltiple en los Controles de Formularios Windows
        3.6.5.9.1. Cómo: Realizar Llamadas Seguras para Subprocesos en Controles de Formularios Windows Forms
        3.6.5.9.2. Cómo: Utilizar un Subproceso en Segundo Plano para Buscar Archivos
    3.6.6. Desarrollar Controles de Formularios Windows Forms en Tiempo de Diseño
      3.6.6.1. Tutorial: Crear un Control Compuesto con Visual Basic
      3.6.6.2. Tutorial: Heredar de un Control de Formularios Windows Forms con Visual Basic
      3.6.6.3. Tutorial: Realizar Tareas Comunes utilizando Etiquetas Inteligentes
      3.6.6.4. Tutorial: Serializar Colecciones de Tipos Estándar con DesignerSerializationVisibilityAttribute
      3.6.6.5. Tutorial: Depurar Controles Personalizados en Tiempo de Diseño
      3.6.6.6. Cómo: Crear Controles de Formularios Windows Forms
      3.6.6.7. Cómo: Crear Controles Compuestos
      3.6.6.8. Cómo: Heredar de una Clase UserControl
      3.6.6.9. Cómo: Heredar de Controles de Formularios Existentes
      3.6.6.10. Cómo: Heredar de una Clase de Control
      3.6.6.11. Cómo: Alinear un Control con los Bordes de los Formularios en Tiempo de Diseño
      3.6.6.12. Cómo: Mostrar un Control en el Cuadro de Diálogo Personalizar Cuadro de Herramientas
      3.6.6.13. Cómo: Proporcionar un Mapa de Bits del Cuadro de Herramientas para un Control
      3.6.6.14. Cómo: Comprobar el Comportamiento de un Control de Usuario en Tiempo de Ejecución
      3.6.6.15. Errores en Tiempo de Diseño en el Diseñador de Windows Forms
      3.6.6.16. Solución de Problemas Relacionados con la Creación de Controles y Componentes
  3.7. Datos Proporcionados por el Usuario en Formularios Windows Forms
    3.7.1. Datos Introducidos por el Usuario en una Aplicación de Formularios
    3.7.2. Entradas mediante Teclado en una Aplicación de Windows Forms
      3.7.2.1. Funcionamiento de las Entradas mediante Teclado
      3.7.2.2. Utilizar Eventos de Teclado
      3.7.2.3. Cómo: Modificar las Entradas mediante Teclado en un Control Estándar
      3.7.2.4. Cómo: Determinar qué Tecla Modificadora se Presionó
      3.7.2.5. Cómo: Controlar los Datos Introducidos mediante el Teclado en el Formulario
    3.7.3. Entradas Mediante el Mouse en una Aplicación de Windows Forms
      3.7.3.1. Funcionamiento de la Entrada del Mouse en los Formularios Windows
      3.7.3.2. Eventos del Mouse en Formularios Windows Forms
      3.7.3.3. Cómo: Distinguir Operaciones de Clic y Doble Clic
      3.7.3.4. Punteros del Mouse en Formularios Windows Forms
      3.7.3.5. Captura del Mouse en Formularios Windows Forms
      3.7.3.6. Funcionalidad de Arrastrar y Colocar en Formularios Windows Forms
    3.7.4. Cómo: Simular Eventos del Mouse y del Teclado en el Código
    3.7.5. Validación de los Datos Proporcionados por el Usuario en Formularios
  3.8. Cuadros de Diálogo en Formularios Windows Forms
    3.8.1. Cómo: Mostrar Cuadros de Mensaje
    3.8.2. Cómo: Crear Cuadros de Diálogo en Tiempo de Diseño
    3.8.3. Cómo: Recuperar Información del Formulario Primario de un Cuadro de Diálogo
    3.8.4. Cómo: Recuperar la Información de un Cuadro de Diálogo Selectivamente mediante Múltiples Propiedades
    3.8.5. Cómo: Recuperar el Resultado de los Cuadros de Diálogo
    3.8.6. Cómo: Cerrar Cuadros de Diálogo y Conservar Datos Introducidos por Usuario
    3.8.7. Introducción de Datos por el Usuario en los Cuadros de Diálogo
    3.8.8. Tutorial: Recuperar la Información de un Cuadro de Diálogo Colectivamente mediante Objetos
  3.9. Enlace de Datos en Formularios Windows Forms
    3.9.1. Enlace de Datos y Formularios Windows Forms
    3.9.2. Orígenes de Datos Compatibles con Formularios Windows Forms
    3.9.3. Interfaces Relacionadas con el Enlace de Datos
    3.9.4. Notificación de Cambios en el Enlace de Datos de Windows Forms
    3.9.5. Cómo: Desplazarse por Datos en Formularios Windows Forms
    3.9.6. Cómo: Implementar la Interfaz INotifyPropertyChanged
    3.9.7. Cómo: Aplicar el Modelo PropertyNameChanged
    3.9.8. Cómo: Garantizar que Varios Controles Enlazados al mismo Origen de Datos Permanezcan Sincronizados
    3.9.9. Cómo: Garantizar que la Fila Seleccionada de una Tabla Secundaria Conserva la Posición Correcta
    3.9.10. Cómo: Crear un Control con Enlace Simple en un Formulario Windows Forms
    3.9.11. Cómo: Crear un Control Enlazado y Aplicar Formato a los Datos Mostrados
  3.10. Seguridad en los Formularios Windows Forms
    3.10.1. Información General sobre la Seguridad en Formularios Windows Forms
    3.10.2. Acceso más Seguro a Archivos y Datos en Formularios Windows Forms
    3.10.3. Impresión más Segura en Formularios Windows Forms
    3.10.4. Consideraciones de Seguridad Adicionales en Formularios Windows Forms
  3.11. Cómo: Obtener Acceso a Colecciones con Claves en Formularios Windows Forms
4. Mejorar las Aplicaciones de Windows Forms
  4.1. Configuración de la Aplicación en Formularios Windows Forms
    4.1.1. Introducción a la Configuración de la Aplicación
    4.1.2. Arquitectura de Configuración de la Aplicación
    4.1.3. Atributos de Configuración de la Aplicación
    4.1.4. Configuración de la Aplicación para Controles Personalizados
    4.1.5. Utilizar Valores de Configuración de Aplicación y de Usuario
      4.1.5.1. Cómo: Crear un Nuevo Valor de Configuración en Tiempo de Diseño
      4.1.5.2. Cómo: Cambiar el Valor de una Opción de Configuración Existente en Tiempo de Diseño
      4.1.5.3. Cómo: Cambiar el Valor de una Opción de Configuración entre Sesiones de Aplicación
    4.1.6. Cómo: Validar la Configuración de la Aplicación
    4.1.7. Cómo: Crear la Configuración de la Aplicación
    4.1.8. Cómo: Crear una Configuración de Aplicación mediante el Diseñador
    4.1.9. Cómo: Enlazar una Propiedad a un Valor de Aplicación Existente mediante el Diseñador
    4.1.10. Cómo: Modificar un Enlace de Propiedades para la Configuración de la Aplicación mediante el Diseñador
    4.1.11. Depurar Aplicaciones de Windows Forms que Utilizan la Configuración de Aplicación con Visual Studio
  4.2. Funcionalidad para Imprimir en Formularios Windows Forms
    4.2.1. Cómo: Crear Trabajos de Impresión Estándar de Formularios Windows Forms
    4.2.2. Cómo: Capturar Datos Proporcionados por el Usuario de un Componente PrintDialog en Tiempo de Ejecución
    4.2.3. Cómo: Seleccionar las Impresoras Conectadas al Equipo de un Usuario
    4.2.4. Cómo: Imprimir Gráficos en Formularios Windows Forms
    4.2.5. Cómo: Imprimir un Archivo de Texto de Varias Páginas en Formularios
    4.2.6. Cómo: Completar Trabajos de Impresión de Formularios Windows Forms
    4.2.7. Cómo: Imprimir en Formularios Windows Forms Usando la Vista Preliminar
  4.3. Compatibilidad con las Operaciones de Arrastrar y Colocar y con el Portapapeles
    4.3.1. Tutorial: Llevar a cabo una Operación de Arrastrar y Colocar en Formularios
    4.3.2. Cómo: Agregar Datos al Portapapeles
    4.3.3. Cómo: Recuperar Datos del Portapapeles
    4.3.4. Cómo: Llevar a cabo Operaciones de Arrastrar y Colocar entre Aplicaciones
  4.4. Funciones de Red en las Aplicaciones de Windows Forms
    4.4.1. Tutorial: Llamar a los Servicios Web XML Desde un Formulario Windows Forms
  4.5. Globalizar Formularios Windows Forms
    4.5.1. Fuentes Internacionales en Formularios Windows Forms y Controles
    4.5.2. Visualización de Caracteres Asiáticos con la Propiedad ImeMode
    4.5.3. Compatibilidad Bidireccional en las Aplicaciones de Windows Forms
    4.5.4. Codificación y Globalización de Formularios Windows Forms
    4.5.5. Tutorial: Adaptar Formularios Windows Forms
    4.5.6. Tutorial: Crear un Diseño que Ajuste las Proporciones para la Localización
    4.5.7. Cómo: Admitir la Localización en Formularios Windows Forms mediante AutoSize y el Control TableLayoutPanel
    4.5.8. Cómo: Mostrar Texto de Derecha a Izquierda en Formularios Windows Forms para la Globalización
    4.5.9. Cómo: Establecer la Referencia Cultural y la Referencia Cultural de la Interfaz de Usuario para la Globalización de Formularios Windows Forms
    4.5.10. Cómo: Crear Cuadros de Mensaje en Formularios Windows Forms Bidireccionales
    4.5.11. Cómo: Crear Controles y Formularios Windows Forms Reflejados
    4.5.12. Implementación y Localización de ClickOnce
  4.6. Información del Sistema y Formularios Windows Forms
  4.7. Administración de Energía en Formularios Windows Forms
  4.8. Características de Windows XP y Controles de Formularios Windows Forms
  4.9. Herencia Visual de Formularios Windows Forms
    4.9.1. Cómo: Heredar Formularios Windows Forms
    4.9.2. Cómo: Heredar Formularios mediante el Cuadro de Diálogo Selector de Herencia
    4.9.3. Efectos de Modificar la Apariencia de un Formulario Base
    4.9.4. Tutorial: Demostración de la Herencia Visual
    4.9.5. Cómo: Utilizar las Propiedades Modifiers y GenerateMember
  4.10. Aplicaciones de Interfaz de Múltiples Documentos (MDI)
    4.10.1. Cómo: Crear Formularios Principales MDI
    4.10.2. Cómo: Crear Formularios MDI Secundarios
    4.10.3. Cómo: Determinar el Formulario Secundario MDI Activo
    4.10.4. Cómo: Enviar Datos al Formulario Secundario MDI Activo
    4.10.5. Cómo: Organizar Formularios MDI Secundarios
  4.11. Integrar la Ayuda de Usuario en Formularios Windows Forms
    4.11.1. Cómo: Proporcionar Ayuda en una Aplicación para Windows
    4.11.2. Cómo: Mostrar Ayuda Emergente
    4.11.3. Controlar la Ayuda mediante Información sobre Herramientas
  4.12. Accesibilidad de Formularios Windows Forms
    4.12.1. Tutorial: Crear una Aplicación Accesible basada en Windows
    4.12.2. Propiedades de los Controles de Formularios Windows que Admiten las Directrices de Accesibilidad.

Descarga
MSDN_Manual_Windows_Forms_3.5

lunes, 2 de febrero de 2015

Entrenamiento - Fotos del Ultimo Seminario

Fotos del Ultimo Seminario

Antes que nada agradecer a todos los asistentes al último seminario de .NET: "Creación de Librería de Controles con .NET" y también agradecer a la empresa HTE por organizar el evento. Comparto algunas fotos para que las publiquen en sus Redes Sociales.







Mas fotos ver en el siguiente enlace:
Fotos Facebook HTE

Los Demos del seminario se los estoy enviando en unos momentos.

miércoles, 21 de enero de 2015

Entrenamiento - Cuarto Seminario de .NET (Creación de Controles en ASP.NET)

Cuarto Seminario de .NET: Creación de Librerías de Controles en ASP.NET

Un saludo cordial a todos los visitantes del Blog y anunciar que este Miércoles 28 de Enero tendremos el cuarto y último seminario de .NET, que en esta ocasión tratará sobre como crear Librerías de Controles en ASP.NET, tanto en WebForms como en MVC.

Muchos desarrolladores de WebForms solo crean Controles de Usuario (User Controls) que solo son reusables dentro de una aplicación web, pero si lo quieren usar en otras aplicaciones tienen que copiar el código fuente y eso no es reusabilidad, lo correcto es crear su Librería de Controles Web que contengan clases WebControls o CompositeControls.

Lo mismo sucede en MVC, si queremos trabajar con grillas, gráficos, reportes, Microsoft solo ofrece los controles HTML Helpers que son limitados, por lo cual, muchos programadores recurren a librerías de terceros como jQueryUI, KendoUI, Infragistics, DevExpress, etc. También veremos como podemos aumentar controles a los HTML Helpers de MVC.

Les dejo la propaganda a los interesados:



También publico una foto de la tercera charla sobre Reflection y Creación de Controles WinForms.



No se olviden confirmar su asistencia mediante un mail a Luis.duenash@gmail.com e informes@hte.com.pe.

Los dejo con una frase para que reflexionen: "La grandeza de un país se ve por la cantidad de gente culta que en el habita". Si queremos ser un país desarrollado o del primer mundo, necesitamos invertir mas tiempo en nuestra profesión y cultura; no solo hay que ir a trabajar y cumplir con lo que uno puede, sino, hay que hacer el mejor trabajo (como nadie lo haría) y para eso hay que invertir en nuestro conocimiento.

jueves, 15 de enero de 2015

El Demo del Día: ComboBox con Imágen y Múltiples Columnas en WinForms

ComboBox con Imágen y Múltiples Columnas en WinForms

Ayer en el seminario vimos como crear Librerías de Controles para WinForms y no pude completar el último Demo de un Control ComboBox enlazado a Datos que soporte Imagen de Base de Datos y permita visualizar Múltiples Columnas.

Requerimiento

Se desea mostrar la información de los registros en varias columnas en una lista desplegable (ComboBox) y ademas poder incluir al inicio una Imagen también desde un origen de datos.

Solución

Debemos sobre escribir la clase ComboBox de WinForms y crear un par de propiedades llamada "ImageMember" para el campo de imagen y "DataColumns" para la lista de columnas a visualizarse la cual contiene el nombre del campo, el ancho de la columna y la alineación.

El control ComboBox tiene 2 formas de presentación: la Normal y la Dibujada, lo cual se logra cambiar configurando la propiedad "DrawMode". En nuestro caso, modificaremos la propiedad "DrawMode" a "OwnerDrawFixed" y programaremos en el evento "DrawItem" el dibujo con las columnas a presentar y la imagen.

Crear el Procedimiento Almacenado en la Base de Datos Northwind de SQL Server

Para listar los datos del empleado incluyendo su foto escribir el siguiente código:

Create procedure [dbo].[uspEmployeesListar]
As
Select EmployeeId,LastName,FirstName,IsNull(BirthDate,'1/1/1900') as Birthdate,Photo
From Employees

Actualizar los registros del campo Photo reemplazandolo desde archivo de disco

El campo Foto (Photo) de la tabla Empleados (Employees) de Northwind tiene registros de tipo bmp que no se verán en la aplicación, hay que actualizarlos por archivos jpg desde el disco.

Para eso entrar como Administrador al SQL Managment Studio y ejecutar la siguiente instrucción:

Update Employees Set Photo=(Select img.* from Openrowset(Bulk 'C:\Data\NET\Practicas\WinForms\ComboBox_Imagen_MultiColumna\Empleados\1.jpg', Single_Blob) img) where EmployeeId = 1

Nota: Realizar lo mismo para modificar las imágenes tantos registros tengas en la tabla empleados, para lo cual cambiar el archivo y el Id del Empleado (EmployeeId).

Crear una Aplicación Windows Forms en C#

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

Crear la Clase Entidad del Negocio

Crear la clase beEmpleado escribiendo el siguiente código:

using System;
namespace ComboBox_Imagen_MultiColumna
{
    public class beEmpleado
    {
        public int IdEmpleado { get; set; }
        public string Apellido { get; set; }
        public string Nombre { get; set; }
        public DateTime FechaNacimiento { get; set; }
        public byte[] Foto { get; set; }
    }
}

Crear la Clase de Acceso a Datos

Crear la clase daEmpleado escribiendo el siguiente código:

using System;
using System.Collections.Generic; //List
using System.Data; //CommandType, CommandBehavior
using System.Data.SqlClient; //SqlConnection, SqlCommand, SqlDataReader
namespace ComboBox_Imagen_MultiColumna
{
    public class daEmpleado
    {
        public List<beEmpleado> listar(SqlConnection con)
        {
            List<beEmpleado> lbeEmpleado = null;

            SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
            if (drd != null)
            {
                lbeEmpleado = new List<beEmpleado>();
                int posIdEmpleado = drd.GetOrdinal("EmployeeID");
                int posApellido = drd.GetOrdinal("LastName");
                int posNombre = drd.GetOrdinal("FirstName");
                int posFechaNacimiento = drd.GetOrdinal("BirthDate");
                int posFoto = drd.GetOrdinal("Photo");
                beEmpleado obeEmpleado;
                while (drd.Read())
                {
                    obeEmpleado = new beEmpleado();
                    obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
                    obeEmpleado.Apellido = drd.GetString(posApellido);
                    obeEmpleado.Nombre = drd.GetString(posNombre);
                    obeEmpleado.FechaNacimiento = drd.GetDateTime(posFechaNacimiento);
                    if (!drd.IsDBNull(posFoto)) obeEmpleado.Foto = (byte[])drd.GetValue(posFoto);
                    lbeEmpleado.Add(obeEmpleado);
                }
                drd.Close();
            }

            return (lbeEmpleado);
        }
    }
}

Nota: Tiene que haberse creado el Procedimiento Almacenado "uspEmployeesListar" en la BD Northwind.

Crear la Clase de Reglas del Negocio

Crear la clase brEmpleado escribiendo el siguiente código:

using System;
using System.Configuration; //ConfigurationManager
using System.Data.SqlClient; //SqlConnection
using System.Collections.Generic; //List
namespace ComboBox_Imagen_MultiColumna
{
    public class brEmpleado
    {
        public List<beEmpleado> listar()
        {
            List<beEmpleado> lbeEmpleado = null;
            string conexion = ConfigurationManager.ConnectionStrings["conNW"].ConnectionString;
            using (SqlConnection con = new SqlConnection(conexion))
            {
                try
                {
                    con.Open();
                    daEmpleado odaEmpleado = new daEmpleado();
                    lbeEmpleado = odaEmpleado.listar(con);
                }
                catch (SqlException ex)
                {
                    //grabarLog(ex);
                }
                catch (Exception ex)
                {
                    //grabarLog(ex);
                }
            } //con.Close(); con.Dispose();
            return (lbeEmpleado);
        }
    }
}

Nota: Hay que hacer referencia a la librería "System.Configuration.dll" para usar la clase ConfigurationManager para leer el archivo de configuración.

Crear una Clase Entidad para configurar las Columnas del Combo

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

using System.Windows.Forms;
namespace ComboBox_Imagen_MultiColumna
{
    public class DataColumn
    {
        public string ColumnName { get; set; }
        public string HeaderText { get; set; }
        public int ColumnWidth { get; set; }
        public HorizontalAlignment Alignment { get; set; }
    }
}

Crear una Clase para el ComboBox con Imagen y Múltiples Columnas

Crear la clase "ComboImage" que herede del ComboBox escribiendo el siguiente código:

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

namespace ComboBox_Imagen_MultiColumna
{
    public class ComboImage:ComboBox
    {
        private dynamic dataSource;
        public string ImageMember { get; set; }
        public List<DataColumn> DataColumns { get; set; }

        public ComboImage()
        {
            this.ItemHeight = 25;
            this.DrawMode = DrawMode.OwnerDrawFixed;
            this.DrawItem += new DrawItemEventHandler(dibujarElemento);
            this.MeasureItem += new MeasureItemEventHandler(configurarTamaño);
        }

        private void dibujarElemento(object sender, DrawItemEventArgs e)
        {
            int x = e.Bounds.X;
            int y = e.Bounds.Y;
            int indice = e.Index;
            dataSource = DataSource;
            string item="";          
            if (DataColumns != null && DataColumns.Count > 0)
            {
                StringBuilder sb = new StringBuilder("");
                DataColumn columna;
                string valor = "";
                for (int i = 0; i < DataColumns.Count; i++)
                {
                    columna = DataColumns[i];
                    valor = dataSource[indice].GetType().GetProperty(columna.ColumnName).
                                GetValue(dataSource[indice], null).ToString();
                    if (columna.Alignment.Equals(HorizontalAlignment.Right))
                        sb.Append(String.Format("{0} │ ", valor.PadLeft(columna.ColumnWidth, ' ')));
                    else sb.Append(String.Format("{0} │ ", valor.PadRight(columna.ColumnWidth, ' ')));
                }
                item = sb.ToString();
            }
            else
            {
                if (!String.IsNullOrEmpty(DisplayMember))
                {
                    item = dataSource[indice].GetType().GetProperty(DisplayMember).
                               GetValue(dataSource[indice], null).ToString();
                }
            }
            if (!String.IsNullOrEmpty(ImageMember))
            {
                byte[] buffer = dataSource[indice].GetType().GetProperty(ImageMember).
                                         GetValue(dataSource[indice], null);
                if (buffer != null && buffer.Length > 0)
                {
                    MemoryStream ms = new MemoryStream(buffer);
                    Image img = null;
                    try{
                        img = Image.FromStream(ms);
                        e.Graphics.DrawImage(img, x, y, 25, 25);
                    }
                    catch(Exception ex)
                    {
                        //Grabar Log
                    }                                    
                }
                x = x + 20;
            }
            e.Graphics.DrawString(item, new Font("Courier New", 8), Brushes.Black, x, y+5);
            e.DrawFocusRectangle();
        }

        private void configurarTamaño(object sender, MeasureItemEventArgs e)
        {
            e.ItemWidth = this.Width;
            e.ItemHeight = 200;
        }
    }
}

Nota: Esta clase creada hereda las propiedades DataSource, DisplayMember y ValueMember del ComboBox pero adicionalmente se crean las propiedades DatColumns y ImageMember y se sobre escribe los eventos DrawItem y MeasureItem para dibujar las columnas y la imágen.

Diseñar y Programar el Formulario con el ComboImage creado

Abrir el formulario "frmConsultaEmpleado" y realizar el siguiente diseño:


Escribir el siguiente código en el formulario:

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

namespace ComboBox_Imagen_MultiColumna
{
    public partial class frmConsultaEmpleado : Form
    {
        private List<beEmpleado> lbeEmpleado;

        public frmConsultaEmpleado()
        {
            InitializeComponent();
        }

        private void listarEmpleados(object sender, EventArgs e)
        {
            brEmpleado obrEmpleado = new brEmpleado();
            lbeEmpleado = obrEmpleado.listar();
            cboEmpleado.DataSource = lbeEmpleado;
            cboEmpleado.DisplayMember = "Apellido";
            cboEmpleado.ValueMember = "IdEmpleado";
            cboEmpleado.ImageMember = "Foto";
            List<DataColumn> columnas = new List<DataColumn>();
            columnas.Add(new DataColumn { ColumnName="IdEmpleado",
                ColumnWidth=3, Alignment=HorizontalAlignment.Right});
            columnas.Add(new DataColumn { ColumnName = "Apellido",
                ColumnWidth = 20, Alignment = HorizontalAlignment.Left });
            columnas.Add(new DataColumn { ColumnName = "Nombre",
                ColumnWidth = 10, Alignment = HorizontalAlignment.Left });
            cboEmpleado.DataColumns = columnas;
            cboEmpleado.SelectedIndex = -1;
        }

        private void mostrarEmpleadoSeleccionado(object sender, EventArgs e)
        {
            int n = cboEmpleado.SelectedIndex;
            if (n > -1)
            {
                txtCodigo.Text = lbeEmpleado[n].IdEmpleado.ToString();
                txtApellido.Text = lbeEmpleado[n].Apellido;
                txtNombre.Text = lbeEmpleado[n].Nombre;
                txtFechaNacimiento.Text = lbeEmpleado[n].FechaNacimiento.ToShortDateString();
                byte[] foto = lbeEmpleado[n].Foto;
                MemoryStream ms = new MemoryStream(foto);
                try
                {
                    picFoto.Image = Image.FromStream(ms);
                }
                catch (Exception ex)
                {
                    picFoto.Image = null;
                }
            }
            else
            {
                txtCodigo.Clear();
                txtApellido.Clear();
                txtNombre.Clear();
                txtFechaNacimiento.Clear();
                picFoto.Image = null;
            }
        }
    }
}

Nota: Asociar al evento "load" del formulario la función "listarEmpleados" y al evento "SelectedIndexChanged" del ComboImage llamado "cboEmpleado" la función "mostrarEmpleadoSeleccionado".

Modificar el archivo App.Config para incluir la Cadena de Conexión

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="conNW" providerName="System.Data.SqlClient" connectionString="uid=UsuarioNW;pwd=123456;data source=DSOFT\Sqlexpress;initial catalog=NW"/>
  </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Probar la Aplicación Windows Forms

Grabar la aplicación y ejecutarla con F5. Desplegar el ComboBox y se mostrará la siguiente ventana:


Seleccionar un registro y se mostrará los datos del empleado, tal como se muestra a continuación:


Nota: La consulta es desconectada ya que los datos del empleado se obtienen de la Lista de Objetos.

Comentario Final

En este post vimos como mostrar en un ComboBox de WinForms múltiples columnas y también imágenes, para lo cual creamos un control personalizado configurando la propiedad "DrawMode" y agregamos propiedades "ImageMember" y "DataColumns", luego dibujamos en el evento "DrawItem".

Como ven no es tan díficil crear tus propios controles personalizados, como siempre nos ayudamos con un poco de Reflection para obtener propiedades (nombres y valores).

Espero les sirva.

Descarga
Demo_ComboBox_Imagen_MultiColumna

Entrenamiento - Cuarto y Ultimo Seminario .NET (Creación de Controles en ASP.NET)

Cuarto y Ultimo Seminario .NET: Creación de Controles en ASP.NET (Web Forms y MVC)

Quiero invitar a los interesados al ultimo seminario que tratara sobre "Creación de Controles en ASP.NET", en donde se verá como crear librerías de Controles Web Forms y MVC, habra ejemplos sobre controles Grillas Paginadas, Ordenadas, con Filtros en cabeceras, Exportaciones de Datos, etc.
También crearemos controles de gráficos, de búsqueda y el control ubigeo que por falta de tiempo no se pudo hacer ayer.

Gracias a todos los que asistieron a los seminarios anteriores, sobre a todo los que me vienen acompañando hace muchos años y a los que hicieron el esfuerzo por estar en los 3 seminarios anteriores, con ellos seguiremos trabajando, como lo hacíamos antes.

La idea era compartir con mas personas temas avanzados y temas del futuro en desarrollo de software, tales como "El Internet de las Cosas", "Impresion 3D" y sus implementaciones en "HTML5" y "JavaScripts APIs".

Sobre HTML5 se verían temas como:
- Formularios y Nuevos Controles
- Canvas
- SVG
- Audio y Video

Sobre JavaScripts APIs se verían temas como:
- Web Workers
- Geolocation
- FileStorage (SessionStorage, LocalStorage e IndexedDB)
- Web Audio API
- File System API
- WebGL
- WebSockets
- WebRTC
- Speech API, etc

Pero parece que muchos desean aprender temas actuales para su trabajo, es decir, como Crear Aplicaciones Web, Reportes, Impresiones, etc, temas que se ven en cualquier curso de capacitación. La idea era no repetir con los mismos temas sino prepararnos para el futuro. Pero estamos en un país donde la gente solo ve el día a día y no prevee el mañana.

Particularmente, seguiré trabajando en estos temas y este año lanzare varias librerías y generadores como les había comentado en las charlas. En realidad mi objetivo con el Blog y los Seminarios era no avanzar solo sino que muchas personas se sumaran a esto, pero cada uno establece en su vida prioridades y algunos no toman en serio la necesidad de mejorar cada día ni "entender como funcionan la cosas".

Saludos a todos y que la suerte los acompañe (la van a necesitar)

PD: Los que asistieron al seminario de ayer, hoy les enviare un mail con todos los Demos + Practicas que hice y también estaré publicando en el Blog un ejemplo de un Control Combo con Múltiples Columnas e Imágenes.

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.

sábado, 25 de octubre de 2014

El Libro del Día: La Biblia de Visual Basic .NET (Cap 5)

El Libro del Día: 2014-10-25

Titulo: La Biblia de Visual Basic .NET (Capítulo 5)
Autor: Luis Dueñas Huaroto
Editorial: Coredise
Nro Paginas: 112

Capítulo 5: Desarrollando Aplicaciones Web con ASP .NET
1. Trabajando con el Formulario y los Controles Web
1.1. Introducción a ASP .NET
1.2. Creando un Simple Sitio Web
1.3. Usando Controles Web Intrínsecos
1.4. Usando Controles Web de Imágenes
1.5. Usando el Control FileUpload y Controles de Validación
2. Mejorando el Diseño y Navegabilidad del Sitio Web
2.1. Creando y usando Hojas de Estilos en Cascada
2.2. Paginas Principales y Controles de Navegación
2.3. Usando Controles de Vistas MultiView y Views
3. Usando el Control GridView
3.1. Personalizando Columnas en el GridView
3.2. Paginando en el GridView
3.3. Ordenando en el GridView
3.4. Mantenimiento de Datos en el GridView
4. Creando Plantillas en Controles Enlazados a Datos
4.1. Trabajando con el Control Repeater
4.2. Trabajando con el Control DataList
4.3. Creando Plantillas Jerárquicas

Descarga:
Biblia_VisualBasicNET_Capitulo5

viernes, 24 de octubre de 2014

El Libro del Día: La Biblia de Visual Basic .NET (Cap 4)

El Libro del Día: 2014-10-24

Titulo: La Biblia de Visual Basic .NET (Capítulo 4)
Autor: Luis Dueñas Huaroto
Editorial: Coredise
Nro Paginas: 158

Capítulo 4: Desarrollando Aplicaciones Windows Forms
1. Trabajando con el Formulario y los Controles Windows
1.1. Trabajando con el Formulario Windows
1.2. Usando Controles Básicos
1.3. Usando Controles de Listas
1.4. Usando Controles de Vistas
2. Creando Formularios MDIs, Menús, Diálogos y Barras
2.1. Creando Formularios MDIs
2.2. Creando Menús
2.3. Usando Dialogos de Windows
2.4. Agregando Barras
3. Usando el Control DataGridView
3.1. Personalizando Columnas en el DataGridView
3.2. Mostrando una Imagen en una Columna
3.3. Personalizando las Cabeceras de las Columnas
3.4. Graficando en el DataGridView
3.5. Paginando en un DataGridView
4. Creando una Biblioteca de Controles Windows
4.1. Creando Controles Extendidos
4.2. Creando Controles de Usuario
4.3. Creando Controles Personalizados
5. Creando Reportes e Impresiones en Windows Forms
5.1. Usando PrintDocument
5.2. Informes de Microsoft
5.3. Trabajando con Word
5.4. Trabajando con Excel
5.5. Usando el Control Chart

Descarga:
Biblia_VisualBasicNET_Capitulo4