`
yzd
  • 浏览: 1817944 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

chartControl 数据Easy处理

 
阅读更多
<pre class="Csharp" name="code">using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DevExpress.XtraCharts;
namespace Mysun{
    public class ChartHelper
    {
        ///
        /// 将表简单绑定到Chart
        ///
        /// 要绑定的数据源
        /// 分析项Index
        /// chart控件
        /// 数据棒图显示显示的样式,如:StackedBarSeriesView
        public static void EasyBound(DataTable dataTable, int sectionColumn, ChartControl chart, BarSeriesView seriesView,string[] seriesToBeDeleted)
        {
            try
            {
                chart.DataSource = null;
                chart.Series.Clear();
                DataTable dtV = HTable2VTable(dataTable, sectionColumn);
                if (seriesToBeDeleted != null &amp;&amp; seriesToBeDeleted.Length &gt; 0)
                    foreach (string series in seriesToBeDeleted)
                        RemoveSeries(dtV, 1, series);
                // 设置数据源
                chart.DataSource = dtV;
               
                //设置纵坐标项目(分析项)
                chart.SeriesDataMember = "Y";
                //设置横坐标项目
                chart.SeriesTemplate.ArgumentDataMember = "X";
                chart.SeriesTemplate.ValueDataMembers.AddRange(new string[] { "V" });
                //样式
                chart.SeriesTemplate.View = seriesView;
                foreach (Series s in chart.Series)
                    s.Label.Visible = false;
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("Chart转换出错");
            }
        }
        public static void EasyBound(DataTable dataTable, int sectionColumn, ChartControl chart, BarSeriesView seriesView)
        {
            EasyBound(dataTable, sectionColumn, chart, seriesView, null);
        }
        ///
        /// 将表绑定到Chart,对指定列给出第二坐标
        ///
        /// 要绑定的数据源
        /// 分析项Index
        /// chart控件
        /// 第一坐标上的数据棒图显示的样式,如:StackedBarSeriesView
        /// 第二坐标上的数据显示的样式,如:线图
        /// 需要以第二坐标为纵轴的序列名
        ///第二坐标最大值
        public static void EasyBound(DataTable dataTable, int sectionColumn, ChartControl chart, BarSeriesView seriesView, ViewType viewType, string[] lineNames, double maxValue)
        {
            EasyBound(dataTable, sectionColumn, chart, seriesView, viewType, lineNames, maxValue, null);
        }

        public static void EasyBound(DataTable dataTable, int sectionColumn, ChartControl chart, BarSeriesView seriesView, ViewType viewType, string[] lineNames, double maxValue, string[] seriesToBeDeleted)
        {
            try
            {
                EasyBound(dataTable, sectionColumn, chart, seriesView, seriesToBeDeleted);
                XYDiagram diagram = (XYDiagram)chart.Diagram;
                diagram.SecondaryAxesY.Clear();

                SecondaryAxisY axisY = new SecondaryAxisY("axisY");
                //axisY.Title.Visible = true;
                //设置百分比样式
                if (maxValue &lt; 1)
                {
                    axisY.NumericOptions.Format = NumericFormat.Percent;
                }

                //axisY.Range.SetMinMaxValues(0, maxValue);
                diagram.SecondaryAxesY.Add(axisY);
                foreach (Series series in chart.Series)
                {
                    foreach (string lineName in lineNames)
                    {
                        if (lineName == series.Name)
                        {
                            series.ChangeView(viewType);
                            ((XYDiagramSeriesViewBase)series.View).AxisY = axisY;
                        }

                    }
                }
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("Chart转换出错");
            }
        }

        ///
        /// 横表转换为绑定到Chart时候所用的纵表
        ///
        /// 数据源
        /// 分析项Index
        /// 输出的纵表,字段为X:表示横轴,Y:要分析的各项,V:值
        private static DataTable HTable2VTable(DataTable dataTable, int SectionColumn)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("X", typeof(String));
            dt.Columns.Add("Y", typeof(String));
            dt.Columns.Add("V", typeof(Double));
            foreach (DataRow dr in dataTable.Rows)
            {

                foreach (DataColumn dc in dataTable.Columns)
                {
                    if (dataTable.Columns[SectionColumn] != dc)
                        dt.Rows.Add(new object[] {
                    dc.ColumnName,
                    dr[SectionColumn],
                    double.Parse(dr[dc].ToString())
                    });
                }
            }
            return dt;
        }

        private static void RemoveSeries(DataTable dataTable, int sectionColumn,string name)
        {
            for (; ; )
            {
                DataRow[] drs = dataTable.Select("Y = &amp;apos;" + name + "&amp;apos;");
                if (drs.Length &gt; 0)
                    drs[0].Delete();
                else
                    break;
            }
        }

    }
}

</pre>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics