.NET4.0已经包含了MsChart了,根据自己的使用简单介绍下,希望对网友有帮助
1、web.config配置
需要在<appSettings>中增加
<!--分析图片 参数设置-->
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=C:\Windows\temp;"/>
在<system.webServer>中增加
<handlers>
<remove name="ChartImageHandler"/>
<add name="ChartImageHandler" preCondition="integratedMode" verb="GET,POST,HEAD" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
2、mschat实现封装实现代码
/// <summary>
/// 获得图形对象
/// </summary>
/// <param name="page">页面实例</param>
/// <returns></returns>
public Chart GetChart(Page page)
{
Chart result = new Chart();
//图像属性
result.RenderType = RenderType.ImageTag;
result.Width = Width;
result.Height = Height;
if (String.IsNullOrEmpty(Template))
{
result.Serializer.Content = SerializationContents.Default;
}
else
{
result.LoadTemplate(Template);
}
if (Titles != null)
{
//标题
foreach (ChartTitle obj in Titles)
{
result.Titles.Add(new Title(obj.Text, obj.Docking));
}
}
if (MyAreas == null || MyAreas.Count == 0)
{
throw new Exception("图像的区域配置不能为空");
}
foreach (MyArea myArea in MyAreas)
{
//图像区域
ChartArea item = new ChartArea(myArea.Name);
if (myArea.XInterval.HasValue)
{
item.AxisX.Interval = myArea.XInterval.Value;
}
else
{
item.AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount;
}
if (myArea.YInterval.HasValue)
{
item.AxisY.Interval = myArea.YInterval.Value;
}
else
{
item.AxisY.IntervalAutoMode = IntervalAutoMode.FixedCount;
}
if (myArea.XMinimum.HasValue)
{
item.AxisX.Minimum = myArea.XMinimum.Value;
}
if (myArea.YMinimum.HasValue)
{
item.AxisY.Minimum = myArea.YMinimum.Value;
}
item.Area3DStyle.Enable3D = myArea.IsShow3D;
if (myArea.IsShow3D)
{
item.Area3DStyle.IsClustered = myArea.IsClustered;
item.Area3DStyle.IsRightAngleAxes = myArea.IsRighTangleAxes;
if (myArea.Inclination > 0)
{
if (myArea.Inclination > 90)
{
item.Area3DStyle.Inclination = 90 - myArea.Inclination;
}
else
{
item.Area3DStyle.Inclination = myArea.Inclination;
}
}
if (myArea.Rotation > 0)
{
if (myArea.Rotation > 180)
{
item.Area3DStyle.Rotation = 180 - myArea.Rotation;
}
else
{
item.Area3DStyle.Rotation = myArea.Rotation;
}
}
item.Area3DStyle.LightStyle = myArea.LightStyle;
if (myArea.PointDepth > 0)
{
item.Area3DStyle.PointDepth = myArea.PointDepth;
}
if (myArea.PointGapDepth > 0)
{
item.Area3DStyle.PointGapDepth = myArea.PointGapDepth;
}
}
item.AxisX.IsLabelAutoFit = true;
item.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.DecreaseFont | LabelAutoFitStyles.IncreaseFont | LabelAutoFitStyles.WordWrap;
item.AxisX.LabelStyle.Interval = 1;
item.AxisX.LabelStyle.IntervalOffset = 1;
item.AxisX.LabelStyle.IsStaggered = false;
item.AxisX.LabelStyle.TruncatedLabels = true;
if (!String.IsNullOrEmpty(myArea.XDataFormat))
{
item.AxisX.LabelStyle.Format = myArea.XDataFormat;
}
if (!String.IsNullOrEmpty(myArea.YDataFormat))
{
item.AxisY.LabelStyle.Format = myArea.YDataFormat;
}
//图例
if (myArea.Lengend != null && !IsExit(result.Legends, myArea.Lengend.Name))
{
Legend legend = new Legend(myArea.Lengend.Name);
if (!String.IsNullOrEmpty(myArea.Lengend.Title))
{
legend.Title = myArea.Lengend.Title;
}
legend.Docking = myArea.Lengend.Docking;
legend.Enabled = true;
result.Legends.Add(legend);
}
//自身数据优先
object ds = null;
if (myArea.DataSource == null)
{
ds = DataSource;
}
else
{
ds = myArea.DataSource;
}
//数据及系列
if (myArea.IsDataTable && ds != null)
{
if (ds is DataView)
{
result.DataBindTable((DataView)ds, myArea.XField);
}
else
{
result.DataBindTable(((DataTable)ds).DefaultView, myArea.XField);
}
}
if (myArea.MySeries != null)
{
foreach (MySerie mySerie in myArea.MySeries)
{
Series serie = new Series(mySerie.Name);
serie.ChartArea = myArea.Name;
serie.ChartType = mySerie.ChartType;
if (myArea.Lengend != null)
{
serie.Legend = myArea.Lengend.Name;
if (!String.IsNullOrEmpty(mySerie.Title))
{
serie.LegendText = mySerie.Title;
}
}
serie.IsValueShownAsLabel = mySerie.IsValueShownAsLabel;
if (mySerie.IsValueShownAsLabel && !String.IsNullOrEmpty(mySerie.DataFormat))
{
serie.LabelFormat = mySerie.DataFormat;
}
serie.XValueType = myArea.XValueType;
serie.YValueType = myArea.YValueType;
if (!String.IsNullOrEmpty(mySerie.CustomProperty))
{
foreach (string pv in DataHelper.GetStrings(mySerie.CustomProperty))
{
string[] pvs = DataHelper.GetStrings(pv, '=');
if (pvs != null && pvs.Length == 2)
{
serie.SetCustomProperty(pvs[0], pvs[1]);
}
}
}
if (mySerie.Color.HasValue)
{
serie.Color = mySerie.Color.Value;
}
//标记
if (mySerie.MarkerSize > 0)
{
serie.MarkerSize = mySerie.MarkerSize;
serie.MarkerStyle = mySerie.MarkerStyle;
if (mySerie.MarkerColor.HasValue)
{
serie.MarkerColor = mySerie.MarkerColor.Value;
}
else if (mySerie.Color.HasValue)
{
serie.MarkerColor = mySerie.Color.Value;
}
}
//值
if (!myArea.IsDataTable && mySerie.ColumnNames != null)
{
if (ds == null && DataColumns != null)
{
//单条数据
foreach (string name in mySerie.ColumnNames)
{
serie.Points.Add(GetDataPoint(null, name, mySerie, myArea));
}
}
else if (ds != null)
{
IList list = ReflectionDeal.GetDisplayList(ds);
List<int> iList = new List<int>();
if (myArea.RowIndexs == null)
{
for (int i = 0; i < list.Count; i++)
{
iList.Add(i);
}
}
foreach (int i in iList)
{
serie.Points.Add(GetDataPoint(list[i], null, mySerie, myArea));
}
}
}
result.Series.Add(serie);
}
}
result.ChartAreas.Add(item);
}
result.Page = page;
return result;
}
3、生成并添加到界面
myChart.DataSource = dv;//支持DataSet DataTable DataView 或者对象集合(程序中使用反射获得数据)
divChart2.Controls.Add(myChart.GetChart(Page));
试用请登录http://121.18.78.216/