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

martes, 1 de marzo de 2016

El Libro del Día: Going GAS

El Libro del Día: 2016-03-01

Titulo: Going GAS
Autor: Bruce Mcpherson
Editorial: O'Reilly
Nro Paginas: 455

Capítulos:
1. Introduction
2. Language Basics
3. Translating VBA Functions
4. Living with the Quotas
5. The Properties Service
6. The Spreadsheet Service
7. The Document App
8. Gmail, Calendar, and Contacts Apps
9. Drive and DriveApp
10. HTML Service
11. Content Service
12. Charts
13. Sites
14. Advanced Google Services
15. Authentication and Security
16. External APIs and Integration
17. Execution API
18. Office Add-Ins and Google Add-Ons

Descarga:
Going_GAS

jueves, 17 de septiembre de 2015

El Libro del Día: Ext JS 6 By Example

El Libro del Día: 2015-09-17

Titulo: Ext JS 6 By Example
Autor: Anand Dayalan
Editorial: Packt
Nro Paginas: 226

Capítulos:
Chapter 1: Getting Started with Ext JS
Chapter 2: Core Concepts
Chapter 3: Basic Components
Chapter 4: Data Packages
Chapter 5: Working with Grids
Chapter 6: Advanced Components
Chapter 7: Working with Charts
Chapter 8: Theming and Responsive Design

Descarga:
ExtJS_6_By_Example

viernes, 31 de julio de 2015

El Libro del Día: Data Visualization with JavaScript

El Libro del Día: 2015-07-31

Titulo: Data Visualization with JavaScript
Autor: Stephen A. Thomas
Editorial: No Starch Press
Nro Paginas: 381

Capítulos:
Chapter 1: Graphing Data
Chapter 2: Making Charts Interactive
Chapter 3: Integrating Charts on a Page
Chapter 4: Creating Specialized Graphs
Chapter 5: Displaying Timelines
Chapter 6: Visualizing Geographic Data
Chapter 7: Custom Visualizations with D3.js
Chapter 8: Managing Data in the Browser
Chapter 9: Building Data-Driven Web Applications: Part 1
Chapter 10: Building Data-Driven Web Applications: Part 2

Descarga:
Data_Visualization_with_JavaScript

viernes, 20 de febrero de 2015

El Demo del Día: Graficar Datos en el Cliente en ASP.NET MVC con JSON, Canvas y JavaScript

Graficar Datos en el Cliente en ASP.NET MVC con JSON, Canvas y JavaScript

Después de un par de semanas sin publicar un demo, les presento un post muy interesante de como trabajar en forma desconectada en el cliente para realizar consultas y gráficos de datos en ASP.NET MVC para lo cual usaremos jQuery, JSON, Canvas y JavaScript.

Requerimiento

Se desea crear una aplicación web que permita consultar los productos por categoría y mostrar los datos mas gráficos de diferentes tipos: Barras, Columnas, Lineas y Pie, pero el requisito es que sea desconectada tanto del Servidor de Datos como del Servidor Web, es decir, el filtro para la consulta y el gráfico se hará en el cliente.

Solución

- Crear una aplicación en ASP.NET MVC con un método de acción que se conecte a la BD una sola vez y devuelva un objeto con 2 listas: categorías y productos.
- Devolver una vista al cliente con la lista de categorías y la lista de tipos de gráficos.
- Ni bien carga la vista en el cliente hacer una llamada asíncrona usando $.ajax de jQuery para llamar a un método de acción que devuelva la lista de productos en formato JSON.
- Cuando el usuario seleccione una Categoría o seleccione un Tipo de Gráfico se llamará a una función JavaScript que filtrará los datos por la categoría seleccionada y los presentará en una tabla además lo dibujará en un Canvas.

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

Para el ejemplo usaremos la Base de Datos Northwind de SQL Server, en la cual crearemos el siguiente Procedimiento almacenado:

Create Procedure [dbo].[uspCategoriesProductsListar]
As
Select CategoryID,CategoryName From Categories
Select ProductID,ProductName,SupplierID,CategoryID,UnitPrice,UnitsInStock From Products

Crear la Librería de Clases Entidades del Negocio

