gdi+实现多种统计图表(饼状,折线,柱状)支持负从标

using System;
using System.Web.UI;
using System.Data;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.ComponentModel;
using System.Collections ;

namespace Tom.Control
{
        [ToolboxData(
"<{0}:Columniation runat=server></{0}:Columniation>")]
    
public class Columniation: System.Web.UI.WebControls.WebControl
    
{  
        
private const int _colorLimit = 12;  //颜色列表
       private Color[] _color = 
            

                Color.Chocolate,
                Color.YellowGreen,
                Color.Olive,
                Color.DarkKhaki,
                Color.Sienna,
                Color.PaleGoldenrod,
                Color.Peru,
                Color.Tan,
                Color.Khaki,
                Color.DarkGoldenrod,
                Color.Maroon,
                Color.OliveDrab
            }
;

        
        
        
        
private DataTable items;//列表项名称和值
       

        
private string text="数据";
        
private string datastd="标准值";
        
private string data="实时数据";


        
int kds=10//刻度数
        float kddw=100;  //没刻度大小

        
int zmheight=500//真个图区高
        int zmwidth=740;  //真个图区宽

        
int height=400;//呈现区高
        int width=730;
        
int cxtop=30;//呈现区距顶距离
        int cxleft=30;//呈现区左边距离

        Color bzlink
=Color.Black;//标准线颜色
    

        
int Chart_Flag=1;
        Bitmap bm ;

        
int Displacement =0//获取负坐标刻度数

      
    

        [Bindable(
true),
        Category(
"Appearance"),
        DefaultValue(
"")]
        
public string Text
        
{
            
get
            
{
                
return text;
            }


            
set
            
{
                text 
= value;
            }

        }

        
        [Bindable(
true),
        Category(
"Appearance"),
        DefaultValue(
"")]
        
public string DataStdName
        
{
            
get
            
{
                
return datastd;
            }


            
set
            
{
                datastd 
= value;
            }

        }


        [Bindable(
true),
        Category(
"Appearance"),
        DefaultValue(
"")]
        
public string DataName
        
{
            
get
            
{
                
return data;
            }


            
set
            
{
                data 
= value;
            }

        }


        
/// <summary>
        
/// 需要呈现的数据
        
/// </summary>

        public DataTable Items
        
{
            
set
            
{items=value;}
        }


        
/// <summary>
        
/// 需要显示的刻度量
        
/// </summary>

        public int Kdcount
        
{
            
set {kds=value;}
        }


        
/// <summary>
        
/// 刻度大小
        
/// </summary>


        
public float Kddw
        
{set{kddw=value;}}
        


        
public int ChatStyle
        
{set{this.Chart_Flag=value;}}


        
/// <summary> 
        
/// 将此控件呈现给指定的输出参数。
        
/// </summary>
        
/// <param text="output"> 要写出到的 HTML 代码 </param>

        protected override void Render(HtmlTextWriter output)
        
{
            
//if(dt==null)
            
//{
            
//    return "没有数据";
            
//}
            
//设计样式
            kd(items);
            output.Write(makeimage(items,
"c:/"));

            
        }


        
private string makeimage(DataTable dt,string imagefile)
        
{
            

            
string url="";
        
            
switch(Chart_Flag)
            
{
                
case 1:
                
{
                
                    
this.Draw_X_Y_Bar(dt);
                    url
=this.Drar_Bar(dt);

                    
break;
                }

                
case 2:
                
{

               
                    
this.Draw_X_Y (dt);
                    url
=this.Drow_Lin(dt);

                    
break;
                }

                
case 3:
                
{
                    
                    url
=this.Draw_Pie(dt);
                    
break;
                }


            }

                        
                
return  url;
            
            
        }

        
/// <summary>
        
/// 换算成实际值
        
/// </summary>
        
/// <param text="kd">提供的值</param>
        
/// <returns>返回换算后的实际值</returns>

        private float bl(float kd)
        
{
            
float bls=1;
            bls
=(float)height/((float)kds*(float)kddw);
            
return (float)kd*bls;
        }


     
        
//通过数据计算刻度,和负坐标数



   
//
        绘制折线图



        
画住状图 


    
        
画 X,Y 轴 线和刻度
        
    
        
画 柱状 x,y  刻度
         
        
饼状图


}

}



调用页面

 
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Web_Graphic
{
    
/// <summary>
    
/// WebForm1 的摘要说明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
{
        
protected Tom.Control.Columniation Columniation1;

    
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{  

            
            DataTable dt
=new DataTable();
            DataColumn dc;
            
            dc
=new DataColumn();
            dc.DataType
=System.Type.GetType("System.String");
            dc.ColumnName
="name";
            dt.Columns.Add(dc);

            

            dc
=new DataColumn();
            dc.DataType
=System.Type.GetType("System.Int32");
            dc.ColumnName
="db";
            dt.Columns.Add(dc);
              
            dc
=new DataColumn();
            dc.DataType
=System.Type.GetType("System.Int32");
            dc.ColumnName
="df";
            dt.Columns.Add(dc);


            
            DataRow dr
=dt.NewRow();
            
            dr[
"name"]="点1";
            
            dr[
"db"]="1400";
            dr[
"df"]="500";
             
            dt.Rows.Add(dr);

            dr
=dt.NewRow();
            dr[
"name"]="点2";
            
            dr[
"db"]="200";
            dr[
"df"]="200";
            dt.Rows.Add(dr);

            dr
=dt.NewRow();
            dr[
"name"]="点3";
        
            dr[
"db"]="-300";
                 dr[
"df"]="-600";
            dt.Rows.Add(dr);
  
            
            dr
=dt.NewRow();
            dr[
"name"]="点4";
            
            dr[
"db"]="200";
             dr[
"df"]="1500";
            dt.Rows.Add(dr);

            dr
=dt.NewRow();
            dr[
"name"]="点5";
        
            dr[
"db"]="400";
                 dr[
"df"]="2400";
            dt.Rows.Add(dr);

            
        
    

            
            



            Columniation1.Items
=dt;
            Columniation1.ChatStyle
=2;  //1 为柱状,2 为折线,3为屏状 


            

            
            
        }


        
Web 窗体设计器生成的代码
    }

}

效果如下...


\

  
原文地址:https://www.cnblogs.com/gwazy/p/394528.html