一个很强大的ASP.NET画图控件(一)
2008-09-07 18:23 key_sky 阅读(4154) 评论(2) 编辑 收藏 举报
一个很强大的画图控件,让报表更加丰富,图形更加大方。
与直接用GDI+绘图相比较,这个dotnetcharting控件写好的很多样式,运用起来更加方便。在GDI+知识不是很熟悉的时候,可以考虑用这个控件来进行绘图,让报表更加完美。
控件下载地址:http://www.dotnetCHARTING.com
下面介绍一些我在使用过程中处理的一些图形。这个控件功能十分强大,有待实践使用。
一个简单的DEMO:
定义一个简单的类库,来装载主要的参数:
Code
using System;
using System.Data;
using System.Configuration;
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 dotnetCHARTING;
using System.Drawing;
using System.Data.SqlClient;
/// <summary>
/// Chart__WebData 的摘要说明
/// </summary>
public class Chart__WebData
{
/// 功能:传入并设置chart对象的部分属性
/// 输入参数: chart:Chart对象; sql:传入的SQL语句; connstr:连接数据库字符串; chart_Type:Chart对象的图型类型
/// seriesType:Chart对象的曲线的类型; chartSize:Chart对象的图型设置,例800x600; TempDirectory:Chart图型图片存储位置
/// titleName:Chart图型的标题设置; yAxisName:图型Y轴名字 ShowValue:是否在图型中显示数值; use3D:是否使用3D效果
/// LegendBox_show:是否在图的右侧显示标题框 average_show:是否在图中显示平均值 maximum_show:是否在图中显示最大值
/// minimum_show:是否在图中显示最小值
///
///
/// 版本号:1.0
public static void Drawing_Chart(Chart chart,string sql, string connstr, string chart_Type, string seriesType, string chartSize,
string TempDirectory, string titleName, string yAxisName, bool ShowValue, bool use3D,bool LegendBox_show,
bool average_show, bool maximum_show, bool minimum_show)
{
ChartType_values(chart,chart_Type);
SeriesType_values(chart,seriesType);
chart.Size = chartSize;
chart.TempDirectory = TempDirectory;
chart.Title = titleName;
chart.Use3D = use3D;
chart.AutoNameLabels = false;
if (!LegendBox_show)
{
chart.LegendBox.Position = LegendBoxPosition.None;
}
chart.DefaultSeries.DefaultElement.ShowValue = ShowValue;
Axis replicaAxis = chart.YAxis.Calculate(yAxisName, true, dotnetCHARTING.Orientation.Left);
Average_values(replicaAxis, average_show);
Max_values(replicaAxis, maximum_show);
Min_values(replicaAxis, minimum_show);
chart.AxisCollection.Add(replicaAxis);
SeriesCollection mySC = getRandomData(CreateDataTable(sql, connstr));
chart.SeriesCollection.Add(ColorSet(mySC));
}
//制图类型选择处理
public static void ChartType_values(Chart chart, string chart_Type)
{
switch (chart_Type)
{
case "柱型正常":
chart.Type = ChartType.Combo;
break;
case "柱型侧边":
chart.Type = ChartType.ComboHorizontal;
break;
case "柱型水平":
chart.Type = ChartType.ComboSideBySide;
break;
case "饼型单":
chart.Type = ChartType.Pie;
break;
case "饼型多":
chart.Type = ChartType.Pies;
break;
case "环型单":
chart.Type = ChartType.Donut;
break;
case "环型多":
chart.Type = ChartType.Donuts;
break;
case "雷达单":
chart.Type = ChartType.Radar;
break;
case "雷达多":
chart.Type = ChartType.Radars;
break;
case "线条":
chart.Type = ChartType.Scatter;
break;
case "Combo":
chart.Type = ChartType.Combo;
break;
case "ComboSideBySide":
chart.Type = ChartType.ComboHorizontal;
break;
case "ComboHorizontal":
chart.Type = ChartType.ComboSideBySide;
break;
case "Single Pie":
chart.Type = ChartType.Pie;
break;
case "Multi pie":
chart.Type = ChartType.Pies;
break;
case "Single Donut":
chart.Type = ChartType.Donut;
break;
case "Multi Donut":
chart.Type = ChartType.Donuts;
break;
case "Single Radar":
chart.Type = ChartType.Radar;
break;
case "Multi Radar":
chart.Type = ChartType.Radars;
break;
case "Scatter":
chart.Type = ChartType.Scatter;
break;
case "Bubble":
chart.Type = ChartType.Bubble;
break;
default:
chart.Type = ChartType.Combo;
break;
}
}
//样式类型选择处理
public static void SeriesType_values(Chart chart, string seriesType)
{
switch (seriesType)
{
case "柱体":
chart.DefaultSeries.Type = SeriesType.Column;
break;
case "圆柱":
chart.DefaultSeries.Type = SeriesType.Cylinder;
break;
case "记号":
chart.DefaultSeries.Type = SeriesType.Marker;
break;
case "连线":
chart.DefaultSeries.Type = SeriesType.Line;
break;
case "区域面积":
chart.DefaultSeries.Type = SeriesType.AreaLine;
break;
case "曲线":
chart.DefaultSeries.Type = SeriesType.Spline;
break;
case "Column":
chart.DefaultSeries.Type = SeriesType.Column;
break;
case "Cylinder":
chart.DefaultSeries.Type = SeriesType.Cylinder;
break;
case "Marker":
chart.DefaultSeries.Type = SeriesType.Marker;
break;
case "Line":
chart.DefaultSeries.Type = SeriesType.Line;
break;
case "AreaLine":
chart.DefaultSeries.Type = SeriesType.AreaLine;
break;
case "Spline":
chart.DefaultSeries.Type = SeriesType.Spline;
break;
default:
chart.DefaultSeries.Type = SeriesType.Column;
break;
}
}
//数据显示
public static SeriesCollection getRandomData(DataTable dt)
{
SeriesCollection SC = new SeriesCollection();
String idname = null;
//Random myR = new Random(1);
for (int a = 0; a < dt.Rows.Count; a++)
{
Series s = new Series();
s.Name = idname + a.ToString();
for (int b = 1; b < dt.Columns.Count; b++)
{
idname = dt.Columns[b].ColumnName;
Element e = new Element();
e.Name = idname;
double bb = 0;
try
{
bb = double.Parse(dt.Rows[a][b].ToString());
}
catch (Exception)
{
bb = 0;
}
e.YValue = bb;
s.Elements.Add(e);
}
idname = dt.Rows[a][0].ToString();
s.Name = idname;
SC.Add(s);
}
return SC;
}
//设置线的颜色
public static SeriesCollection ColorSet(SeriesCollection SC)
{
SC[0].DefaultElement.Color = Color.FromArgb(49, 255, 49);
//SC[1].DefaultElement.Color = Color.FromArgb(255, 255, 0);
//SC[2].DefaultElement.Color = Color.FromArgb(255, 99, 49);
//SC[3].DefaultElement.Color = Color.FromArgb(0, 156, 255);
//SC[4].DefaultElement.Color = Color.FromArgb(255, 156, 255);
return SC;
}
//各种函数显示
public static Axis Average_values(Axis replicaAxis, bool average_show)
{
if (average_show)
{
replicaAxis.AddCalculatedTick("平均值: %Value", Calculation.Average);
}
return replicaAxis;
}
public static Axis Max_values(Axis replicaAxis, bool maximum_show)
{
if (maximum_show)
{
replicaAxis.AddCalculatedTick("最大值: %Value", Calculation.Maximum);
}
return replicaAxis;
}
public static Axis Min_values(Axis replicaAxis, bool minimum_show)
{
if (minimum_show)
{
replicaAxis.AddCalculatedTick("最小值: %Value", Calculation.Minimum);
}
return replicaAxis;
}
//提取数据
public static DataTable CreateDataTable(string sql, string connstr)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connstr);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(sql, conn);
adapter.Fill(dt);
return dt;
}
public static void Drawing_Chart(Chart chart, string sql,string connstr)
{
Drawing_Chart(chart, sql, connstr, "", "", "800x600", "temp", "", "", false, false, false, false, false,false);
}
}
using System;
using System.Data;
using System.Configuration;
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 dotnetCHARTING;
using System.Drawing;
using System.Data.SqlClient;
/// <summary>
/// Chart__WebData 的摘要说明
/// </summary>
public class Chart__WebData
{
/// 功能:传入并设置chart对象的部分属性
/// 输入参数: chart:Chart对象; sql:传入的SQL语句; connstr:连接数据库字符串; chart_Type:Chart对象的图型类型
/// seriesType:Chart对象的曲线的类型; chartSize:Chart对象的图型设置,例800x600; TempDirectory:Chart图型图片存储位置
/// titleName:Chart图型的标题设置; yAxisName:图型Y轴名字 ShowValue:是否在图型中显示数值; use3D:是否使用3D效果
/// LegendBox_show:是否在图的右侧显示标题框 average_show:是否在图中显示平均值 maximum_show:是否在图中显示最大值
/// minimum_show:是否在图中显示最小值
///
///
/// 版本号:1.0
public static void Drawing_Chart(Chart chart,string sql, string connstr, string chart_Type, string seriesType, string chartSize,
string TempDirectory, string titleName, string yAxisName, bool ShowValue, bool use3D,bool LegendBox_show,
bool average_show, bool maximum_show, bool minimum_show)
{
ChartType_values(chart,chart_Type);
SeriesType_values(chart,seriesType);
chart.Size = chartSize;
chart.TempDirectory = TempDirectory;
chart.Title = titleName;
chart.Use3D = use3D;
chart.AutoNameLabels = false;
if (!LegendBox_show)
{
chart.LegendBox.Position = LegendBoxPosition.None;
}
chart.DefaultSeries.DefaultElement.ShowValue = ShowValue;
Axis replicaAxis = chart.YAxis.Calculate(yAxisName, true, dotnetCHARTING.Orientation.Left);
Average_values(replicaAxis, average_show);
Max_values(replicaAxis, maximum_show);
Min_values(replicaAxis, minimum_show);
chart.AxisCollection.Add(replicaAxis);
SeriesCollection mySC = getRandomData(CreateDataTable(sql, connstr));
chart.SeriesCollection.Add(ColorSet(mySC));
}
//制图类型选择处理
public static void ChartType_values(Chart chart, string chart_Type)
{
switch (chart_Type)
{
case "柱型正常":
chart.Type = ChartType.Combo;
break;
case "柱型侧边":
chart.Type = ChartType.ComboHorizontal;
break;
case "柱型水平":
chart.Type = ChartType.ComboSideBySide;
break;
case "饼型单":
chart.Type = ChartType.Pie;
break;
case "饼型多":
chart.Type = ChartType.Pies;
break;
case "环型单":
chart.Type = ChartType.Donut;
break;
case "环型多":
chart.Type = ChartType.Donuts;
break;
case "雷达单":
chart.Type = ChartType.Radar;
break;
case "雷达多":
chart.Type = ChartType.Radars;
break;
case "线条":
chart.Type = ChartType.Scatter;
break;
case "Combo":
chart.Type = ChartType.Combo;
break;
case "ComboSideBySide":
chart.Type = ChartType.ComboHorizontal;
break;
case "ComboHorizontal":
chart.Type = ChartType.ComboSideBySide;
break;
case "Single Pie":
chart.Type = ChartType.Pie;
break;
case "Multi pie":
chart.Type = ChartType.Pies;
break;
case "Single Donut":
chart.Type = ChartType.Donut;
break;
case "Multi Donut":
chart.Type = ChartType.Donuts;
break;
case "Single Radar":
chart.Type = ChartType.Radar;
break;
case "Multi Radar":
chart.Type = ChartType.Radars;
break;
case "Scatter":
chart.Type = ChartType.Scatter;
break;
case "Bubble":
chart.Type = ChartType.Bubble;
break;
default:
chart.Type = ChartType.Combo;
break;
}
}
//样式类型选择处理
public static void SeriesType_values(Chart chart, string seriesType)
{
switch (seriesType)
{
case "柱体":
chart.DefaultSeries.Type = SeriesType.Column;
break;
case "圆柱":
chart.DefaultSeries.Type = SeriesType.Cylinder;
break;
case "记号":
chart.DefaultSeries.Type = SeriesType.Marker;
break;
case "连线":
chart.DefaultSeries.Type = SeriesType.Line;
break;
case "区域面积":
chart.DefaultSeries.Type = SeriesType.AreaLine;
break;
case "曲线":
chart.DefaultSeries.Type = SeriesType.Spline;
break;
case "Column":
chart.DefaultSeries.Type = SeriesType.Column;
break;
case "Cylinder":
chart.DefaultSeries.Type = SeriesType.Cylinder;
break;
case "Marker":
chart.DefaultSeries.Type = SeriesType.Marker;
break;
case "Line":
chart.DefaultSeries.Type = SeriesType.Line;
break;
case "AreaLine":
chart.DefaultSeries.Type = SeriesType.AreaLine;
break;
case "Spline":
chart.DefaultSeries.Type = SeriesType.Spline;
break;
default:
chart.DefaultSeries.Type = SeriesType.Column;
break;
}
}
//数据显示
public static SeriesCollection getRandomData(DataTable dt)
{
SeriesCollection SC = new SeriesCollection();
String idname = null;
//Random myR = new Random(1);
for (int a = 0; a < dt.Rows.Count; a++)
{
Series s = new Series();
s.Name = idname + a.ToString();
for (int b = 1; b < dt.Columns.Count; b++)
{
idname = dt.Columns[b].ColumnName;
Element e = new Element();
e.Name = idname;
double bb = 0;
try
{
bb = double.Parse(dt.Rows[a][b].ToString());
}
catch (Exception)
{
bb = 0;
}
e.YValue = bb;
s.Elements.Add(e);
}
idname = dt.Rows[a][0].ToString();
s.Name = idname;
SC.Add(s);
}
return SC;
}
//设置线的颜色
public static SeriesCollection ColorSet(SeriesCollection SC)
{
SC[0].DefaultElement.Color = Color.FromArgb(49, 255, 49);
//SC[1].DefaultElement.Color = Color.FromArgb(255, 255, 0);
//SC[2].DefaultElement.Color = Color.FromArgb(255, 99, 49);
//SC[3].DefaultElement.Color = Color.FromArgb(0, 156, 255);
//SC[4].DefaultElement.Color = Color.FromArgb(255, 156, 255);
return SC;
}
//各种函数显示
public static Axis Average_values(Axis replicaAxis, bool average_show)
{
if (average_show)
{
replicaAxis.AddCalculatedTick("平均值: %Value", Calculation.Average);
}
return replicaAxis;
}
public static Axis Max_values(Axis replicaAxis, bool maximum_show)
{
if (maximum_show)
{
replicaAxis.AddCalculatedTick("最大值: %Value", Calculation.Maximum);
}
return replicaAxis;
}
public static Axis Min_values(Axis replicaAxis, bool minimum_show)
{
if (minimum_show)
{
replicaAxis.AddCalculatedTick("最小值: %Value", Calculation.Minimum);
}
return replicaAxis;
}
//提取数据
public static DataTable CreateDataTable(string sql, string connstr)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connstr);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(sql, conn);
adapter.Fill(dt);
return dt;
}
public static void Drawing_Chart(Chart chart, string sql,string connstr)
{
Drawing_Chart(chart, sql, connstr, "", "", "800x600", "temp", "", "", false, false, false, false, false,false);
}
}
一些主要的图形要素在上面的类中已经有了文字说明。这里说明我们需要创建一个装载生成图片的文件夹也就是类种的"temp"
然后在一个aspx页面拖入dotnetcharing控件。
主要事件代码如下:
Code
protected void Button1_Click(object sender, EventArgs e)
{
sql = TextBox_sql.Text.Trim();
connstr = TextBox_connstr.Text.Trim();
if (sql == "" || sql.Equals(""))
{
sql = "select top 10 ws.wellbzid,ws.xtxl,ws.dmxl,ws.djxl,ws.cdxtxl,ws.jxxl,ws.cygbfxl,ws.ygrhdl from well_base as wb inner join well_syseffect as ws on wb.wellbzid = ws.wellbzid and (ws.well_time >='2007-03-19 00:00:00') and (ws.well_time <='2007-11-19 23:59:59') order by ws.well_time desc ";
}
if (connstr == "" || connstr.Equals(""))
{
connstr = "server=localhost;database=ydyjjl;user id=sa;password=sa";
}
title = this.TextBox_title.Text.Trim();
yname = this.TextBox_yname.Text.Trim();
Chart__WebData.Drawing_Chart(Chart1, sql, connstr, this.ChartTypeDDL.SelectedValue, this.SeriesTypeDDL.SelectedValue, "800x600", "temp", title, yname, this.ShowValues.Checked, this.show3D.Checked,this.CheckBox_LegendBox.Checked, this.Average.Checked, this.Max.Checked, this.Min.Checked);
DataTable ds = Chart__WebData.CreateDataTable(sql, connstr);
GridView1.DataSource = ds;
GridView1.DataBind();
//select wellbzid,dym from well_base
}
protected void Button1_Click(object sender, EventArgs e)
{
sql = TextBox_sql.Text.Trim();
connstr = TextBox_connstr.Text.Trim();
if (sql == "" || sql.Equals(""))
{
sql = "select top 10 ws.wellbzid,ws.xtxl,ws.dmxl,ws.djxl,ws.cdxtxl,ws.jxxl,ws.cygbfxl,ws.ygrhdl from well_base as wb inner join well_syseffect as ws on wb.wellbzid = ws.wellbzid and (ws.well_time >='2007-03-19 00:00:00') and (ws.well_time <='2007-11-19 23:59:59') order by ws.well_time desc ";
}
if (connstr == "" || connstr.Equals(""))
{
connstr = "server=localhost;database=ydyjjl;user id=sa;password=sa";
}
title = this.TextBox_title.Text.Trim();
yname = this.TextBox_yname.Text.Trim();
Chart__WebData.Drawing_Chart(Chart1, sql, connstr, this.ChartTypeDDL.SelectedValue, this.SeriesTypeDDL.SelectedValue, "800x600", "temp", title, yname, this.ShowValues.Checked, this.show3D.Checked,this.CheckBox_LegendBox.Checked, this.Average.Checked, this.Max.Checked, this.Min.Checked);
DataTable ds = Chart__WebData.CreateDataTable(sql, connstr);
GridView1.DataSource = ds;
GridView1.DataBind();
//select wellbzid,dym from well_base
}
我们运行后图片如下:
这里主要介绍些简单的共性功能以及效果展示,下次再介绍些这个控件其他一些强大的绘图特效,以及使用过程中的一些技巧。