Crear la librería de clases llamada: "Northwind.Librerias.EntidadesNegocio" y agregar la clase "beCategoria.cs":

namespace Northwind.Librerias.EntidadesNegocio
{
    public class beCategoria
    {
        public int IdCategoria { get; set; }
        public string Nombre { get; set; }
    }
}

Agregar otra clase a la librería llamada "beProducto.cs":

namespace Northwind.Librerias.EntidadesNegocio
{
    public class beProducto
    {
        public int IdProducto { get; set; }
        public string Nombre { get; set; }
        public int IdProveedor { get; set; }
        public int IdCategoria { get; set; }
        public decimal PrecioUnitario { get; set; }
        public short Stock { get; set; }
    }
}

Finalmente, agregar una clase llamada "beCategoriaProducto.cs" que agrupe las 2 listas:

using System;
using System.Collections.Generic;

namespace Northwind.Librerias.EntidadesNegocio
{
    public class beCategoriaProducto
    {
        public List<beCategoria> ListaCategoria { get; set; }
        public List<beProducto> ListaProducto { get; set; }
    }
}

Grabar y compilar la Librería de Entidades del Negocio.

Crear la Librería de Acceso a Datos

Crear la librería de clases llamada: "Northwind.Librerias.AccesoDatos", referenciar a la librería de clases de entidades creada anteriormente y agregar la clase "daCategoriaProducto.cs" y escribir el siguiente código:

using System;
using System.Collections.Generic; //List
using System.Data; //CommandType, CommandBehavior
using System.Data.SqlClient; //SqlConnection, SqlCommand, SqlDataReader
using Northwind.Librerias.EntidadesNegocio; //beCategoriaProducto, beCategoria, beProducto

