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

lunes, 20 de noviembre de 2017

El Manual del Día: LINQ

MSDN - Manual de LINQ

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


Indice del Manual de LINQ

1. Introducción a LINQ
2. Introducción a LINQ en Visual Basic
  2.1. Escribir la Primera Consulta con LINQ
  2.2. Operaciones Básicas de Consulta
  2.3. Características de Visual Basic que Admiten LINQ
  2.4. Relaciones entre Tipos en Operaciones de Consulta
3. Cómo: Crear un Proyecto con LINQ
4. Características de IDE de Visual Studio y Herramientas para LINQ
5. Guía de Programación General con LINQ
  5.1. Información General sobre Operadores de Consulta Estándar
    5.1.1. Sintaxis de Expresiones de Consulta para Operadores de Consulta Estándar
    5.1.2. Clasificación de Operadores de Consulta Estándar por Modo de Ejecución
    5.1.3. Ordenar Datos
    5.1.4. Operaciones Set
    5.1.5. Filtrar Datos
    5.1.6. Operaciones Cuantificadotas
    5.1.7. Operaciones de Proyección
    5.1.8. Realizar Particiones de Datos
    5.1.9. Operaciones de Combinación
    5.1.10. Agrupar Datos
    5.1.11. Operaciones de Generación
    5.1.12. Operaciones de Igualdad
    5.1.13. Operaciones de Elementos
    5.1.14. Convertir Tipos de Datos
    5.1.15. Operaciones de Concatenación
    5.1.16. Operaciones de Agregación
  5.2. Arboles de Expresión en LINQ
    5.2.1. Cómo: Usar Arboles de Expresión para Crear Consultas Dinámicas
  5.3. Habilitar un Origen de Datos para Realizar Consultas
6. LINQ a Objectos
  6.1. LINQ y Cadenas
    6.1.1. Cómo: Realizar Recuento de las Repeticiones de una Palabra en una Cadena
    6.1.2. Cómo: Buscar Frases que Contengan un Conjunto Especificado de Palabras
    6.1.3. Cómo: Buscar Caracteres en una Cadena
    6.1.4. Cómo: Combinar Consultas LINQ con Expresiones Regulares
    6.1.5. Cómo: Buscar la Diferencia de Conjuntos entre Dos Listas
    6.1.6. Cómo: Ordenar o Filtrar Datos de Texto por Palabra o Campo
    6.1.7. Cómo: Reordenar los Campos de un Archivo Delimitado
    6.1.8. Cómo: Combinar y Comparar Colecciones de Cadenas
    6.1.9. Cómo: Rellenar Colecciones de Objetos de Varios Orígenes
    6.1.10. Cómo: Dividir un Archivo en Varios Archivos Mediante el Uso de Grupos
    6.1.11. Cómo: Combinar Contenido de Archivos No Similares
    6.1.12. Cómo: Calcular Valores de Columna en un Archivo de Texto CSV
  6.2. LINQ y Reflection
    6.2.1. Cómo: Consultar los Metadatos de un Ensamblado con la Función de Reflexión
  6.3. LINQ y Directorios de Archivos
    6.3.1. Cómo: Buscar Archivos con un Nombre o Atributo Especificados
    6.3.2. Cómo: Agrupar Archivos por Extensión
    6.3.3. Cómo: Buscar el Número Total de Bytes en un Conjunto de Carpetas
    6.3.4. Cómo: Comparar el Contenido de dos Carpetas
    6.3.5. Cómo: Buscar el Archivo(s) de Mayor Tamaño en un Arbol de Directorios
    6.3.6. Cómo: Buscar Archivos Duplicados en un Arbol de Directorios
    6.3.7. Cómo: Consultar el Contenido de los Archivos de una Carpeta
  6.4. Cómo: Consultar un Objeto ArrayList con LINQ
