今天要总结的是Microsoft Chart Controls。
微软在收购了 Dundas 这家优秀的图表组件公司后,日前释出了功能相当强大,而且完全免费的图表组件,名为「Microsoft Chart Controls for Microsoft .NET Framework 3.5」。
过去要在 ASP.NET 或 Windows Form 中绘制图表,可能要花钱买其它公司的组件,或用微软的绘图函式库自己撰码处理。但现在透过这组件,以及微软提供免费下载的上百个现成范例 (包装成单一个 project)、免费的技术文件,可让您的项目及报表,轻松套用各种功能强大的 2D、3D、实时变化的动态图表;且透过 AJAX,可让图表及里面的数据,每秒钟都持续更新;使用者透过浏览器,可和图表做各种互动设定。
下面提供一个官网地址,大家可在这下载(而且里面也有丰富的示例,大家看到后会有一种很爽的感觉):
http://archive.msdn.microsoft.com/mschart
由于在近期的项目中用到了将数据显示为图表,所以自己写了一个将datasource绑定到图表的方法。
前台的报表代码如下:
<asp:Chart ID="Chart1" runat="server" BackColor="WhiteSmoke" BackSecondaryColor="White"
BackGradientStyle="TopBottom" BorderlineDashStyle="Solid" Palette="BrightPastel"
BorderColor="26, 59, 105" Height="324px" Width="846px" BorderWidth="2" ImageLocation="~/TempImages/ChartPic_#SEQ(300,3)">
<Legends>
<asp:Legend IsTextAutoFit="False" Name="Default" BackColor="Transparent" Font="Trebuchet MS, 8.25pt, style=Bold">
</asp:Legend>
</Legends>
<BorderSkin SkinStyle="Emboss"></BorderSkin>
<ChartAreas>
<asp:ChartArea Name="ChartArea1" BorderColor="64, 64, 64, 64" BorderDashStyle="Solid"
BackSecondaryColor="White" BackColor="Gainsboro" ShadowColor="Transparent" BackGradientStyle="TopBottom">
<Area3DStyle Rotation="10" Perspective="10" Inclination="15" IsRightAngleAxes="False"
WallWidth="0" IsClustered="False" />
<AxisY LineColor="64, 64, 64, 64" IsLabelAutoFit="False">
<LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
<MajorGrid LineColor="64, 64, 64, 64" />
</AxisY>
<AxisX LineColor="64, 64, 64, 64">
<LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" IntervalType="Auto" />
<MajorGrid Interval="Auto" IntervalType="Auto" LineColor="64, 64, 64, 64" />
<MajorTickMark IntervalType="Auto" />
</AxisX>
</asp:ChartArea>
</ChartAreas>
</asp:Chart>
绑定dataTable到图表的方法如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.DataVisualization.Charting;
using System.Web.UI.WebControls;
using System.Data;
using BLL;
namespace AdminMis
{
public class BindChart
{
/// <summary>
/// 用于绑定图表
/// </summary>
/// <param name="Chart">图表</param>
/// <param name="type">图表类型</param>
/// <param name="dtVariety">种类的datatable</param>
/// <param name="strVariety">种类的字符串</param>
/// <param name="dtXY">XY坐标的datatable</param>
/// <param name="strX">X坐标的字符串</param>
/// <param name="strY">Y坐标的字符串</param>
/// <param name="CheckBoxList"></param>
public void BindDataTableToChart(ref Chart Chart,SeriesChartType type,System.Data.DataTable dtVariety,string strTag,string strVariety,System.Data.DataTable dtXY,string strX,string strY,ref CheckBoxList CheckBoxList)
{
//图表
//临时变量,用来绑定checkboxlist
foreach (DataRow row in dtVariety.Rows)
{
// for each Row, add a new series
string seriesName = row[strVariety].ToString() + strTag;
Chart.Series.Add(seriesName);
Chart.Series[seriesName].ChartType = type;
Chart.Series[seriesName].BorderWidth = 2;
Chart.Series[seriesName].ShadowOffset = 2;
}
foreach (DataRow row in dtXY.Rows)
{
string seriesName = row[strVariety].ToString() + strTag;
string date = row[strX].ToString();
int YVal = (int)row[strY];
Chart.Series[seriesName].Points.AddXY(date, YVal);
}
for (int i = 0; i < dtVariety.Rows.Count; i++)
{
Chart.Series[i].Enabled = CheckBoxList.Items[i].Selected;
}
}
public void BindXYToChart(ref Chart Chart, SeriesChartType type, System.Data.DataTable dtXY, string strX, string strY)
{
Chart.Series.Add("default");
Chart.Series["default"].ChartType = type;
foreach (DataRow row in dtXY.Rows)
{
string date = row[strX].ToString();
int YVal = (int)row[strY];
Chart.Series["default"].Points.AddXY(date,YVal);
}
}
}
}
第一个方法是用来绑定三维的方法,第二个方法是用来绑定二维的方法。