namespace Northwind.Librerias.AccesoDatos
{
    public class daCategoriaProducto
    {
        public beCategoriaProducto obtenerListas(SqlConnection con)
        {
            beCategoriaProducto obeCategoriaProducto = new beCategoriaProducto();
            List<beCategoria> lbeCategoria = null;
            List<beProducto> lbeProducto = null;

            SqlCommand cmd = new SqlCommand("uspCategoriesProductsListar", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader drd = cmd.ExecuteReader();
            if (drd != null)
            {
                lbeCategoria = new List<beCategoria>();
                beCategoria obeCategoria;
                int posIdCat = drd.GetOrdinal("CategoryID");
                int posNomCat = drd.GetOrdinal("CategoryName");
                while (drd.Read())
                {
                    obeCategoria = new beCategoria();
                    obeCategoria.IdCategoria = drd.GetInt32(posIdCat);
                    obeCategoria.Nombre = drd.GetString(posNomCat);
                    lbeCategoria.Add(obeCategoria);
                }
                obeCategoriaProducto.ListaCategoria = lbeCategoria;
                if (drd.NextResult())
                {
                    lbeProducto = new List<beProducto>();
                    int posIdProducto = drd.GetOrdinal("ProductID");
                    int posNombre = drd.GetOrdinal("ProductName");
                    int posIdProveedor = drd.GetOrdinal("SupplierID");
                    int posIdCategoria = drd.GetOrdinal("CategoryID");
                    int posPrecioUnitario = drd.GetOrdinal("UnitPrice");
                    int posStock = drd.GetOrdinal("UnitsInStock");
                    beProducto obeProducto;
                    while (drd.Read())
                    {
                        obeProducto = new beProducto();
                        obeProducto.IdProducto = drd.GetInt32(posIdProducto);
                        obeProducto.Nombre = drd.GetString(posNombre);
                        obeProducto.IdProveedor = drd.GetInt32(posIdProveedor);
                        obeProducto.IdCategoria = drd.GetInt32(posIdCategoria);
                        obeProducto.PrecioUnitario = drd.GetDecimal(posPrecioUnitario);
                        obeProducto.Stock = drd.GetInt16(posStock);
                        lbeProducto.Add(obeProducto);
                    }
                    obeCategoriaProducto.ListaProducto = lbeProducto;
                }
                drd.Close();
            }
            return (obeCategoriaProducto);
        }
    }
}

Grabar y compilar la librería de acceso a datos creada.

Crear la Librería de Reglas del Negocio

Crear la librería de clases llamada: "Northwind.Librerias.ReglasNegocio", referenciar a la librería de clases de entidades y también a la de acceso a datos, luego agregar la clase "brCategoriaProducto.cs" y escribir el siguiente código:

using System;
using System.Configuration; //ConfigurationManager
using System.Data.SqlClient; //SqlConnection
using System.Collections.Generic; //List
using Northwind.Librerias.EntidadesNegocio; //beCategoriaProducto
using Northwind.Librerias.AccesoDatos; //daCategoriaProducto

namespace Northwind.Librerias.ReglasNegocio
{
    public class brCategoriaProducto:brGeneral
    {
        public beCategoriaProducto obtenerListas()
        {
            beCategoriaProducto obeCategoriaProducto = null;
            string CadenaConexion = ConfigurationManager.ConnectionStrings["conNW"]
                                                     .ConnectionString;
            using (SqlConnection con = new SqlConnection(CadenaConexion))
            {
                try
                {
                    con.Open();
                    daCategoriaProducto odaCategoriaProducto = new daCategoriaProducto();
                    obeCategoriaProducto = odaCategoriaProducto.obtenerListas(con);
                }
                catch (SqlException ex)
                {
                    //grabarLog(ex);
                }
                catch (Exception ex)
                {
                    //grabarLog(ex);
                }
            } //con.Close(); con.Dispose();
            return (obeCategoriaProducto);
        }
    }
}

Nota: También es necesario hacer una referencia a la librería "System.Configuration" para leer la cadena de conexión definida en la aplicación.

Grabar la librería de reglas de negocio creada y compilarla.

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

Seleccionar un nuevo proyecto de tipo: "Aplicación web de ASP.NET MVC4" y escribir como nombre "Canvas_GraficosDatos", luego seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".

Crear un Controlador para el Producto

Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador", llamarle al archivo "ProductoController.cs" y en opciones de plantillas dejarlo en plantilla vacía (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.LibBusEntities;
using Northwind.LibBusRules;

namespace HT03_Canvas_GraficosDatos.Controllers
{
    public class ProductoController : Controller
    {
        public ActionResult Lista()
        {
            List<string> tipoGrafico = new List<string>();
            tipoGrafico.Add("Barras");
            tipoGrafico.Add("Columnas");
            tipoGrafico.Add("Lineas");
            tipoGrafico.Add("Pie");
            ViewBag.Tipo = tipoGrafico;
            brCategoriaProducto obrCategoriaProducto = new brCategoriaProducto();
            beCategoriaProducto obeCategoriaProducto = obrCategoriaProducto.Listar();
            Session["Productos"] = obeCategoriaProducto.ListaProducto;
            return View(obeCategoriaProducto.ListaCategoria);
        }

        public JsonResult Filtro()
        {
            JsonResult rpta;
            List<beProducto> lbeProducto = (List<beProducto>)Session["Productos"];
            rpta = Json(lbeProducto, JsonRequestBehavior.AllowGet);
            return (rpta);
        }
    }
}

Crear una Hoja de Estilos para la Vista

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:lightgray;
}
.Titulo {
    background-color:black;
    color:white;
    font-size:x-large;
    text-transform:uppercase;
}
.Subtitulo {
    background-color:white;
    color:black;
    font-size:large;
    text-transform:capitalize;
    font-weight:bold;
}
.AnchoTotal {
    width:100%;
}
.FilaCabecera {
    background-color:gray;
    color:white;
}
.FilaDatos {
    background-color:white;
    color:black;
}
.Cuadro {
    background-color:white;
    border-style:double;
}

Crear la Vista Productos para mostrar los datos

Ir al controlador y ubicarse sobre el método "Lista" (acción), clic derecho y seleccionar "Agregar vista", seleccionar el check "Crear una vista fuertemente tipada" y escribir el siguiente código:

@using Northwind.LibBusEntities
@model List<beCategoria>
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Lista</title>
    <link href="~/Content/Styles/ACME.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script src="~/Scripts/Rutinas.js"></script>