7. LINQ a XML
  7.1. Introducción LINQ a XML
    7.1.1. Información General Acerca de LINQ a XML
    7.1.2. Diferencias entre LINQ a XML y DOM
    7.1.3. Diferencias entre LINQ a XML y otras Tecnologías XML
  7.2. Guía de Programación LINQ a XML
    7.2.1. Información General Acerca de la Programación de LINQ a XML
      7.2.1.1. Información General de los Enfoques de Programación LINQ a XML
      7.2.1.2. Información General de las Clases LINQ a XML
      7.2.1.3. Información General Acerca de la Clase XElement
      7.2.1.4. Información General Acerca de la Clase XAttribute
      7.2.1.5. Información General Acerca de la Clase XDocument
      7.2.1.6. Cómo Crear Ejemplos de LINQ a XML
    7.2.2. Crear Arboles XML
      7.2.2.1. Construcción Funcional
      7.2.2.2. Introducción a los Literales XML en Visual Basic
      7.2.2.3. Diferencias entre Agregar y Clonar
      7.2.2.4. Analizar XML
        7.2.2.4.1. Cómo Analizar una Cadena
        7.2.2.4.2. Cómo Cargar XML de un Archivo
        7.2.2.4.3. Conservar Espacios en Blanco mientras se Carga o se Analiza el XML
        7.2.2.4.4. Cómo Detectar Errores de Análisis
        7.2.2.4.5. Cómo Crear un Arbol de XmlReader
        7.2.2.4.6. Cómo Transmitir por Secuencias Fragmentos XML de XmlReader
      7.2.2.5. Cómo Rellenar un Arbol XML Con XmlWriter
      7.2.2.6. Cómo Validar con XSD
      7.2.2.7. Contenido Válido de Objetos XElement y XDocument
    7.2.3. Trabajar con Espacios de Nombres XML
      7.2.3.1. Información General Sobre los Espacios de Nombres
      7.2.3.2. Espacios de Nombres en Visual Basic
        7.2.3.2.1. Cómo Crear un Documento con Espacios de Nombres
        7.2.3.2.2. Cómo Controlar Prefijos de Espacios de Nombres
        7.2.3.2.3. Trabajar con Espacios de Nombres Globales
      7.2.3.3. Cómo Escribir Consultas en XML en Espacios de Nombre
    7.2.4. Serializar Arboles XML
      7.2.4.1. Preservar los Espacios en Blanco durante la Serialización
      7.2.4.2. Serializar con una Declaración XML
      7.2.4.3. Serializar en Archivos, TextWriters y XmlWriters
      7.2.4.4. Serializar en XmlReader (Invocar XSLT)
    7.2.5. Ejes LINQ a XML
      7.2.5.1. Información General Acerca de los Ejes de LINQ a XML
      7.2.5.2. Cómo Recuperar una Recopilación de Elementos
      7.2.5.3. Cómo Recuperar el Valor de un Elemento
      7.2.5.4. Cómo Filtrar Nombres de Elemento
      7.2.5.5. Cómo Encadenar Llamadas a Métodos de Eje
      7.2.5.6. Cómo Recuperar un Unico Elemento Secundario
      7.2.5.7. Cómo Recuperar una Colección de Atributos
      7.2.5.8. Cómo Recuperar un Atributo en Particular
      7.2.5.9. Cómo Recuperar el Valor de un Atributo
      7.2.5.10. Ejes Integrados en el Lenguaje en Visual Basic
    7.2.6. Consultar Arboles XML
      7.2.6.1. Consultas Básicas LINQ a XML
        7.2.6.1.1. Cómo Buscar un Elemento con un Atributo Específico
        7.2.6.1.2. Cómo Buscar un Elemento con un Elemento Secundario Específico
        7.2.6.1.3. Diferencias entre Realizar Consultas de un XDocument y de un Element
        7.2.6.1.4. Cómo Encontrar Descendientes con un Nombre de Elemento Específico                 7.2.6.1.5. Cómo Buscar un Descendiente Unico mediante el Método Descendants
        7.2.6.1.6. Cómo Escribir Consultas con Filtrado Complejo
        7.2.6.1.7. Cómo Filtrar por un Elemento Opcional
        7.2.6.1.8. Cómo Buscar Todos los Nodos en un Espacio de Nombres
        7.2.6.1.9. Cómo Ordenar Elementos
        7.2.6.1.10. Cómo Ordenar Elementos en Varias Claves
        7.2.6.1.11. Cómo Calcular Valores Intermedios
        7.2.6.1.12. Cómo Escribir una Consulta que Busca Elementos Basándose en el Contexto
        7.2.6.1.13. Cómo Depurar Conjuntos de Resultados de Consultas Vacíos
      7.2.6.2. Proyecciones y Transformaciones LINQ a XML
        7.2.6.2.1. Cómo Trabajar con Diccionarios usando LINQ a XML
        7.2.6.2.2. Cómo Transformar la Forma de un Arbol XML
        7.2.6.2.3. Cómo Controlar el Tipo de una Proyección
        7.2.6.2.4. Cómo Proyectar un Nuevo Tipo
        7.2.6.2.5. Cómo Proyectar un Gráfico de Objetos
        7.2.6.2.6. Cómo Proyectar un Tipo Anónimo
        7.2.6.2.7. Cómo Generar Archivos de Texto a partir de XML
        7.2.6.2.8. Cómo Generar un XML a partir de Archivos CSV
      7.2.6.3. Técnicas Avanzadas de Consulta LINQ a XML
        7.2.6.3.1. Cómo Crear una Jerarquía con la Agrupación
        7.2.6.3.2. Cómo Realizar Consultas de LINQ a XML con Xpath
        7.2.6.3.3. Cómo Enumerar Todos los Nodos de un Arbol
        7.2.6.3.4. Cómo Rellenar un Arbol XML a partir del Sistema de Archivos
      7.2.6.4. LINQ a XML para usuarios de Xpath
        7.2.6.4.1. Comparación de XPath y LINQ a XML
        7.2.6.4.2. Cómo Buscar un Elemento Secundario
        7.2.6.4.3. Cómo Buscar una Lista de Elementos Secundarios
        7.2.6.4.4. Cómo Buscar el Elemento Raíz
        7.2.6.4.5. Cómo Buscar Elementos Descendientes
        7.2.6.4.6. Cómo Filtrar por Atributo
        7.2.6.4.7. Cómo Buscar Elementos Relacionados
        7.2.6.4.8. Cómo Buscar Elementos en un Espacio de Nombres
        7.2.6.4.9. Cómo Encontrar Elementos Relacionados Anteriores
        7.2.6.4.10. Cómo Buscar Descendientes de un Elemento Secundario
        7.2.6.4.11. Cómo Buscar una Unión de dos Rutas de Ubicación
        7.2.6.4.12. Cómo Buscar Nodos Relacionados
        7.2.6.4.13. Cómo Buscar un Atributo del Elemento Primario
        7.2.6.4.14. Cómo Buscar Atributos de Elementos Secundarios con un Nombre Específico         7.2.6.4.15. Cómo Buscar Elementos que Tienen un Atributo Especifico
        7.2.6.4.16. Cómo Buscar Elementos Secundarios en base a la Posición
        7.2.6.4.17. Cómo Buscar el Elemento del Mismo Nivel Inmediatamente Anterior
    7.2.7. Modificar Arboles XML
      7.2.7.1. Diferencias Entre la Modificación del Arbol XML en Memoria y la Construcción Funcional
      7.2.7.2. Agregar Elementos, Atributos y Nodos a un Arbol XML
      7.2.7.3. Modificar Elementos, Atributos y Nodos en un Arbol XML
      7.2.7.4. Quitar Elementos, Atributos y Nodos de un Arbol XML
      7.2.7.5. Mantener los Pares Nombre/Valor
      7.2.7.6. Cómo Cambiar el Espacio de Nombres de un Arbol XML Completo
    7.2.8. Programación Avanzada de LINQ a XML
      7.2.8.1. Anotaciones en LINQ a XML
      7.2.8.2. Eventos de LINQ a XML
      7.2.8.3. Programar con Nodos
      7.2.8.4. Cómo Leer y Escribir un Documento Codificado
      7.2.8.5. Usar XSLT para Transformar un Arbol XML
    7.2.9. Seguridad de LINQ a XML
