dev ChartControl 备忘

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

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

一个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);
                }
            };

参考代码

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);
            }
        }
    }
}

时间: 2024-10-13 21:23:49

dev ChartControl 备忘的相关文章

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo

SQL注入备忘单

Find and exploit SQL Injections with free Netsparker SQL Injection Scanner SQL Injection Cheat Sheet, Document Version 1.4 About SQL Injection Cheat Sheet Currently only for MySQL and Microsoft SQL Server, some ORACLE and some PostgreSQL. Most of sam

(备忘)Linux mount(挂载命令)详解

挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式:mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型.常用类型有: 光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat Windows NT ntfs文

git命令整理备忘

git命令整理备忘 参考https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 一.基本命令 打开 git bash #创建本地 git 仓库: $ cd /home/object $ git init #添加文件 $ git add readme.md #跟踪整个文件夹可以使用 git add . $ git commit -m'说明' #提交 add 到的文件 $ git comm

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

工作备忘:cacti&nagios登录密码修改方法

[[email protected]]# mysql -u root -p mysql> use cacti; mysql> select * from user_auth; mysql> update user_auth set password=md5("cactipasswd") where id='1'; 现在cacti登录的新密码就是cactipasswd [[email protected]]# /usr/bin/htpasswd /usr/local/n

[转]Windows环境下尝试安装并配置PHP PEAR备忘

转自:http://wangye.org/blog/archives/266/ 什么是PEAR 来自百度百科:PEAR 是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl. 由此可见PEAR是PHP代码的仓库,在这里可以找到很多有用的代码,避免我们重复写一些功能,

Table view 备忘

Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以做缓存处理,同样也可能会造成复用问题. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // tableview 和 cell 都是在s