</head>
<body>
    <div>
        <table class="AnchoTotal">
            <tr class="Titulo">
                <td colspan="2">
                   Graficar Datos en el Cliente en ASP.NET MVC con JSON, Canvas y JavaScript
                </td>
            </tr>
            <tr class="Subtitulo">
                <td colspan="2">Gráfico de Precios de Productos x Categoria</td>
            </tr>
            <tr>
                <td style="width:40%">
                    Selecciona una Categoria: @Html.DropDownList("idCategoria",
                    new SelectList(Model,"Codigo","Nombre"))
                </td>
                <td style="width:60%">
                    Selecciona el Tipo de Grafico: @Html.DropDownList("tipo",
                    new SelectList(ViewBag.Tipo))
                </td>
            </tr>
            <tr>
                <td style="vertical-align:top">
                    <table class="AnchoTotal">
                        <thead>
                            <tr class="FilaCabecera">
                                <td style="width:80%">Nombre del Producto</td>
                                <td style="width:20%">Stock</td>
                            </tr>
                        </thead>
                        <tbody id="tbProducto">
                        </tbody>
                    </table>
                </td>
                <td>
                    <canvas id="canvas" width="600" height="400" class="Cuadro"/>
                </td>
            </tr>
        </table>
    </div>
</body>
</html>

Crear el archivo JavaScript con el código cliente

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