8. LINQ a ADO .NET
  8.1. Información General de LINQ a ADO .NET
  8.2. LINQ a DataSet
    8.2.1. Introducción LINQ a DataSet
      8.2.1.1. Información General de LINQ a DataSet
      8.2.1.2. Cargar Datos en un DataSet
      8.2.1.3. Cómo crear un Proyecto LINQ a DataSet en Visual Studio
    8.2.2. Guía de Programación LINQ a DataSet
      8.2.2.1. Consultas en LINQ a DataSet
      8.2.2.2. Consultar DataSets
        8.2.2.2.1. Consultas de Tabla Unica
        8.2.2.2.2. Consultas Entre Tablas
        8.2.2.2.3. Consultar DataSets con Establecimiento de Tipos
      8.2.2.3. Comparar DataRows
      8.2.2.4. Crear DataTable desde una Consulta
      8.2.2.5. Métodos Genéricos Field y SetField
      8.2.2.6. Enlace de Datos y LINQ a DataSet
        8.2.2.6.1. Crear un Objeto DataView
        8.2.2.6.2. Filtrar con DataView
        8.2.2.6.3. Ordenar con DataView
        8.2.2.6.4. Rendimiento del DataView
        8.2.2.6.5. Cómo Enlazar un Objeto DataView al Control DataGridView de Windows Forms
      8.2.2.7. Depurar Consultas LINQ a DataSet
      8.2.2.8. Seguridad
      8.2.2.9. Ejemplos de LINQ a DataSet
        8.2.2.9.1. Ejemplos de Sintaxis de Expresiones de Consulta
          8.2.2.9.1.1. Proyección
          8.2.2.9.1.2. Restricción
          8.2.2.9.1.3. Creación de Particiones
          8.2.2.9.1.4. Ordenación
          8.2.2.9.1.5. Operadores de Elementos
          8.2.2.9.1.6. Operadores de Agregado
          8.2.2.9.1.7. Operadores de Combinación
        8.2.2.9.2. Ejemplos de Sintaxis de Consulta Basada en Métodos
          8.2.2.9.2.1. Proyección
          8.2.2.9.2.2. Creación de Particiones
          8.2.2.9.2.3. Ordenación
          8.2.2.9.2.4. Operadores de Conjuntos
          8.2.2.9.2.5. Operadores de Conversión
          8.2.2.9.2.6. Operadores de Elementos
          8.2.2.9.2.7. Operadores de Agregado
          8.2.2.9.2.8. Combinación
        8.2.2.9.3. Ejemplos de Operadores Específicos de DataSet
  8.3. LINQ a SQL
    8.3.1. Introducción LINQ a SQL
      8.3.1.1. Qué se Puede Hacer con LINQ a SQL
      8.3.1.2. Procedimientos Típicos para Usar LINQ a SQL
    8.3.2. Guía de Programación LINQ a SQL
      8.3.2.1. Crear el Modelo de Objetos
        8.3.2.1.1. Cómo: Generar el Modelo de Objetos en Visual Basic o C#
        8.3.2.1.2. Cómo: Generar el Modelo de Objetos como un Archivo Externo
        8.3.2.1.3. Cómo: Generar Código Personalizado Mediante la Modificación de un Archivo DBML
        8.3.2.1.4. Cómo: Validar Archivos de Asignación Externa y DBML
        8.3.2.1.5. Cómo: Convertir Entidades en Serializables
        8.3.2.1.6. Cómo: Personalizar Clases de Entidad Mediante el Editor de Código
          8.3.2.1.6.1. Cómo: Especificar Nombres de Base de Datos
          8.3.2.1.6.2. Cómo: Representar Tablas como Clases
          8.3.2.1.6.3. Cómo: Representar Columnas como Miembros de Clase
          8.3.2.1.6.4. Cómo: Representar Claves Principales
          8.3.2.1.6.5. Cómo: Asignar Relaciones de Base de Datos
          8.3.2.1.6.6. Cómo: Representar Columnas como Generadas por la Base de Datos
          8.3.2.1.6.7. Cómo: Representar Columnas como Columnas de Marca de Tiempo o Versión
          8.3.2.1.6.8. Cómo: Especificar Tipos de Datos de una Base de Datos
          8.3.2.1.6.9. Cómo: Representar Columnas Calculadas
          8.3.2.1.6.10. Cómo: Especificar Campos de Almacenamiento Privado
          8.3.2.1.6.11. Cómo: Representar Columnas que Permitan Valores Null
          8.3.2.1.6.12. Cómo: Asignar Jerarquías de Herencia
          8.3.2.1.6.13. Cómo: Especificar la Comprobación de Conflictos de Simultaneidad
      8.3.2.2. Comunicar con la Base de Datos
        8.3.2.2.1. Cómo: Conectarse a una Base de Datos
        8.3.2.2.2. Cómo: Ejecutar Directamente Comandos SQL
        8.3.2.2.3. Cómo: Volver a Usar una Conexión entre un Comando ADO.NET y DataContext

Descarga

miércoles, 18 de mayo de 2016

Videos - El Reto o Desafío JavaScript

Videos - El Reto o Desafío JavaScript

Estimados visitantes del Blog, hace un buen tiempo que no escribo un post. Esta vez lo hago para informarles que he creado una Lista de Reproducción en mi Canal de YouTube llamado "Reto JavaScript" que consiste en crear código solo con JavaScript sin usar ningún Framework ni librería cliente, solo JavaScript puro (no jQuery, Angujar, Ember, etc).

Con esto quiero lograr 2 cosas:

1. Demostrar que todo lo que ven que hacen las librerías mas populares se puede conseguir con poco código y mejor (sobre todo si esta totalmente desconectado).

2. Fomentar la creatividad, la investigación, el talento y el esfuerzo de los desarrolladores para que estén preparados para crear cualquier tipo de requerimiento sin depender de terceros.

El tiempo propuesto para realizar cada reto es de una semana y la solución, es decir el código JavaScript será publicado en este medio.

RetoJS 00 - Presentación e Introducción al RetoJS

En este primer video hago una presentación personal de mi experiencia y los objetivos de querer fomentar la creatividad de los desarrolladores a través del Reto JavaScript, el cual consiste en el plazo de una semana crear una aplicación con un solo archivo JavaScript que realice la funcionalidad solicitada.

La idea es que se olviden poco a poco de los Frameworks y Librerías de JavaScript que son negativos para la Performance sobre todo si se abusa de ellos y que sean reemplazados por la lógica y la creatividad de tal forma que les permita programar en forma nativa cualquier cosa.


RetoJS 01 - Mover Columnas en una Tabla de Datos 

En este video se muestra el primer Reto JavaScript que consiste en realizar una aplicación que permita mover el orden de las columnas de una tabla en el lado del cliente, solo con JavaScript.

En el ejemplo se muestra la tabla de productos con 6 columnas, las cuales se pueden arrastrar en cualquier dirección, ya sea de izquierda a derecha o de derecha a izquierda, cambiando el orden de la presentación.


RetoJS 02 - Agrupar Celdas en una Tabla de Datos

En este video se muestra el segundo Reto JavaScript que consiste en realizar una aplicación que permita agrupar las celdas por una o varias columnas de una tabla en el lado del cliente, solo con JavaScript.

En el ejemplo se muestra la tabla de productos con 6 columnas, las cuales se pueden arrastrar a la parte superior que indica la agrupación, para lo cual primero se ordena y luego se combina las celdas. También hay un botón que permite eliminar la agrupación y regresar a la vista normal (no agrupada).


RetoJS 03 - Mover Columnas y Agrupar Celdas en una Tabla

En este video se muestra el tercer Reto JavaScript que consiste en realizar una aplicación que permita mover el orden de las columnas y agrupar celdas de una tabla en el lado del cliente, solo con JavaScript.

En el ejemplo se muestra la tabla de productos con 6 columnas, las cuales se pueden arrastrar en cualquier dirección, ya sea de izquierda a derecha o de derecha a izquierda, cambiando el orden de la presentación.

Además, debe poderse arrastrar las cabeceras a la parte superior que indica agrupación, para lo cual primero se ordena y luego se combina las celdas. También hay un botón que permite eliminar la agrupación y regresar a la vista normal (no agrupada).


Comentario Final

