遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

dev ChartControl 备忘

一个chartControl 里包括以个diagram(图表)

diagram里可以设置 x-axis与y-axis ,另外还可以设置SecondaryXAxis与SecondaryYAxis,在Series属性里可以选择使用Secondary Axis

可以添加多个Secondary Axis,并且让对应的Series使用, Axis对象可以通过选择控件上的y坐标选中,设置AutoScaleBreaks .Enabled=true,可以有不等距离坐标

另外坐标的Strip集合可以设置条带区域。

一个diagram里包括多少个Series,一个Series表示一组(x,y)取值集合

一个diagram里可以添加多个Panel, 某个Series可以设置呈现在那个panel里

Series的主要属性是DataSource,指定 ArgumentDataMember(X-Axis),ValuesDataMembers(Y-Axis)

 

1.自定义标注显示内,首相要设置series.LablesVisibility=True

            chartControl1.CustomDrawSeriesPoint += (s, e) =>
            {
                if (e.Series == chartControl1.Series["Real"])
                {
                    var it = e.SeriesPoint;
                    var obj = it.Tag as QualifiedInfo; //Tag里是当前点的记录
                    e.LabelText = string.Format("{0}|{2}|{1}", obj.Disqualification, obj.Amount,obj.DisqualificationWithoutOtherDuty);
                }
            };
View Code

 

参考代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using WinDetectionClockAdmin.Model;
using DevExpress.XtraCharts;
using System.Threading;
using DetectionClock.EFModel;
namespace WinDetectionClockAdmin
{
    public partial class frmPercentOfPassCharting : DevExpress.XtraEditors.XtraForm
    {
        private ChartControl CurCharControl { get; set; }
        public SynchronizationContext SyncContext { get; set; }
        public frmPercentOfPassCharting()
        {
            InitializeComponent();
            SyncContext = SynchronizationContext.Current;

            #region Tab
            layoutControlGroup3.Shown += (s, e) =>
            {
                CurCharControl = chartControl1;
            };
            layoutControlGroup4.Shown += (s, e) => { CurCharControl = chartControl2; };
            layoutControlGroup5.Shown += (s, e) => { CurCharControl = chartControl3; };
            layoutControlGroup6.Shown += (s, e) => { CurCharControl = chartControl4; };
            #endregion
            #region 自自定义Lbl显示
            chartControl1.CustomDrawSeriesPoint += (s, e) =>
            {
                if (e.Series == chartControl1.Series["Real"])
                {
                    var it = e.SeriesPoint;
                    var obj = it.Tag as QualifiedInfo;
                    e.LabelText = string.Format("{0}|{2}|{1}", obj.Disqualification, obj.Amount,obj.DisqualificationWithoutOtherDuty);
                }
            };
            #endregion

            #region
            bDate.EditValue = DateTime.Now.Date.AddDays(1 - DateTime.Now.Day);
            eDate.EditValue = DateTime.Now.Date.Add(new TimeSpan(23, 59, 59));
            ThreadPool.QueueUserWorkItem(o =>
            {
                using (var ctx = DBCtx.GetCtx())
                {
                    var sql = DRecAnalyze.LoadSql("sql04.txt");
                    var mInfoList = ctx.ExecuteStoreQuery<MInfo>(sql).ToList();
                    var batnos = ctx.FO_Task.GroupBy(ent => ent.Batno).Select(ent => ent.Key).Where(ent => ent != null).ToList();
                    
                    var empList = ctx.FO_TaskEmps.ToList();

                    SyncContext.Post(s =>
                    {
                        team.Properties.DataSource = empList;
                        mno.Properties.DataSource = mInfoList;
                        batno.Properties.Items.AddRange(batnos.ToArray());
                    }, null);

                }
            }, null);

            #endregion
        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            try
            {
                var sql = DRecAnalyze.LoadSql("sql05.txt");
                if (bDate.EditValue == null) throw new Exception("请指定开始时间");
                if (eDate.EditValue == null) throw new Exception("请指定结束时间");
                var bTime=(DateTime)bDate.EditValue;
                var eTime=(DateTime)eDate.EditValue;

                var dCondition = string.Format(" And d.AddTime>='{0}' And d.AddTime<='{1}' ",
                    bTime.Date.ToString("yyyy-MM-dd 00:00:00"),
                    eTime.Date.ToString("yyyy-MM-dd 23:59:59")
                    );

                var tCondition = "";
                if (mno.EditValue != null )
                {
                    if (!string.IsNullOrWhiteSpace(mno.ToString()))
                    {
                        tCondition += string.Format(" And t.MNo='{0}'", mno.EditValue.ToString());
                    }
                }
                if (!string.IsNullOrWhiteSpace(batno.Text))
                {
                    tCondition += string.Format(" And t.BatNo='{0}'", batno.Text);
                }
                if (team.EditValue != null)
                {
                    if(!string.IsNullOrWhiteSpace(team.EditValue.ToString()))
                    {
                        dCondition += String.Format(" And d.TaskEmpsId={0}", team.EditValue);
                    }
                }
                var exeSql= sql.Replace("$DCondition", dCondition).Replace("$TCondition", tCondition);


                #region AsyncAction
                Action act = () =>
                {
                    var data = DRecAnalyze.LoadData(exeSql);
                    var list = DRecAnalyze.AnalyzePercentOfPass(data);


                    //所有不良项
                    var symptomList = DRecAnalyze.AnalyzeSymptom(data);

                    //生产部不良项
                    var assembleSymptomList = DRecAnalyze.AnalyzeAssembleSymptom(data);

                    //主要不良项
                    var mainSymptom = DRecAnalyze.AnalyzeMainSymptom(data);

                    SyncContext.Post(o =>
                    {
                        var diagram = chartControl1.Diagram as XYDiagram;
                        if (list.Count > 0)
                        {
                            diagram.AxisY.Range.MaxValue = Math.Floor(list.Max(ent => ent.Disqualification) * 1.6);
                        }
                        chartControl1.Series["Aim"].DataSource = list;
                        chartControl1.Series["Real"].DataSource = list;
                        chartControl1.Series["Disqualification"].DataSource = list;

                        chartControl2.Series["Symptom"].DataSource = symptomList;

                        chartControl3.Series["Symptom"].DataSource = assembleSymptomList;

                        chartControl4.Series[0].DataSource = mainSymptom;
                        chartControl4.Series[1].DataSource = mainSymptom;
                        chartControl4.Series[2].DataSource = mainSymptom;
                    }, null);
                };
                #endregion
                this.AsyncInvoke(act);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        
                

        }

        private void btnExport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            SaveFileDialog fileDialog = new SaveFileDialog();
            fileDialog.Filter = "Excel文件|*.xls";
            fileDialog.FileName = this.Text + DateTime.Now.ToString("yyMMddHHmm");
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                CurCharControl.ExportToXls(fileDialog.FileName);
                XtraMessageBox.Show("操作成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }
    }
}
View Code

 

posted on 2014-11-26 14:05  遗忘海岸  阅读(1738)  评论(0编辑  收藏  举报