$(document).ready(function () {
    var rpta;
    var cboCategoria = document.getElementById("idCategoria");    
    cboCategoria.onchange = function () { crearTablaGrafico(); }
    var cboTipo = document.getElementById("tipo");
    cboTipo.onchange = function () { crearTablaGrafico(); }
    $.ajax({
        type: "post",
        url: "/Producto/Filtro",
        contentType: "application/json;charset=utf-8",
        dataType: "json",
        success: exito,
        error: error
    });

    function crearTablaGrafico() {
        var idCategoria = cboCategoria.value * 1;
        var tbProducto = document.getElementById("tbProducto");
        var tipo = cboTipo.value;
        var contenido = "";
        var canvas = document.getElementById("canvas");
        var contexto = canvas.getContext("2d");
        if (contexto != null) graficar(rpta);
        function graficar(rpta) {
            //Crear Degradado
            var deg = contexto.createLinearGradient(0, 0, canvas.width, canvas.height);
            deg.addColorStop(1, "aqua");
            deg.addColorStop(0.1, "blue");
            //Dibujar Rectangulo Degradado
            contexto.fillStyle = deg;
            contexto.fillRect(0, 0, canvas.width, canvas.height);
            //Variables para los calculos
            var x = 10;
            var y = 20;
            var valor = 0;
            var escala = 0;
            var maximo = 0;
            var total = 0;
            if (tipo != "Pie") {
                maximo = calcularMaximo(idCategoria);
                if (tipo == "Barras") escala = Math.abs((canvas.width - 180) / maximo);
                else {
                    escala = Math.abs((canvas.height - 120) / maximo);
                    x = 50;
                }
            }
            else total = calcularTotal(idCategoria);
            var centroX = Math.floor(canvas.width / 2);
            var centroY = Math.floor(canvas.height / 2);
            var radio = Math.floor(canvas.width / 4);
            var anguloInicio = 0;
            var arco = 0;
            var anguloFin = 0;
            //Dibujar el grafico de acuerdo al tipo
            for (i = 0; i < rpta.length; i++) {
                if (rpta[i].IdCategoria == idCategoria) {
                    contenido += "<tr class='FilaDatos'><td>" + rpta[i].Nombre + "</td>" +
                        "<td class='Derecha'>" + rpta[i].PrecioUnitario + "</td></tr>";
                    switch(tipo)
                    {
                        case "Barras":
                            x = 10;
                            contexto.fillStyle = "white";
                            contexto.font = "10px arial";
                            contexto.fillText(rpta[i].Nombre, x, y);
                            x = 150;
                            valor = rpta[i].PrecioUnitario * escala;
                            contexto.fillStyle = "yellow";
                            contexto.fillRect(x, y - 10, valor, 10);
                            contexto.fillStyle = "white";
                            contexto.fillText(rpta[i].PrecioUnitario, x + valor + 5, y);
                            y = y + 20;
                            break;
                        case "Columnas":
                            contexto.save();
                            contexto.translate(x, canvas.height - 10);
                            contexto.rotate(-(Math.PI / 3));
                            contexto.fillStyle = "white";
                            contexto.fillText(rpta[i].Nombre, 0, 0);
                            contexto.restore();
                            contexto.fillStyle = "yellow";
                            valor = (canvas.height - 100 - (rpta[i].PrecioUnitario*escala));
                            contexto.fillRect(x, valor, 10, rpta[i].PrecioUnitario * escala);
                            contexto.fillStyle = "white";
                            contexto.fillText(rpta[i].PrecioUnitario, x, valor - 10);
                            x += 40;
                            break;
                        case "Lineas":
                            contexto.save();
                            contexto.translate(x, canvas.height - 10);
                            contexto.rotate(-(Math.PI / 3));
                            contexto.fillStyle = "white";
                            contexto.fillText(rpta[i].Nombre, 0, 0);
                            contexto.restore();                            
                            contexto.strokeStyle = "yellow";
                            contexto.lineWidth = 3;
                            if (x== 50) {
                                contexto.beginPath();
                                valor = Math.floor(canvas.height - 100 - (rpta[i].PrecioUnitario) * escala);
                                contexto.moveTo(x, valor);
                            }
                            valor = Math.floor(canvas.height - 100 - (rpta[i].PrecioUnitario * escala));
                            contexto.lineTo(x, valor);
                            contexto.stroke();                
                            contexto.fillStyle = "white";
                            contexto.fillText(rpta[i].PrecioUnitario, x, valor - 10);
                            x += 40;
                            break;
                        case "Pie":
                            arco=(rpta[i].PrecioUnitario * 2 * Math.PI) / total;
                            anguloFin = anguloInicio + arco;
                            contexto.save();
                            contexto.beginPath();
                            contexto.moveTo(centroX, centroY);                            
                            contexto.arc(centroX, centroY, radio, anguloInicio, anguloFin, false);
                            contexto.fillStyle = '#' + Math.floor(Math.random() * 16777215).toString(16);
                            contexto.fill();
                            contexto.closePath();
                            contexto.restore();                            
                            contexto.save();
                            contexto.translate(centroX, centroY);
                            contexto.rotate(anguloInicio);
                            x = Math.floor(canvas.width * 0.15) - 10;
                            y = Math.floor(canvas.height * 0.05);
                            contexto.fillStyle = "white";
                            contexto.fillText(rpta[i].PrecioUnitario, x, y);
                            contexto.restore();
                            anguloInicio = anguloFin;
                            break;
                    }
                }
                tbProducto.innerHTML = contenido;
            }
        }
    }

    function calcularTotal(idCategoria) {
        var total = 0;
        for (i = 0; i < rpta.length; i++) {
            if (rpta[i].IdCategoria == idCategoria) {
                total += rpta[i].PrecioUnitario;
            }
        }
        return total;
    }

    function calcularMaximo(idCategoria) {
        var max = 0;
        for (i = 0; i < rpta.length; i++) {
            if (rpta[i].IdCategoria == idCategoria) {
                if (rpta[i].PrecioUnitario>max) max = rpta[i].PrecioUnitario;
            }
        }
        return max;
    }

    function exito(data) {
        rpta = data;
        crearTablaGrafico();
    }

    function error(data) {
        alert(data.status + " - " + data.statusText);
    }
});

Nota: La función asociada al $(document).ready se ejecuta ni bien carga la pagina y se llama en forma asíncrona al método de acción "Filtro" que devuelve un JSON con la lista de productos y por JavaScript se crea el filtro, se muestra la tabla y el gráfico de acuerdo a la categoría seleccionada y al tipo de gráfico.

Modificar el archivo web.config para incluir la cadena de conexión

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

Configurar el inicio y ejecutar la aplicación web

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 sigue: controller = "Producto", action = "Lista".

Ejecución y Pruebas de la Aplicación Web ASP.NET MVC

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