Estas tareas propuestas son comunes en el trabajo con datos en las aplicaciones web, es por eso, que en este último taller vamos a incluir todos los retos propuestos y lo haremos desde cero.

Que se diviertan, y demuestren todo su potencial.

miércoles, 10 de febrero de 2016

Videos Curso ASP.NET MVC & JavaScript HTE (Parte 2)

Videos del Curso ASP.NET MVC & JavaScript HTE (Parte 2)

Comparto la segunda parte del curso de ASP.NET MVC & JavaScript realizado en la Empresa HTE donde todo se trabaja en forma desconectada usando en el Servidor mi Serializador de Cadenas y JavaScript en el Cliente, sobre todo Matrices.

1. Curso MVC & JavaScript HTE - Demo 09

En este video se muestra como ordenar columnas en forma desconectada, tanto ascendente como descendente usando matrices en JavaScript.

Para el ejemplo se crean enlaces en la cabecera de la tabla, los cuales permiten ordenar sobre cada campo de la tabla productos, el primer clic ordena en forma ascendente y el segundo ordena en forma descendente mostrándose el símbolo respectivo.


2. Curso MVC & JavaScript HTE - Demo 10

En este video se muestra como paginar registros usando matrices en el cliente usando JavaScript. La paginación consta de enlaces (links) solo con los números de páginas, es decir, una paginación simple.

En este ejemplo se usan botones para los números de paginas, los cuales se ven en forma de círculo, con fondo y color debido al estilo, el cual cambia de apariencia al pasar el mouse (hover).


3. Curso MVC & JavaScript HTE - Demo 11

En este video se muestra como paginar registros usando matrices en el cliente usando JavaScript. La paginación consta de enlaces (links) con los números de páginas y también con 4 botones a los extremos (2 en cada lado) que permiten trabajar por bloques.

Este tipo de paginación es necesaria cuando se tiene muchas páginas y debemos agruparlas por bloques, para poder ver mejor y navegar rápidamente al inicio o al final.


4. Curso MVC & JavaScript HTE - Demo 12

En este video se muestra como hacer todas las operaciones en forma conjunta, es decir, paginar registros, ordenar columnas, filtrar registros y exportar registros a texto y excel todo en el cliente (desconectado) usando matrices en JavaScript.

El ejemplo es con la lista de productos y los datos están paginados y por bloques, también las columnas se pueden ordenar en forma ascendente y descendente, también se puede filtrar por cada campo escribiendo sobre los textos de las cabeceras en cada columna de la tabla y finalmente los datos filtrados se pueden exportar en un archivo de texto o en un archivo de excel.


5. Curso MVC & JavaScript HTE - Demo 13 (Parte 1)

En este video se muestra la primera parte de como realizar un mantenimiento de una tabla, es decir, las operaciones de adicionar, actualizar y eliminar registros.

En el ejemplo se muestra una lista de productos paginada por bloques, la cual se puede ordenar, filtrar, exportar a texto y excel. Si queremos crear un nuevo producto o editar uno existente se mostrará un popup (div dentro de la misma pagina).

Después de adicionar o actualizar un registro se actualiza la lista de productos y se cierra el popup. Finalmente, se puede eliminar desde la lista un registro previa confirmación.


6. Curso MVC & JavaScript HTE - Demo 13 (Parte 2)

En este video se muestra la segunda parte de como realizar un mantenimiento de una tabla, es decir, las operaciones de adicionar, actualizar y eliminar registros.

En el ejemplo se muestra una lista de productos paginada por bloques, la cual se puede ordenar, filtrar, exportar a texto y excel. Si queremos crear un nuevo producto o editar uno existente se mostrará un popup (div dentro de la misma pagina).

Después de adicionar o actualizar un registro se actualiza la lista de productos y se cierra el popup. Finalmente, se puede eliminar desde la lista un registro previa confirmación.


7. Curso MVC & JavaScript HTE - Demo 14 (Parte 1)

En este video se muestra la primera parte de cómo crear una cabecera detalle para una orden usando una sola página, ya que se usa solo 2 divs: uno para la parte principal y otro para las búsquedas.

Los datos de los clientes, empleados y productos para las búsquedas se cargan desde un inicio y se presentan en el mismo popup (div) usando la misma funcionalidad para los 3: filtro, ordenación y paginación, permitiendo seleccionar dando un clic.

También se realiza la validación de la cabecera y los detalles usando JavaScript y mostrando los resultados en un span como viñetas y filas de colores si no están completos los datos del detalle.

Finalmente, se graba la orden usando una cadena que viaja hasta el Procedimiento Almacenado de SQL Server usando un solo comando y una sola conexión. Además se puede imprimir la orden creada usando JavaScript para crear el HTML respectivo.


8. Curso MVC & JavaScript HTE - Demo 14 (Parte 2)

En este video se muestra la segunda parte de cómo crear una cabecera detalle para una orden usando una sola página, ya que se usa solo 2 divs: uno para la parte principal y otro para las búsquedas.

Los datos de los clientes, empleados y productos para las búsquedas se cargan desde un inicio y se presentan en el mismo popup (div) usando la misma funcionalidad para los 3: filtro, ordenación y paginación, permitiendo seleccionar dando un clic.

También se realiza la validación de la cabecera y los detalles usando JavaScript y mostrando los resultados en un span como viñetas y filas de colores si no están completos los datos del detalle.

Finalmente, se graba la orden usando una cadena que viaja hasta el Procedimiento Almacenado de SQL Server usando un solo comando y una sola conexión. Además se puede imprimir la orden creada usando JavaScript para crear el HTML respectivo.


9. Curso MVC & JavaScript HTE - Demo 14 (Parte 3)

En este video se muestra la tercera parte de cómo crear una cabecera detalle para una orden usando una sola página, ya que se usa solo 2 divs: uno para la parte principal y otro para las búsquedas.

Los datos de los clientes, empleados y productos para las búsquedas se cargan desde un inicio y se presentan en el mismo popup (div) usando la misma funcionalidad para los 3: filtro, ordenación y paginación, permitiendo seleccionar dando un clic.

También se realiza la validación de la cabecera y los detalles usando JavaScript y mostrando los resultados en un span como viñetas y filas de colores si no están completos los datos del detalle.

Finalmente, se graba la orden usando una cadena que viaja hasta el Procedimiento Almacenado de SQL Server usando un solo comando y una sola conexión. Además se puede imprimir la orden creada usando JavaScript para crear el HTML respectivo.


miércoles, 3 de febrero de 2016

Entrenamiento - Vacantes Taller ASP.NET MVC & JavaScript Domingos

Vacantes Taller ASP.NET MVC & JavaScript Domingos

A los interesados en participar en el Taller de ASP.NET MVC & JavaScript, les comunico que pueden incorporarse para el inicio del tercer mes (Domingo 7 de Febrero de 8:00 am a 2:00 pm)

