MSChart柱图曲线图等实现总结及封装

本文介绍了.NET 4.0环境下如何使用MSChart组件,包括web.config配置、图表对象的封装方法,以及数据绑定和界面展示的步骤,旨在帮助开发者更好地理解和应用MSChart。

.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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值