Por defecto se muestra la categoría "Bebidas" y en el tipo de gráfico "Barras", cambiar el tipo de gráfico a "Columnas" y se verá la siguiente figura:


Probar ahora con el gráfico de "Lineas" y se mostrará algo similar a la siguiente figura:


Finalmente, cambiar el tipo de gráfico a "Pie" y se verá lo siguiente:


Comentario Final

En este post hemos visto como trabajar en forma desconectada, y también hemos aprendido a crear grillas (tablas) y gráficos (canvas) sin usar controles, sino mediante código JavaScript.

Además hemos hecho llamada asíncrona mediante Ajax de jQuery y retornado los datos como un arreglo en notación JavaScript (JSON).

Esta forma de trabajo (desconectada) es muy útil en aplicaciones móviles donde la conexión al servidor web es limitada, por lo cual una sola vez se trae los datos y todo se maneja en el cliente (Browser).

Este demo es uno de los tantos que se realiza en el programa Web Developer. Espero les sirva.

Descarga
DemoDia_GraficoDatosCliente

martes, 3 de febrero de 2015

El Libro del Día: Data Visualization For Dummies

El Libro del Día: 2015-02-03

Titulo: Data Visualization For Dummies
Autor: Mico Yuk, Stephanie Diamond
Editorial: Wiley
Nro Paginas: 258

Capítulos:
Part I: Getting Started with Data Visualization
Chapter 1: Introducing Data Visualization
Chapter 2: Exploring Common Types of Data Visualizations
Chapter 3: Knowing What You Must about Big Data
Part II: Mastering Basic Data Visualization Concepts
Chapter 4: Using Charts Effectively
Chapter 5: Adding a Little Context
Chapter 6: Paying Attention to Detail
Part III: Building Your First Data Visualization
Chapter 7: Defining an Easy-to-Follow Storyboard
Chapter 8: Developing a Clear Mock-Up
Chapter 9: Adding Effective Visuals to Your Mock-Up
Chapter 10: Adding Functionality and Applying Color
Chapter 11: Adding Some Finishing Touches
Chapter 12: Exploring User Adoption
Part IV: Putting Data Viz Techniques into Practice
Chapter 13: Evaluating Real Data Visualizations
Chapter 14: Recognizing Newbie Pitfalls
Part V: The Part of Tens
Chapter 15: Top Ten Data Visualization Resources
Chapter 16: Top Ten Fears of New Data-Viz Creators

Descarga:
Data_Visualization_For_Dummies

domingo, 25 de enero de 2015

El Libro del Día: Create Web Charts with D3

El Libro del Día: 2015-01-25

Titulo: Create Web Charts with D3
Autor: Fabio Nelli
Editorial: Apress
Nro Paginas: 301

Capítulos:
Chapter 1: Charting Technology Overview
Chapter 2: Working with D3
Chapter 3: Line Charts with D3
Chapter 4: Bar Charts with D3
Chapter 5: Pie Charts with D3
Chapter 6: Candlestick Charts with D3
Chapter 7: Scatterplot and Bubble Charts with D3
Chapter 8: Radar Charts with D3
Chapter 9: Handling Live Data with D3
Chapter 10: Adding Controls to Charts
Chapter 11: Embedding D3 Charts in jQuery Widgets
Chapter 12: JSON and Layouts - Handling Structured Data
Appendix A: Guidelines for the Examples in the Book

Descarga:
Create_Web_Charts_with_D3

sábado, 24 de enero de 2015

El Libro del Día: Create Web Charts with jqPlot

El Libro del Día: 2015-01-24

Titulo: Create Web Charts with jqPlot
Autor: Fabio Nelli
Editorial: Apress
Nro Paginas: 255

Capítulos:
Chapter 1: Charting Technology Overview
Chapter 2: jQuery Basics
Chapter 3: Introducing jqPlot
Chapter 4: Line Charts with jqPlot
Chapter 5: Bar Charts with jqPlot
Chapter 6: Pie Charts and Donut Charts with jqPlot
Chapter 7: Candlestick Charts with jqPlot
Chapter 8: Scatter Charts and Bubble Charts with jqPlot
Chapter 9: Funnel Charts with jqPlot
Chapter 10: Adding Controls to Charts
Chapter 11: Embedding jqPlot Charts in jQuery Widgets
Chapter 12: Handling Input Data
Appendix A: Guidelines for the Examples in the Book
Appendix B: jqPlot Plug-ins