Los temas que ya se trataron fueron:
- Primer mes: Programando en el servidor web con C# (Creación de Librerías Genéricas y Serializadores)
- Segundo mes: Programando con JavaScript en el Cliente (Listar, Filtrar, Ordenar, Paginar, Exportar)

Los temas a tratar en este mes serán:
- Tercer mes: Mantenimiento, Cabecera Detalle, Reportes, Gráficos, Canvas, SVG, WebWorkers

La inversión del curso es de 200 soles y se paga en efectivo el primer día de clases y para participar hay que enviar un mail de confirmación a Luis.duenash@gmail.com indicando su nombre completo y se le enviará la dirección donde se realiza el curso que es en el cono norte.

Hay muchos que están en duda y quieren participar pero se les complica el horario o dicen que esta muy lejos, por lo cual esperan otra oportunidad. Solo les recuerdo que ya no habrá mas oportunidades porque ya no pienso seguir dictando talleres y las librerías de código y los ejemplos solo se las comparto a los alumnos de los talleres.

Los que han sido mis ex-alumnos y no se han enterado, ya no existe ISILTECH y la única forma de llevar un curso conmigo es participando en los Talleres de los Domingos. Finalmente, los temas que se ven son diferentes a los que dictaba hace mas de un año, todo es de lado del cliente (super veloz), es decir, mas del 80% de código es JavaScript y solo un 20% es .NET (C#).

jueves, 28 de enero de 2016

Videos Curso ASP.NET MVC & JavaScript Desysweb (Parte 1)

Videos del Curso ASP.NET MVC & JavaScript Desysweb (Parte 1)

Comparto la primera parte de otro curso de ASP.NET MVC & JavaScript realizado en la Empresa Desysweb donde todo se trabaja en forma desconectada usando en el Servidor mi Serializador de Cadenas y JavaScript en el Cliente, sobre todo Matrices.

1. Curso MVC & JavaScript Desysweb - Demo 01

En este video se muestra como trabajar con Listas de 2 formas:
- Consulta Síncrona usando el control MVC WebGrid que envia HTML
- Consulta Asíncrona usando XHR y enviando String que son usados para crear una Tabla por JavaScript en el Cliente.

Esta segunda forma es mas eficiente ya que solo se envía los datos (cadenas separadas por un caracter) y  en el cliente se construye el HTML usando JavaScript.


2. Curso MVC & JavaScript Desysweb - Demo 02

En este video se muestra como crear una Consulta Asíncrona usando XmlHttpRequest (XHR) enviando Cadenas (String) mediante un serializador personalizado y creando una tabla HTML en JavaScript.

Para el ejemplo se trabaja con una lista de Productos: Código, Nombre, Id del Proveedor, Nombre del Proveedor, Id de la Categoría, Nombre de la Categoría, Precio Unitario y Stock.


3. Curso MVC & JavaScript Desysweb - Demo 03

En este video se muestra como crear un filtro desconectado mediante un ComboBox y usando solo Cadenas en JavaScript.

Para el ejemplo se muestra en un ComboBox las Categorías y al seleccionar una se muestran los Productos por Categoría, pero todo es en el lado del cliente usando JavaScript.


4. Curso MVC & JavaScript Desysweb - Demo 04

En este video se enseña como crear un filtro desconectado mediante las cabeceras de la tabla usando controles de texto para filtrar cada campo, el filtro se hace solo usando Cadenas.

El ejemplo es con la tabla productos y se puede filtrar por código, nombre, proveedor, categoría, precio y stock mediante JavaScript.


5. Curso MVC & JavaScript Desysweb - Demo 05

En este video se enseña como crear un filtro desconectado mediante las cabeceras de la tabla usando controles de textos y combos para filtrar cada campo.

El ejemplo es con la tabla productos y se puede filtrar por código, nombre, proveedor, categoría, precio y stock mediante JavaScript.


6. Curso MVC & JavaScript Desysweb - Demo 06

En este video se muestra como trabajar con matrices y ocultar columnas en la presentación, para lo cual se listan los datos de los productos sin incluir el código del proveedor ni el código de la categoría.

Al seleccionar un producto se muestra un popup con su detalle donde si se muestran todos los datos, incluyendo los ocultos, el cual se realiza usando una búsqueda en la matriz.

Cabe resaltar que en este ejemplo no se usan dos páginas sino dos divs, uno para la lista y el otro para el detalle, lo que hace más rápido la visualización de los datos.


7. Curso MVC & JavaScript Desysweb - Demo 07

En este video se muestra como ordenar columnas en forma ascendente y descendente usando matrices en JavaScript.

Para el ejemplo se crean enlaces en la cabecera de la tabla, los cuales permiten ordenar sobre cada campo de la tabla productos, el primer clic ordena en forma ascendente y el segundo ordena en forma descendente mostrándose el símbolo respectivo.


8. Curso MVC & JavaScript Desysweb - Demo 08

En este video se muestra como paginar registros usando matrices en el cliente usando JavaScript. La paginación consta de enlaces (links) con los números de páginas y a los extremos los botones de avance por bloques, en el caso de que sean demasiadas páginas.

En este ejemplo se usan enlaces (a hrefs) para la paginación los cuales se encuentran sobre una lista de viñetas que se visualizan como botones gracias a la hija de estilos.


9. Curso MVC & JavaScript Desysweb - Demo 09

En este video se muestra como hacer las 3 operaciones en forma conjunta, es decir, paginar registros, ordenar columnas y filtrar registros en el cliente (desconectado) usando matrices en JavaScript.

El ejemplo es con la lista de productos y los datos están paginados y por bloques, también las columnas se pueden ordenar en forma ascendente y descendente y finalmente se puede filtrar por cada campo escribiendo sobre los textos de las cabeceras en cada columna de la tabla.


lunes, 23 de marzo de 2015

El Demo del Día: Paginación y Ordenación Asíncrona en ASP.NET MVC con Ajax ActionLink y Vista Parcial

Paginación y Ordenación Asíncrona en ASP.NET MVC con Ajax ActionLink y Vista Parcial

Luego de casi un mes de no publicar un Demo, esta semana vamos a publicar uno diario para nivelarnos. En esta ocasión veremos como paginar y ordenar en forma asíncrona en ASP.NET MVC usando el control Helper Ajax.ActionLink y una Vista Parcial.

Requerimiento

Se desea crear una aplicación web en ASP.NET MVC que permita consultar la lista de empleados, dando la posibilidad de mostrar por páginas y ordenar los registros en forma ascendente y descendente por cada columna mostrada.
El requerimiento debe acompañarse de una buena experiencia de usuario que permita actualizar los datos al paginar u ordenar sin refrescar toda la pantalla.

Solución

Usaremos los controles Ajax.ActionLink tanto para la ordenación como la paginación, los cuales realizarán una llamada asíncrona (internamente usan jQuery Ajax) y actualizarán la vista mediante una vista parcial con los empleados.

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

Para listar los datos de los empleados crear el procedimiento "uspEmployeesListar":

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

Crear una Librería de Entidades de Negocio para Northwind

Crear una librería de clases "Northwind.Librerias.EntidadesNegocio" con una clase llamada "beEmpleado" que tenga el siguiente código:

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

Crear una Librería de Acceso a Datos para Northwind

Crear una librería de clases "Northwind.Librerias.AccesoDatos" con una clase llamada "daEmpleado" que tenga el siguiente código:

namespace Northwind.Librerias.AccesoDatos
{
    public class daEmpleado
    {
        public List<beEmpleado> Listar(SqlConnection con)
        {
            List<beEmpleado> lbeEmpleado = null;
            SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
           
            if (drd != null)
            {
                lbeEmpleado = new List<beEmpleado>();
                beEmpleado obeEmpleado;
                int posIdEmpleado = drd.GetOrdinal("EmployeeID");
                int posApellido = drd.GetOrdinal("LastName");
                int posNombre = drd.GetOrdinal("FirstName");
                int posFechaNacimiento = drd.GetOrdinal("BirthDate");
                while (drd.Read())
                {
                    obeEmpleado = new beEmpleado();
                    obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
                    obeEmpleado.Apellido = drd.GetString(posApellido);
                    obeEmpleado.Nombre = drd.GetString(posNombre);
                    obeEmpleado.FechaNacimiento = drd.GetDateTime(posFechaNacimiento);
                    lbeEmpleado.Add(obeEmpleado);
                }
                drd.Close();
            }
            return (lbeEmpleado);
        }
    }
}

Nota: Hay que referenciar a la librería de entidades de negocio anteriormente creada.

Crear una Librería de Reglas de Negocio para Northwind

Crear una librería de clases "Northwind.Librerias.AccesoDatos" con una clase llamada "daEmpleado" que tenga el siguiente código:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Configuration;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.AccesoDatos;

namespace Northwind.Librerias.ReglasNegocio
{
    public class brEmpleado
    {
        public List<beEmpleado> Listar()
        {
            List<beEmpleado> lbeEmpleado = null;
            string CadenaConexion = ConfigurationManager.
            ConnectionStrings["conNW"].ConnectionString;
            using (SqlConnection con = new SqlConnection(CadenaConexion))
            {
                try
                {
                    con.Open();
                    daEmpleado odaEmpleado = new daEmpleado();
                    lbeEmpleado = odaEmpleado.Listar(con);
                }
                catch (SqlException ex)
                {
                    foreach (SqlError err in ex.Errors)
                    {
                        //GrabarLog
                    }
                }
                catch (Exception ex)
                {
                    //GrabarLog
                }
            } //con.close(); con.Dispose();
            return (lbeEmpleado);
        }
    }
}

Nota: Hay que referenciar a las librería "System.Configuration", la librería de entidades de negocio y de acceso a datos.

Crear una Aplicación Web de ASP.NET MVC4 en C#

Abrir el Visual Studio 2012 y seleccionar un nuevo proyecto de tipo: "Aplicación web de ASP.NET MVC4".

Escribir como nombre "Demo09" y "Aceptar", en el siguiente diálogo seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".

Antes de empezar a programar debemos referenciar las librerías anteriormente creadas, es decir, la librería de entidades del negocio, de acceso a datos y de reglas del negocio de Northwind.

Crear un Controlador para el Empleado

Clic derecho a la carpeta "Controllers" y seleccionar "Agregar" y luego "Controlador", llamarle al archivo "EmpleadoController.cs" y en opciones de plantillas dejarlo en plantilla vacia (Vaciar Controlador MVC). Luego escribir el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.ReglasNegocio;

namespace Demo09.Controllers
{
    public class EmpleadoController : Controller
    {
        List<beEmpleado> lbePagina;
        List<beEmpleado> lbeEmpleado;
        int indicePaginaActual;
        int indiceUltimaPagina;
        int registrosPorPagina = 10;

        private void mostrarPagina()
        {            
            lbePagina = new List<beEmpleado>();
            int inicio = indicePaginaActual * registrosPorPagina;
            int fin = inicio + registrosPorPagina;
            for (int i = inicio; i < fin; i++)
            {
                if (i==lbeEmpleado.Count) break;
                lbePagina.Add(lbeEmpleado[i]);
            }
        }

        public ActionResult Lista()
        {
            brEmpleado obrEmpleado = new brEmpleado();
            lbeEmpleado = obrEmpleado.listar();
            Session["Empleados"] = lbeEmpleado;
            indiceUltimaPagina = (lbeEmpleado.Count / registrosPorPagina);
            if (lbeEmpleado.Count % registrosPorPagina == 0) indiceUltimaPagina--;
            ViewBag.IndiceUltimaPagina = indiceUltimaPagina;
            mostrarPagina();
            return View(lbePagina);
        }

        public PartialViewResult Ordenar(string campo)
        {
            ViewBag.Campo = campo;
            lbeEmpleado = (List<beEmpleado>)Session["Empleados"];
            int n = 0;
            string simbolo = "▲";
            if (TempData[campo] != null)
            {
                if (TempData[campo].Equals(0))
                {
                    n = 1;
                    simbolo = "▼";
                }
                else simbolo = "▲";
            }
            TempData[campo] = n;
            ViewBag.Simbolo = simbolo;
            if (n == 0) lbeEmpleado = lbeEmpleado.OrderBy
            (x => x.GetType().GetProperty(campo).GetValue(x, null)).ToList();
            else lbeEmpleado = lbeEmpleado.OrderByDescending
            (x => x.GetType().GetProperty(campo).GetValue(x, null)).ToList();
            Session["Empleados"] = lbeEmpleado;
            if (TempData["indicePaginaActual"] != null)
            {
                indicePaginaActual = (int)TempData["indicePaginaActual"];
                TempData["indicePaginaActual"] = indicePaginaActual;
            }
            mostrarPagina();
            return PartialView("Tabla", lbePagina);
        }

        public PartialViewResult Paginar(int pagina)
        {
            lbeEmpleado = (List<beEmpleado>)Session["Empleados"];
            indicePaginaActual = pagina;
            TempData["indicePaginaActual"] = indicePaginaActual;
            mostrarPagina();
            return PartialView("Tabla", lbePagina);
        }
    }
}

Nota: Inicialmente se llamará al método de acción "Lista" y luego los Ajax.ActionLink de ordenar llamarán a la acción "Ordenar" que devolverá una vista parcial llamada "Tabla" con los datos ordenados ascendente o descendente de acuerdo al valor del TempData de cada campo.
Si se da clic a los Ajax.ActionLink de paginación se llamará a la acción "Paginar" que configura el "indicePaginaActual" y muestra la vista parcial "Tabla" paginada.

Crear una Hoja de Estilos para la Vista Principal y la Vista Parcial

Primero crear una carpeta llamada "Content", luego clic derecho "Agregar" y luego "Hoja de estilos" y como nombre llamarle "ACME.css" y escribir el siguiente código:

body {
    background-color:gray;
}
.Titulo {
    background-color:black;
    color:white;
    font-size:larger;
}
.Subtitulo {
    background-color:white;
    color:black;
    font-size:large;
}
.AnchoTotal {
    width:100%;
}
.Centrado {
    text-align:center;
}
.FilaCabecera {
    background-color:lightgray;
    color:black;
}
.FilaDatos {
    background-color:white;
    color:black;
}

Crear el archivo JavaScript con el código cliente para la Vista Principal

Antes que nada crear una carpeta llamada "Scripts" y arrastrar del explorador de Windows los archivos de jQuery: "jquery-1.8.2.min.js" y "jquery.unobtrusive-ajax.min.js", luego agregar un archivo de JavaScript llamado "Rutinas.js" y escribir el siguiente código:

function mostrarSimbolo() {
    var campo = document.getElementById("hdfCampo").value;
    var simbolo = document.getElementById("hdfSimbolo").value;
    var span = document.getElementById("spn" + campo);
    span.innerHTML = simbolo;
}

Nota: Los dos campos ocultos serán creados en la vista parcial y se usan para actualizar el símbolo de ordenación en la vista principal.

Crear la Vista Principal

Ir al controlador "Empleado" y ubicarse sobre el método "Lista" (acción), clic derecho y seleccionar "Agregar vista", desmarcar todas las casillas (checkboxs) y agregar la vista llamada "Lista", luego escribir el siguiente código:

@using Northwind.Librerias.EntidadesNegocio
@model List<beEmpleado>
@{
    Layout = null;
    AjaxOptions configura = new AjaxOptions{ HttpMethod="get", InsertionMode=InsertionMode.Replace, UpdateTargetId="tbEmpleado", OnComplete="mostrarSimbolo"};
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Lista</title>
    <link href="~/Content/ACME.css" rel="stylesheet" />
</head>
<body>
    <div>
        <table class="AnchoTotal">
            <tr class="Titulo">
                <td>Demo 09: Grilla Paginada y Ordenada Asíncrona con 
                       Ajax ActionLink y Vista Parcial</td>
            </tr>
            <tr class="Subtitulo">
                <td>Consulta de Empleados</td>
            </tr>
            <tr>
                <td>
                    <table class="AnchoTotal">
                        <thead>
                            <tr class="FilaCabecera">
                                <td style="width:70px">
                                    @Ajax.ActionLink("Código","Ordenar",
                                     new {campo="IdEmpleado"},configura)
                                    @Html.Raw(" ")<span id="spnIdEmpleado"></span>
                                </td>
                                <td style="width:200px">
                                    @Ajax.ActionLink("Apellido","Ordenar",
                                     new {campo="Apellido"},configura)
                                    @Html.Raw(" ")<span id="spnApellido"></span>
                                </td>
                                <td style="width:200px">
                                    @Ajax.ActionLink("Nombre","Ordenar",
                                     new {campo="Nombre"},configura)
                                    @Html.Raw(" ")<span id="spnNombre"></span>
                                </td>
                                <td style="width:100px">
                                    @Ajax.ActionLink("Fecha Nac","Ordenar",
                                     new {campo="FechaNacimiento"},configura)
                                    @Html.Raw(" ")<span id="spnFechaNacimiento"></span>
                                </td>
                            </tr>
                        </thead>
                        <tbody id="tbEmpleado">
                            @Html.Partial("Tabla",Model)
                        </tbody>
                        <tfoot>
                            <tr class="FilaCabecera">
                                <td colspan="4" class="Centrado">
                                    @for (int i = 0; i <= ViewBag.IndiceUltimaPagina; i++)
                                    {
                                        @Ajax.ActionLink((i + 1).ToString(), "Paginar", 
                                         new { pagina=i}, configura)                                        
                                        @Html.Raw("  ")
                                    }
                                </td>
                            </tr>
                        </tfoot>
                    </table>
                </td>
            </tr>
        </table>
    </div>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
    <script src="~/Scripts/Rutinas.js"></script>
</body>
</html>

Crear la Vista Parcial

Ir al controlador "Empleado" y ubicarse sobre el método "Lista" (acción), clic derecho y seleccionar "Agregar vista", seleccionar la casilla (check) "Crear como vista parcial" y agregar la vista llamada "Tabla", luego escribir el siguiente código:

@using Northwind.Librerias.EntidadesNegocio
@model List<beEmpleado>
@foreach (beEmpleado obeEmpleado in Model)
{
    <tr class="FilaDatos">
        <td>@obeEmpleado.IdEmpleado</td>
        <td>@obeEmpleado.Apellido</td>
        <td>@obeEmpleado.Nombre</td>
        <td>@obeEmpleado.FechaNacimiento.ToShortDateString()</td>
    </tr>
}
<input id="hdfCampo" type="hidden" value="@ViewBag.Campo" />
<input id="hdfSimbolo" type="hidden" value="@ViewBag.Simbolo" />

Nota: Es necesario que los dos campos ocultos se encuentren dentro de la vista parcial para que se actualicen con el nombre del campo y el símbolo que se va a mostrar al hacer la ordenación asíncrona.

Modificar el archivo Web.Config para incluir la cadena de conexión

Ir al archivo Web.config ubicado en la raíz del proyecto e incluir lo siguiente:

<connectionStrings>
    <add name="conNW" providerName="SQLServer" connectionString=
"uid=UsuarioNW;pwd=123456;server=DSOFT\Sqlexpress;database=Northwind"/>
</connectionStrings>

Nota: Cambiar el nombre del servidor, el usuario y la clave de acuerdo a su configuración.

Configurar la Acción de Inicio

Para probar la aplicación web debemos configurar el inicio para lo cual nos vamos a la carpeta "App_Start" y abrimos el archivo "RouteConfig.cs" cambiando el nombre del controlador y la acción tal como se muestra en el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Demo09
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Empleado", action = "Lista", id = UrlParameter.Optional }
            );
        }
    }
}

