c#報表圖描述

忘記了不知道哪裏看來的參考代碼。不過現在c#有一個開源的圖形報表類庫,比較簡單很不錯。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;
using BLL;
using ObjectInfo;
using WebChart;
using System.Globalization;

public partial class Analysis_ChartProfit : BasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BasePage.Control.BindDicList(ddlType, "chartTypeStruct", 0);
            lbTip.Text = "[" + System.DateTime.Now.ToString("yyyy-MM-dd") + "]";
        }
        myChart.Charts.Clear();
        switch (ddlType.SelectedValue.ToLower())
        {
            case "column":
                DrawColumn();
                break;
            case "pie":
                DrawPie();
                break;
            default:
                Javascript.Alert("顯示參數未正確定義");
                break;
        }
    }
    #region 餅圖
    protected void DrawPie()
    {
        Color[] cl;
        float startPoint = 0;
        ChartPointCollection data = GetData(out cl, ref startPoint,true);
        PieChart pc = new PieChart(data);
        //pc.Fill.StartPoint = new Point(150, 300);
        pc.Colors = cl;
        pc.ShowLineMarkers = false;
        ChartShadow cs = pc.Shadow;
        cs.OffsetX = 2;
        cs.OffsetY = 4;
        cs.Color = Color.Gray;
        cs.Visible = true;
        pc.Legend = "資產總量分析圖";
        pc.ShowLegend = true;
        ChartDataLabels cdl = pc.DataLabels;
        cdl.ShowZeroValues =true;
       
        cdl.Position = DataLabelPosition.Center;
        cdl.ShowLegend = false;
        cdl.ShowXTitle = false;
        cdl.ShowValue = true;       
        NumberFormatInfo ni = new NumberFormatInfo();
        cdl.NumberFormat = "#0.##" + "'%";
        cdl.Visible = true;
        pc.Explosion = 0;
        System.Drawing.Point p1 = pc.Fill.StartPoint;
        System.Drawing.Point p2 = pc.Fill.EndPoint;
        myChart.Charts.Add(pc);
       
        myChart.ChartPadding = 0;
        myChart.LeftChartPadding = 0;
        myChart.ShowXValues = true;
        myChart.ShowTitlesOnBackground = false;
        myChart.YCustomStart = (float)0.01;
        myChart.Width = 750;
        myChart.Height = 550;
        myChart.Legend.Width = 140;
        myChart.RedrawChart();               
    }
    #endregion

    #region 柱圖
    protected void DrawColumn()
    {
        Color[] cl;
        float startPoint = 0;
        ChartPointCollection data = GetData(out cl,ref startPoint, false);
        myChart.YCustomStart = 0;
        ColumnChart c = new ColumnChart(data);
        c.Fill.Color = Color.Gray;
        c.Fill.Type = InteriorType.Hatch;
        c.Fill.HatchStyle = HatchStyle.DottedDiamond;
        c.Fill.ForeColor = Color.LightBlue;
        c.Line.Color = Color.White;
        c.MaxColumnWidth = 100;
        c.ShowLegend = false;
        c.DataLabels.ForeColor = Color.White;
        c.DataLabels.NumberFormat = "¥0.00";
        c.DataLabels.Position = DataLabelPosition.Top;
        c.DataLabels.Background.Color = Color.SteelBlue;
        c.DataLabels.ShowXTitle = false;
        c.DataLabels.ShowValue = true;
        c.DataLabels.Border.Color = Color.Red;
        c.DataLabels.Separator = " ";
        c.DataLabels.ShowLegend = false;
        c.DataLabels.MaxPointsWidth = 1;
        c.DataLabels.Visible = true;
        c.ShowLineMarkers = true;
        c.DataLabels.ShowZeroValues = true;

        ChartShadow cs = c.Shadow;
        cs.OffsetX = 5;
        cs.OffsetY = 4;
        cs.Color = Color.LightSlateGray;
        cs.Visible = true;
        myChart.YTitle.Text = "萬元";
        myChart.YTitle.StringFormat.Alignment = StringAlignment.Near;
        //myChart.YTitle.StringFormat.LineAlignment = StringAlignment.Far;
        myChart.YTitle.StringFormat.FormatFlags = StringFormatFlags.DirectionRightToLeft;       
        //myChart.YCustomEnd = 0;
        myChart.Width = 750;
        myChart.Height = 550;
        myChart.TopChartPadding = 10;
        myChart.LeftChartPadding = 30;
        myChart.BottomChartPadding = 20;
        myChart.ShowXValues = true;
        myChart.Legend.Width = 0;
        myChart.ShowTitlesOnBackground = false;
        myChart.Charts.Add(c);
        myChart.RedrawChart();
    }
    #endregion

    #region 取數據
    protected ChartPointCollection GetData(out Color[] cl,ref float startPoint,bool showPercent)
    {
        DataTable dtType = BLL.Query.AssetTypeInfo();
        QProfitInfo p = new QProfitInfo();       
        DataTable dtData = BLL.Query.AssetProfit(p);
        ChartPointCollection data = new ChartPointCollection();
        Color[] cls = CommonFunc.AssetTypeColors();
        cl = new Color[dtType.Rows.Count];
        float total = (dtData.Compute("sum(fee)", "true")==DBNull.Value?0:Convert.ToSingle(dtData.Compute("sum(fee)", "true")))/10000;
        bool minValue = false;
        for(int i=0;i<dtType.Rows.Count;i++)
        {
            cl[i] =cls[i];
            string minCode = dtType.Rows[i].IsNull("minCode") ? "00" : dtType.Rows[i]["minCode"].ToString()+"-00000";
            string maxCode = dtType.Rows[i].IsNull("maxCode") ? "00" : dtType.Rows[i]["maxCode"].ToString() + "-00000";           
            DataRow[] dr = dtData.Select("fstrAssetName>='" + minCode + "' AND fstrAssetName<='" + maxCode + "'");
            string name = dtType.Rows[i].IsNull("lb") ? "00" : dtType.Rows[i]["lb"].ToString();
            object v = dtData.Compute("sum(fee)", "fstrAssetName>='" + minCode + "' AND fstrAssetName<='" + maxCode + "'");
            float f = Convert.ToSingle(v ==DBNull.Value ? 0 : v) / 10000;
            ChartPoint cp = new ChartPoint(f<0?name+"-(負)":name, showPercent?f*100/total:f);           
            data.Add(cp);
            startPoint = startPoint > f ? f : startPoint;           
        }
        if(startPoint>0.01)
        {
            startPoint *= 1.5F;
        }
        return data;
    }
    #endregion
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章