jueves, 3 de mayo de 2012

Gráfica de pastel con webchart

Ahora veamos como introducir un gráfico de pastel a nuestra pagina y para eso empezaremos por saber que es WEBCHART.
en términos generales es una DLL  libre para crear gráficas de diferentes tipos.  hecho por:
Carlos Aguilar Mares © 2011 .http://www.carlosag.net/tools/webchart/

El ejemplo que se muestra a continuación es muy básico, pues tiene múltiples funcionalidades y varios tipos de gráficos (barra, lineas, Área, etc.) mismas que se pueden analizar por cuenta propia.

Manos a la obra!!!!

Para empezar
Utilizaremos Visual estudio con C #.
tenemos que ir a la pagina y descargar la DLL y guardarla en la carpeta: Bin
y agregar la referencia de dicho elemento.

Nuestro resultado final será algo parecido a esto:
Imagen PNG generada por webchart


Agregando el Elemento WebChart
En la Pagina Html ("Graficos.aspx") se va a agregar el siguiente código (Lo importante esta en CAFE):
<%@ register tagprefix="Web" namespace="WebChart" assembly="WebChart"%>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Página sin título</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
<web:chartcontrol runat="server" id="chcPastel" BorderStyle="Outset" Padding="20" >
</web:chartcontrol> 
        </div>
    </form>
</body>
</html>

Crear la Clase clWebChart para manipular los elementos del control:

using System;
using System.Data;
using System.Web;
using System.Collections.Generic;
using System.Drawing;
using WebChart;
using System.IO;
/// <summary>
/// Descripción breve de clWebChart
/// </summary>
public class clWebChart
{
    private ChartControl _cControl = new ChartControl();
    private List<oBasico> _coleccionBasica = new List<oBasico>();
    private ChartPointCollection _coleccionPuntos = new ChartPointCollection();
    protected Color[] CargaColores
    {
        get
        {
            List<oBasico> Listaitems = new List<oBasico>();
            Listaitems = _coleccionBasica;
            Color[] colors = new Color[Listaitems.Count];
            int i = 0;
            foreach (oBasico ObjActual in Listaitems)
            {
                colors[i] = ObjActual.Color;
                i += 1;
            }
            return colors;
        }
    }
    protected void ConfigurarControl(ChartControl cControl, Chart cChart)
    {
        _cControl = cControl;
        _cControl.Width = 600;
        _cControl.Height = 500;
        _cControl.Font.Name = "Tahoma";
        _cControl.Font.Size = 8;
        _cControl.Border.Color = Color.DarkOrange;
        _cControl.GridLines = WebChart.GridLines.Both;
        _cControl.ForeColor = Color.Black;
        _cControl.Legend.Position = LegendPosition.Left;
        _cControl.ChartTitle.Font = new Font("Tahoma", 9, FontStyle.Bold);
        _cControl.ChartTitle.ForeColor = Color.Black;
        _cControl.ChartTitle.Text = "Titulo Principal";
        Font fuente = new Font("Tahoma", 8);
        _cControl.XTitle = new ChartText();

        StringFormat formato = new StringFormat();
        formato.LineAlignment = StringAlignment.Far;
        _cControl.XTitle.StringFormat = formato;
        _cControl.XTitle.Font = fuente;
        _cControl.XTitle.Text = "Descripción de la grafica";
        _cControl.Charts.Add(cChart);
        _cControl.RedrawChart();
    }
public clWebChart(){
// Esto va porque WebChart crear una carpeta donde almacena las imágenes que va generando
// pero no las elimina, así que nosotros la eliminamos por cuenta propia de esta forma.
        DirectoryInfo dir = new DirectoryInfo(HttpContext.Current.Server.MapPath("~//") + "Webcharts");
        if (dir.Exists && dir.GetFiles().Length > 0)
        {
            dir.Delete(true);
        }
}
}
    /// <summary>
    /// Agregar nuevos items a la grafica de pastel.
    /// </summary>
    /// <param name="Descripcion">Descripción [string]</param>
    /// <param name="color">Color [Color]</param>
    /// <param name="Valor">el valor del item [int]</param>
    public void AddItems(string Descripcion,Color color, int Valor)
    {
        List<oBasico> Listaitems = new List<oBasico>();
        ChartPointCollection cPCol = new ChartPointCollection();
        cPCol = _coleccionPuntos;
        Listaitems = _coleccionBasica;
        Listaitems.Add(new oBasico(Descripcion,color,Valor));
        cPCol.Add(new ChartPoint(Valor.ToString(), Valor));
        _coleccionPuntos = cPCol;
        _coleccionBasica = Listaitems;
    }
    public void LlenaPastel(ChartControl cControl)
    {
        PieChart cChart = new PieChart(_coleccionPuntos);
        // Configuracion General
        cChart.DataLabels.Visible = true;
        cChart.DataLabels.ForeColor = Color.Blue;
        cChart.Shadow.Color = Color.LightGray;
        cChart.Shadow.Visible = true;
        cChart.Legend = "Leyenda";
        cChart.LineMarker.Color = Color.Aquamarine;

        // Colores personalizados
        cChart.Colors = CargaColores;
        // Agregar datos
        cChart.DataSource = _coleccionBasica;
        cChart.DataXValueField = "Legend";
        cChart.DataYValueField = "Valor";
        cChart.DataBind();
        cChart.Explosion = 5;
        // Siempre debe ir al Final para procesar el control
        ConfigurarControl(cControl, cChart);
    }

private class oBasico
    {
        private Color _color;
        private string _legend;
        private int _valor;
        public oBasico(string desc,Color color, int valor)
        {
            _color = color;
            _legend = desc;
            _valor = valor;
        }
        public int Valor
        {
            get
            {
                return _valor;
            }
            set
            {
                _valor = value;
            }
        }
        public Color Color
        {
            get
            {
                return _color;
            }
            set
            {
                _color = value;
            }
        }
        public string Legend
        {
            get
            {
                return _legend;
            }
            set
            {
                _legend = value;
            }
        }
    }



Configurar el control desde el servidor ("Graficos.aspx.cs")

using System;
using System.Drawing;

public partial class Graficos : System.Web.UI.Page{
    clWebChart cwGraf = new clWebChart();
            if (!Page.IsPostBack){
                int count=20;
                Random rnd = new Random();
                for (int i=10; i<count; i++){
                    cwGraf.AddItems("Item:" + i.ToString(),
                                    Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255)),
                                    rnd.Next(50));
                }
                // Llena grafica Pastel con datos
                cwGraf.LlenaPastel(chcPastel);
            }
}

No hay comentarios:

Publicar un comentario