Ejecutar y Probar la Aplicación Web

Finalmente, grabar y pulsar F5 para ejecutar la aplicación, mostrándose el resultado similar a la siguiente figura:


Probar la ordenación ascendente y descendente por cada columna y se mostrará similar a la siguiente figura:


Finalmente, navegar por cada página y se verá los datos similar a la siguiente figura:


Comentario Final

En este post, hemos aprendido como paginar y ordenar en forma asíncrona usando los controles Helpers Ajax.ActionLink de ASP.NET MVC para mostrar los datos de los empleados.

Como siempre en este Blog no hemos necesitado de ningún control de terceros para realizar estas operaciones, sino que lo hemos hecho con los controles y librerías que vienen con el Framework de ASP.NET MVC.

Descarga del código

Video del Demo


Mañana publicaré otro Demo interesante de como hacer lo mismo pero totalmente desconectado, es decir sin ir al servidor web ni al servidor de datos.

Si les gusto compartanlo y denle like o +.

Videos - Curso de ASP.NET MVC Domingos (Parte 3)

Videos del Curso de ASP.NET MVC Domingos (Parte 3)

Comparto la tercera parte del Curso de ASP.NET MVC realizado los Domingos.

Curso de MVC Domingos - Demo 11 - Consulta Asíncrona en el Servidor con jQuery Ajax y JSON

