今天要总结的是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); } } } }
第一个方法是用来绑定三维的方法,第二个方法是用来绑定二维的方法。