因为在项目的我只遇到了饼状,柱状,线状三种图表所以我只试着学习了这三种方式的编写,嘿嘿
第一步:下载WebChart控件;
第二步:将WebChart.dll添加到工具箱它显示的控件名称为:ChartControl;
第三步:新建WebForm,将工具箱中的ChartControl控件(即WebChart控件)添加到Default.aspx页面,并设置控件ID为ccPie,在属性控件器上设置ChartTitle为My Pie,XTitle为Month,YTitle为Value等属性;
第四步:在后台代码.cs文件中,添加 Using WebChart;
第五步:现在来做饼状图表,它的实现可以说相当简单(像我这种智商的人都可以理解,所以说简单)如下:
- //填充饼状图表
- protected void showPie()
- {
- try
- {
- //创建一个饼状图表的实例
- PieChart chart = new PieChart();
- //绑定数据源
- chart.DataSource = this.getSingleData().Tables[0].DefaultView;
- //设置X轴所对应的字段
- chart.DataXValueField = "Month";
- chart.DataYValueField = "value";
- //设置是否显示图表各部分的值
- chart.DataLabels.Visible = true;
- //设置显示值的字体颜色
- chart.DataLabels.ForeColor = System.Drawing.Color.Blue;
- //设置是否显示阴影
- chart.Shadow.Visible = true;
- chart.DataBind();
- //将饼状图表添加到图表容器
- ccPie.Charts.Add(chart);
- //画出图表
- ccPie.RedrawChart();
- }
- catch (Exception exPie)
- {
- throw new Exception(exPie.Message);
- }
- }
- protected DataSet getSingleData()
- {
- DataSet ds = new DataSet();
- Random rd = new Random(1);
- try
- {
- DataTable dt = new DataTable();
- dt.Columns.Add("Month", typeof(string));
- dt.Columns.Add("value", typeof(string));
- for (int i = 1; i < 13; i++)
- {
- DataRow row = dt.NewRow();
- row[0] = i.ToString();
- row[1] = Convert.ToInt32(rd.NextDouble() * 100);
- dt.Rows.Add(row);
- }
- ds.Tables.Add(dt);
- }
- catch (Exception exD)
- {
- Response.Write(exD.Message);
- }
- finally
- {
- ds.Dispose();
- }
- return ds;
- }
以上代码的实现效果如下:
图表各部分的颜色可以在将图表实例添加到图表容器前使用如下语句指定:
chart.Colors = new Color[] { Color.Red, Color.Blue, Color.Yellow, Color.Cyan, Color.Black, Color.RosyBrown,Color.Green,Color.Pink,Color.Purple,Color.GreenYellow,Color.Navy,Color.YellowGreen };
当然,为了使图表表现的更丰富你还可以通过设置其他属性来实现,好学的人们慢慢研究一下吧,嘻嘻
至于柱状图表嘛也没什么太可记录的,忽略了,附件为源码;
现在还是主要记录一下线状图吧,不是一条而是多线,嘿嘿
在Defalut.aspx页面上添加WebChart控件,设置ID为ccLine
.cs后台代码如下
- //填充线状图表
- protected void showLines()
- {
- try
- {
- DataSet ds = getMultiData();
- LineChart lc1 = new LineChart();
- lc1.Line.Color = Color.Green;
- lc1.Fill.Color = Color.Green;
- //设置在值点处线的显示形状
- lc1.LineMarker = new DiamondLineMarker(5, Color.Green, Color.Black);
- //设置图例的表示值,如果使用了图表中自带的样式,需要显示设置HasChartLegend来决定是否显示图例
- lc1.Legend = "Value 1";
- LineChart lc2 = new LineChart();
- lc2.Line.Color = Color.Blue;
- lc2.Fill.Color = Color.Blue;
- lc2.LineMarker = new CircleLineMarker(5, Color.Blue, Color.Green);
- lc2.Legend = "Value 2";
- LineChart lc3 = new LineChart();
- lc3.Line.Color = Color.Red;
- lc3.Fill.Color = Color.Red;
- lc3.LineMarker = new DiamondLineMarker(5, Color.Red, Color.Black);
- lc3.Legend = "Value 3";
- LineChart lc4 = new LineChart();
- lc4.Line.Color = Color.Purple;
- lc4.Fill.Color = Color.Purple;
- lc4.LineMarker = new DiamondLineMarker(8, Color.Purple, Color.Yellow);
- lc4.Legend = "Value 4";
- foreach (DataRow row in ds.Tables[0].Rows)
- {
- lc1.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[1].ToString())));
- lc2.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[2].ToString())));
- lc3.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[3].ToString())));
- lc4.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[4].ToString())));
- }
- ccLine.Charts.Add(lc1);
- ccLine.Charts.Add(lc2);
- ccLine.Charts.Add(lc3);
- ccLine.Charts.Add(lc4);
- ccLine.RedrawChart();
- }
- catch (Exception exPie)
- {
- Response.Write(exPie.Message);
- }
- }
效果如下:
有一处我感觉不太好就是在图例的显示中总是以小正方形显示,而不能对应相应的节点值的形状,如红色线记录对应菱形,这个可能是在控件中没有实现此功能,有待继续研究……
汗水一个先,不知道如何上传附件,所以源码就贴在下面吧,再汗!
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <%@ Register Assembly="WebChart" Namespace="WebChart" TagPrefix="Web" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>学习如何制作web图表</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <table>
- <tr>
- <td style="width: 100px">
- <asp:GridView ID="gvPie" runat="server">
- </asp:GridView>
- </td>
- <td style="width: 100px">
- <Web:ChartControl ID="ccPie" runat="server" BorderStyle="Outset" BorderWidth="5px"
- GridLines="None" Height="400px" LeftChartPadding="20" Padding="20" Width="500px">
- <YAxisFont StringFormat="Far,Near,Character,LineLimit" />
- <ChartTitle StringFormat="Center,Near,Character,LineLimit" Text="My Pie" />
- <XAxisFont StringFormat="Center,Near,Character,LineLimit" />
- <Background Color="LightSteelBlue" />
- <YTitle StringFormat="Center,Near,Character,DirectionVertical" Text="Value" />
- <XTitle StringFormat="Center,Near,Character,LineLimit" Text="Month" />
- </Web:ChartControl></td>
- </tr>
- <tr>
- <td style="width: 100px">
- <asp:GridView ID="gvColumn" runat="server">
- </asp:GridView>
- </td>
- <td style="width: 100px">
- <Web:ChartControl ID="ccColumn" runat="server" BorderStyle="Outset" BorderWidth="5px"
- Height="400px" Padding="20" Width="500px">
- <YAxisFont StringFormat="Far,Near,Character,LineLimit" />
- <XTitle StringFormat="Center,Near,Character,LineLimit" Text="Month" />
- <ChartTitle StringFormat="Center,Near,Character,LineLimit" Text="My Column" />
- <XAxisFont StringFormat="Center,Near,Character,LineLimit" />
- <Background Color="LightSteelBlue" />
- <YTitle StringFormat="Center,Near,Character,DirectionVertical" Text="Value" />
- </Web:ChartControl></td>
- </tr>
- <tr>
- <td style="width: 100px">
- <asp:GridView ID="gvLine" runat="server">
- </asp:GridView>
- </td>
- <td style="width: 100px">
- <Web:ChartControl ID="ccLine" runat="server" BorderStyle="Outset" BorderWidth="5px"
- Height="400px" Padding="20" Width="500px">
- <YAxisFont StringFormat="Far,Near,Character,LineLimit" />
- <XTitle StringFormat="Center,Near,Character,LineLimit" Text="Month" />
- <ChartTitle StringFormat="Center,Near,Character,LineLimit" Text="My Lines" />
- <XAxisFont StringFormat="Center,Near,Character,LineLimit" />
- <Background Color="LightSteelBlue" />
- <YTitle StringFormat="Center,Near,Character,DirectionVertical" Text="Value" />
- </Web:ChartControl></td>
- </tr>
- </table>
- </div>
- </form>
- </body>
- </html>
- ********************
- 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 System.Drawing;
- using WebChart;
- public partial class _Default : System.Web.UI.Page
- {
- //我们可以利用此控件创建下列样式的图表
- //1. Line Charts
- //2. Smooth Line Charts
- //3. Column Charts
- //4. Area Charts
- //5. Scattered Charts
- //6. Stacked Column Charts
- //7. Pie Charts
- //8. Stacked Area Charts
- protected void Page_Load(object sender, EventArgs e)
- {
- try
- {
- showPieData();
- showPie();
- showColumnData();
- showColumn();
- showLineData();
- showLines();
- }
- catch (Exception ex)
- {
- Response.Clear();
- Response.Write(ex.Message);
- }
- }
- //一个数据
- protected DataSet getSingleData()
- {
- DataSet ds = new DataSet();
- Random rd = new Random(1);
- try
- {
- DataTable dt = new DataTable();
- dt.Columns.Add("Month", typeof(string));
- dt.Columns.Add("value", typeof(string));
- for (int i = 1; i < 13; i++)
- {
- DataRow row = dt.NewRow();
- row[0] = i.ToString();
- row[1] = Convert.ToInt32(rd.NextDouble() * 100);
- dt.Rows.Add(row);
- }
- ds.Tables.Add(dt);
- }
- catch (Exception exD)
- {
- Response.Write(exD.Message);
- }
- finally
- {
- ds.Dispose();
- }
- return ds;
- }
- //多个数据
- protected DataSet getMultiData()
- {
- DataSet ds = new DataSet();
- Random rd = new Random(1);
- try
- {
- DataTable dt = new DataTable();
- dt.Columns.Add("Month", typeof(string));
- dt.Columns.Add("value1", typeof(string));
- dt.Columns.Add("value2", typeof(string));
- dt.Columns.Add("value3", typeof(string));
- dt.Columns.Add("value4", typeof(string));
- for (int i = 1; i < 13; i++)
- {
- DataRow row = dt.NewRow();
- row[0] = i.ToString();
- row[1] = Convert.ToInt32(rd.NextDouble() * 100);
- row[2] = Convert.ToInt32(rd.NextDouble() * 100);
- row[3] = Convert.ToInt32(rd.NextDouble() * 100);
- row[4] = Convert.ToInt32(rd.NextDouble() * 100);
- dt.Rows.Add(row);
- }
- ds.Tables.Add(dt);
- }
- catch (Exception exD)
- {
- Response.Write(exD.Message);
- }
- finally
- {
- ds.Dispose();
- }
- return ds;
- }
- //显示gvPie
- protected void showPieData()
- {
- gvPie.DataSource = getSingleData().Tables[0].DefaultView;
- gvPie.DataBind();
- }
- //显示gvColumn
- protected void showColumnData()
- {
- gvColumn.DataSource = getSingleData().Tables[0].DefaultView;
- gvColumn.DataBind();
- }
- //显示gvLine
- protected void showLineData()
- {
- gvLine.DataSource = getMultiData().Tables[0].DefaultView;
- gvLine.DataBind();
- }
- //填充饼状图表
- protected void showPie()
- {
- try
- {
- PieChart chart = new PieChart();
- chart.DataSource = this.getSingleData().Tables[0].DefaultView;
- chart.DataXValueField = "Month";
- chart.DataYValueField = "value";
- chart.DataLabels.Visible = true;
- chart.DataLabels.ForeColor = System.Drawing.Color.Blue;
- chart.Shadow.Visible = true;
- chart.DataBind();
- ccPie.Charts.Add(chart);
- ccPie.RedrawChart();
- }
- catch (Exception exPie)
- {
- throw new Exception(exPie.Message);
- }
- }
- //填充柱状图表
- protected void showColumn()
- {
- try
- {
- ColumnChart chart = new ColumnChart();
- chart.DataSource = this.getSingleData().Tables[0].DefaultView;
- chart.DataXValueField = "Month";
- chart.DataYValueField = "value";
- chart.Legend = "Data Value";
- chart.MaxColumnWidth = 15;
- chart.DataLabels.Visible = true;
- chart.DataLabels.ForeColor = Color.Blue;
- chart.Shadow.Visible = true;
- chart.Fill.Color = Color.FromArgb(100, Color.Purple);
- chart.DataBind();
- ccColumn.Charts.Add(chart);
- ccColumn.RedrawChart();
- }
- catch (Exception exPie)
- {
- throw new Exception(exPie.Message);
- }
- }
- //填充线状图表
- protected void showLines()
- {
- try
- {
- DataSet ds = getMultiData();
- LineChart lc1 = new LineChart();
- lc1.Line.Color = Color.Green;
- lc1.Fill.Color = Color.Green;
- lc1.LineMarker = new DiamondLineMarker(5, Color.Green, Color.Black);
- lc1.Legend = "Value 1";
- LineChart lc2 = new LineChart();
- lc2.Line.Color = Color.Blue;
- lc2.Fill.Color = Color.Blue;
- lc2.LineMarker = new CircleLineMarker(5, Color.Blue, Color.Green);
- lc2.Legend = "Value 2";
- LineChart lc3 = new LineChart();
- lc3.Line.Color = Color.Red;
- lc3.Fill.Color = Color.Red;
- lc3.LineMarker = new DiamondLineMarker(5, Color.Red, Color.Black);
- lc3.Legend = "Value 3";
- LineChart lc4 = new LineChart();
- lc4.Line.Color = Color.Purple;
- lc4.Fill.Color = Color.Purple;
- lc4.LineMarker = new DiamondLineMarker(8, Color.Purple, Color.Yellow);
- lc4.Legend = "Value 4";
- foreach (DataRow row in ds.Tables[0].Rows)
- {
- lc1.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[1].ToString())));
- lc2.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[2].ToString())));
- lc3.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[3].ToString())));
- lc4.Data.Add(new ChartPoint(row[0].ToString(), float.Parse(row[4].ToString())));
- }
- ccLine.Charts.Add(lc1);
- ccLine.Charts.Add(lc2);
- ccLine.Charts.Add(lc3);
- ccLine.Charts.Add(lc4);
- ccLine.RedrawChart();
- }
- catch (Exception exPie)
- {
- Response.Write(exPie.Message);
- }
- }
- }