En este video se muestra como realizar una consulta asíncrona de productos por categoría usando jQuery Ajax y devolviendo una lista de objetos como JSON para escribir el HTML en el cliente por Javascript.


Curso de MVC Domingos - Demo 12 - Consulta Asíncrona en el Servidor con XmlHttpRequest y Strings

En este video aprenderemos como realizar una consulta asíncrona de productos por categoría usando XmlHttpRequest (lo que usa internamente jQuery y Ajax) y devolviendo una cadena (String) para reducir el ancho de banda ya que es la octava parte de una vista parcial y la tercera parte de un JSON.


Curso de MVC Domingos - Demo 13 - Consulta Desconectada en el Cliente con jQuery Ajax y JSON

Este video muestra como realizar una consulta de productos por categoría totalmente desconectada del servidor web y de base de datos, recibiendo la primera vez todos los datos como JSON usando jQuery Ajax y filtrándolos en el cliente por JavaScript.


Curso de MVC Domingos - Demo 14 - Ordenación Desconectada en el Cliente con jQuery Ajax y JSON

En este video se muestra como ordenar los productos en el lado del cliente, totalmente desconectado del servidor web y de datos, para lo cual inicialmente hacemos una llamada asíncrona con jQuery Ajax y devolvemos un JSON con los productos los cuales se ordenan usando una función genérica de JavaScript.