Descarga:
Create_Web_Charts_with_jqPlot

jueves, 25 de diciembre de 2014

El Libro del Día: HTML5 Canvas Cookbook

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

Titulo: HTML5 Canvas Cookbook
Autor: Eric Rowell
Editorial: Packt
Nro Paginas: 348

Capítulos:
Chapter 1: Getting Started with Paths and Text
Chapter 2: Shape Drawing and Composites
Chapter 3: Working with Images and Videos
Chapter 4: Mastering Transformations
Chapter 5: Bringing the Canvas to Life with Animation
Chapter 6: Interacting with the Canvas: Attaching Event Listeners to Shapes and Regions
Chapter 7: Creating Graphs and Charts
Chapter 8: Saving the World with Game Development
Chapter 9: Introducing WebGL
Appendix A: Detecting Canvas Support
Appendix B: Canvas Security
Appendix C: Additional Topics

Descarga:
HTML5_Canvas_Cookbook

lunes, 17 de noviembre de 2014

El Libro del Día:Practical WPF Charts and Graphics

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

Titulo: Practical WPF Charts and Graphics
Autor: Jack Xu
Editorial: Apress
Nro Paginas: 709

Capítulos:
1. Overview of WPF Programming
2. 2D Transformations
3. WPF Graphics Basics in 2D
4. Colors and Brushes
5. 2D Line charts
6. Specialized 2D Charts
7. Stock Charts
8. Interactive 2D Charts
9. 2D Chart Controls
10. Data Interpolations
11. Curve Fitting
12. 3D Transformations
13. WPF Graphics Basics in 3D
14. 3D Charts with the WPF 3D Engine
15. 3D Charts Without the WPF 3D Engine
16. Specialized 3D Charts

Descarga:
Practical_WPF_Charts_Graphics

jueves, 23 de octubre de 2014

El Libro del Día: Beginning JavaScript Charts

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

Titulo: Beginning JavaScript Charts
Autor: Fabio Nelli
Editorial: Apress
Nro Paginas: 602

Capítulos:
Chapter 1: Charting Technology Overview
Chapter 2: jQuery Basics
Chapter 3: Simple HTML Tables
Chapter 4: Drawing a Line Chart
Chapter 5: Drawing a Bar Chart
Chapter 6: Drawing a Pie Chart
Chapter 7: Creating a Library for Simple Charts
Chapter 8: Introducing jqPlot
Chapter 9: Line Charts with jqPlot
Chapter 10: Bar Charts with jqPlot
Chapter 11: Pie Charts and Donut Charts with jqPlot
Chapter 12: Candlestick Charts with jqPlot
Chapter 13: Scatter Charts and Bubble Charts with jqPlot
Chapter 14: Funnel Charts with jqPlot
Chapter 15: Adding Controls to Charts
Chapter 16: Embedding jqPlot Charts in jQuery Widgets
Chapter 17: Handling Input Data
Chapter 18: Moving from jqPlot to Highcharts
Chapter 19: Working with D3
Chapter 20: Line Charts with D3
Chapter 21: Bar Charts with D3
Chapter 22: Pie Charts with D3
Chapter 23: Candlestick Charts with D3
Chapter 24: Scatterplot and Bubble Charts with D3
Chapter 25: Radar Charts with D3
Chapter 26: Handling Live Data with D3
Appendix A: Guidelines for the Examples in the Book
Appendix B: jqPlot Plug-ins

Descarga:
Beginning_JavaScript_Charts

martes, 17 de junio de 2014

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

Preguntas de Repaso: Desarrollando Aplicaciones Windows Forms

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

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

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

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

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

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

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

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

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

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

11. Menciona 3 controles de listas de Windows Forms.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

66. Para qué sirve el control ReportViewer?

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

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

69. A qué formatos puede exportar el ReportViewer?

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

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

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