jueves, 5 de marzo de 2015

Videos - Curso de ASP.NET MVC CIPSA (Parte 2)

Videos del Curso de ASP.NET MVC CIPSA (Parte 2)

Segunda parte del curso dictado en CIPSA de Desarrollo de Aplicaciones Web con ASP.NET MVC.

Curso de MVC CIPSA - Demo 07 - Consulta Conectada de Empleado con Foto

En este video se aprenderá como hacer una consulta conectada o en línea para mostrar los datos del empleado incluyendo su foto desde base de datos.



Curso de MVC CIPSA - Demo 08 - Consulta Desconectada de Empleado con Foto

En este video se aprenderá como hacer una consulta desconectada almacenando en sesión los empleados y mostrando los datos de cada uno cuando se solicite.


Curso de MVC CIPSA - Demo 09 (Parte 1) - Grilla de Empleados con Filtros en la Cabecera

Este video es la primera parte de como crear una tabla con filtros en la cabecera que permita consultar los empleados en forma desconectada y mostrar los resultados con colores para las coincidencias de los datos buscados.


Curso de MVC CIPSA - Demo 09 (Parte 2) - Grilla de Empleados con Filtros en la Cabecera

Este video es la segunda parte de como crear una tabla con filtros en la cabecera que permita consultar los empleados en forma desconectada y mostrar los resultados con colores para las coincidencias de los datos buscados.


Curso de MVC CIPSA - Demo 10 (Parte 1) - Grilla de Productos con Combos en la Cabecera

Este video es la primera parte de como crear una tabla con filtros en la cabecera que contenga textos y combos para filtrar los productos y mostrar los resultados de color.


Curso de MVC CIPSA - Demo 10 (Parte 2) - Grilla de Productos con Combos en la Cabecera

Este video es la segunda parte de como crear una tabla con filtros en la cabecera que contenga textos y combos para filtrar los productos y mostrar los resultados de color.


No se olviden darle like y repostear.

Saludos.

miércoles, 4 de marzo de 2015

Videos - Curso de ASP.NET MVC CIPSA (Parte 1)

Videos del Curso de ASP.NET MVC CIPSA (Parte 1)

Esta semana he inaugurado mi canal de YouTube, donde encontrarán videos de desarrollo en .NET, HTML5, Móviles, etc.

Están invitados a suscribirse y darle Like a los que les guste, les dejo los enlaces de los videos que ya subí sobre un curso de capacitación en ASP.NET MVC a la Empresa CIPSA.

Nota: Por ahora, los videos No tienen audio ya que no uso micrófono y están grabados con Cantasia.

Curso de MVC CIPSA - Demo 01 - Controlador y Acciones

Este video muestra como crear una simple aplicación ASP.NET MVC usando Razor y C# que contenga solo un controlador y métodos de acción que devuelvan simples valores.


Curso de MVC CIPSA - Demo 02 (Parte 1) - Formulario MVC y Controles HTML Helpers

Este video muestra la primera parte de como crear un Formulario MVC usando los Controles HTML Helpers para registrar los datos de un empleado. También se muestra como cargar un archivo de texto y un archivo XML en un par de Combos.


Curso de MVC CIPSA - Demo 02 (Parte 2) - Formulario MVC y Controles HTML Helpers

Este video muestra la segunda parte de como crear un Formulario MVC usando los Controles HTML Helpers para registrar los datos de un empleado. También se muestra como cargar un archivo de texto y un archivo XML en un par de Combos.


Curso de MVC CIPSA - Demo 03 - Aplicación en Capas con Vista Con Tipo

Este video muestra como distribuir la lógica de la aplicación en varias capas, creando librerías de entidades del negocio, acceso a datos y reglas del negocio. Además se crea una vista con tipo (Modelo) para listar los empleados usando el control WebGrid.


Curso de MVC CIPSA - Demo 04 - Grilla de Empleados Paginada

Este video enseña como realizar paginación en una tabla de empleados (grilla) trabajando en forma desconectada. También se muestra como se guarda un valor entre request usando el TempData.


Curso de MVC CIPSA - Demo 05 - Grilla de Empleados Ordenada

Este video enseña como realizar ordenación en una tabla de empleados (grilla) trabajando en forma desconectada. También se muestra como se guarda un valor entre request usando el TempData.


Curso de MVC CIPSA - Demo 06 - Grilla de Empleados Paginada y Ordenada

Este video enseña como realizar paginación y ordenación a la vez, en una tabla de empleados (grilla) trabajando en forma desconectada. También se muestra como se guarda un valor entre request usando el TempData.


No se olviden de suscribirse y darle Like, para seguir subiendo diariamente mas videos.

PD: Los que desean pueden repostear los videos en sus blogs o en YouTube.

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

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.