【DevExpress】将某列数据统计后按柱状图显示

显示结果预览:

d1078111719ff6b174e20e1e1e17c6f8c46.jpg

如上图:将R15101设备按FAULT_LEVEL中的FAULT/WARNING两种结果统计后,以柱状图的形式显示。

操作步骤:

(1)按指定条件将数据列表从数据库中查出并用Linq语句将FAULT/WARNING的条数统计出来,再传至客户端。

 int level_fault_count = fdcfaulttrxlist.Where(t=>t.FaultLevel=="FAULT").Count();
 int level_warning_count = fdcfaulttrxlist.Where(t=>t.FaultLevel=="WARNING").Count();

(2)客户端获取数据后将列表绑定到GridView,再用DataTable中的数据对ChartControl进行画图

08459567d1c5fb9c6537b716a0ce482bcf6.jpg

 private void btnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            DataTable dt = new DataTable();
            if (dtFrom.EditValue != null && dtTo != null&&gluResId.EditValue!=null&&dtFrom.EditValue.ToString()!=""&&dtTo.EditValue.ToString()!=""
                &&gluResId.EditValue.ToString()!="")
            {
                string sStartTime = CommonFunction.ToStandardTime((DateTime)dtFrom.EditValue, GlobalConstant.SYS_CONVERT_DATETIME_FORMAT);
                string sEndTime = CommonFunction.ToStandardTime((DateTime)dtTo.EditValue, GlobalConstant.SYS_CONVERT_DATETIME_FORMAT);
                string sResId = gluResId.EditValue.ToString();
                chtSummary.Series.Clear();
                BindGV();
            }
        }

BindGV():

  private bool BindGV()
        {
            if (dtFrom.EditValue == null || dtTo.EditValue == null)
            {
                return false;
            }
            if (gluResId.EditValue == null || gluResId.EditValue.ToString() == "")
            {
                DataTable dtResult = new DataTable();
                
                dtResult.Columns.Add("PARA_DISPLAY_NAME");
                dtResult.Columns.Add("FAULT_TIME");
                dtResult.Columns.Add("DATA_CATEGORY");
                dtResult.Columns.Add("SPEC_TYPE");
                dtResult.Columns.Add("FAULT_TYPE");
                dtResult.Columns.Add("FAULT_LEVEL");
                dtResult.Columns.Add("DATA_STATUS");
                dtResult.Columns.Add("PARA_VALUE");
                dtResult.Columns.Add("TARGET");
                dtResult.Columns.Add("USL");
                dtResult.Columns.Add("UCL");
                dtResult.Columns.Add("LCL");
                dtResult.Columns.Add("LSL");
                dtResult.Columns.Add("FAULT_DESC");
                dtResult.Columns.Add("OPERATION_ID");
                dtResult.Columns.Add("LOT_ID");
                dtResult.Columns.Add("LOT_TYPE");
                dtResult.Columns.Add("CASSETTE_SLOT");
                dtResult.Columns.Add("SUBSTRATE_ID");
                dtResult.Columns.Add("PRODUCT_ID");
                dtResult.Columns.Add("RECIPE_ID");
                dtResult.Columns.Add("STEP_ID");
                dtResult.Columns.Add("MAIN_MODULE_ID");
                dtResult.Columns.Add("CONTEXT_KEY");
                dtResult.Columns.Add("INTERLOCK_FLAG");
                dtResult.Columns.Add("COMPOSITE");
                dtResult.Columns.Add("CMF_01");
                dtResult.Columns.Add("CMF_02");
                dtResult.Columns.Add("CMF_03");
                dtResult.Columns.Add("CMF_04");
                dtResult.Columns.Add("CMF_05");
                dtResult.Columns.Add("CMF_06");
                dtResult.Columns.Add("CMF_07");
                dtResult.Columns.Add("CMF_08");
                dtResult.Columns.Add("CMF_09");
                dtResult.Columns.Add("CMF_10");
                dtResult.Columns.Add("CMF_11");
                dtResult.Columns.Add("CMF_12");
                dtResult.Columns.Add("CMF_13");
                dtResult.Columns.Add("CMF_14");
                dtResult.Columns.Add("CMF_15");
                dtResult.Columns.Add("CMF_16");
                dtResult.Columns.Add("CMF_17");
                dtResult.Columns.Add("CMF_18");
                dtResult.Columns.Add("CMF_19");
                dtResult.Columns.Add("CMF_20");
                dtResult.Columns.Add("CREATE_USER_ID");
                dtResult.Columns.Add("CREATE_TIME");
                dtResult.Columns.Add("UPDATE_USER_ID");
                dtResult.Columns.Add("UPDATE_TIME");
                dtResult.Columns.Add("LEVEL_FAULT_COUNT");
                dtResult.Columns.Add("LEVEL_WARNING_COUNT");
                dtResult.Columns.Add("RAWID");
                dtResult.Columns.Add("RES_ID");
                dtResult.Columns.Add("DCP_ID");
                int[] iaWidth = new int[dtResult.Columns.Count];
                for (int i = 0; i < dtResult.Columns.Count; i++)
                {
                    if (i < 50)
                        iaWidth[i] = 80;
                    else
                        iaWidth[i] = -1;
                }
                DevGridControlHelper.BindData(gdcSummary, dtResult, iaWidth);

               
                return false;
            }
            string sResId = gluResId.EditValue.ToString();
            DateTime tFrom = DateCheck.Checked ? ((DateTime)dtFrom.EditValue) : DateTime.Now.AddDays(-1);//ToDo: 用一个之前的日期模拟实现查询所有工单
            DateTime tTo = DateCheck.Checked ? ((DateTime)dtTo.EditValue) : DateTime.Now;//保证查到今天创建的PO。加秒而不是加一天是为了避免AddDays()后查到第二天的数据 ToDo:第二个应该是AddDays(1)吧
            DataTable dt = ListRoutineFDC.ViewFDCAlarmSummary(sResId: sResId, sStartTime: CommonFunction.ToStandardTime(tFrom, GlobalConstant.SYS_CONVERT_DATETIME_FORMAT),
                sEndTime: CommonFunction.ToStandardTime(tTo, GlobalConstant.SYS_CONVERT_DATETIME_FORMAT));
            if (dt != null &&dt.Rows.Count>0)
            {
                int[] iaWidth = new int[dt.Columns.Count];
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (i < 50)
                        iaWidth[i] = 80;
                    else
                        iaWidth[i] = -1;//共55列,后5列不显示
                }
                DevGridControlHelper.BindData(gdcSummary, dt, iaWidth);
                ChartControl stackedBarChart = new ChartControl();
                Series[] aSeries = CreateSeries(dt, ViewType.SideBySideStackedBar);//将要显示的数据绑定到series中  //SideBySideStackedBar柱状图、Line折线图
                //((LineSeriesView)series.View).MarkerVisibility = DevExpress.Utils.DefaultBoolean.True;
                //((LineSeriesView)series.View).LineMarkerOptions.Size = 5;
                //chtSummary.Series.AddRange(aSeries);
                ((SideBySideStackedBarSeriesView)aSeries[0].View).StackedGroup = 0;将两个series分组在同一堆栈下。
                ((SideBySideStackedBarSeriesView)aSeries[1].View).StackedGroup = 0;
                stackedBarChart.Dock = DockStyle.Fill;

                chtSummary.Series.AddRange(aSeries);
                // gdvDetail.Columns[0].Width = 20;
                return true;
            }
            else
            {
                DataTable dtResult = new DataTable();
                
                dtResult.Columns.Add("PARA_DISPLAY_NAME");
                dtResult.Columns.Add("FAULT_TIME");
                dtResult.Columns.Add("DATA_CATEGORY");
                dtResult.Columns.Add("SPEC_TYPE");
                dtResult.Columns.Add("FAULT_TYPE");
                dtResult.Columns.Add("FAULT_LEVEL");
                dtResult.Columns.Add("DATA_STATUS");
                dtResult.Columns.Add("PARA_VALUE");
                dtResult.Columns.Add("TARGET");
                dtResult.Columns.Add("USL");
                dtResult.Columns.Add("UCL");
                dtResult.Columns.Add("LCL");
                dtResult.Columns.Add("LSL");
                dtResult.Columns.Add("FAULT_DESC");
                dtResult.Columns.Add("OPERATION_ID");
                dtResult.Columns.Add("LOT_ID");
                dtResult.Columns.Add("LOT_TYPE");
                dtResult.Columns.Add("CASSETTE_SLOT");
                dtResult.Columns.Add("SUBSTRATE_ID");
                dtResult.Columns.Add("PRODUCT_ID");
                dtResult.Columns.Add("RECIPE_ID");
                dtResult.Columns.Add("STEP_ID");
                dtResult.Columns.Add("MAIN_MODULE_ID");
                dtResult.Columns.Add("CONTEXT_KEY");
                dtResult.Columns.Add("INTERLOCK_FLAG");
                dtResult.Columns.Add("COMPOSITE");
                dtResult.Columns.Add("CMF_01");
                dtResult.Columns.Add("CMF_02");
                dtResult.Columns.Add("CMF_03");
                dtResult.Columns.Add("CMF_04");
                dtResult.Columns.Add("CMF_05");
                dtResult.Columns.Add("CMF_06");
                dtResult.Columns.Add("CMF_07");
                dtResult.Columns.Add("CMF_08");
                dtResult.Columns.Add("CMF_09");
                dtResult.Columns.Add("CMF_10");
                dtResult.Columns.Add("CMF_11");
                dtResult.Columns.Add("CMF_12");
                dtResult.Columns.Add("CMF_13");
                dtResult.Columns.Add("CMF_14");
                dtResult.Columns.Add("CMF_15");
                dtResult.Columns.Add("CMF_16");
                dtResult.Columns.Add("CMF_17");
                dtResult.Columns.Add("CMF_18");
                dtResult.Columns.Add("CMF_19");
                dtResult.Columns.Add("CMF_20");
                dtResult.Columns.Add("CREATE_USER_ID");
                dtResult.Columns.Add("CREATE_TIME");
                dtResult.Columns.Add("UPDATE_USER_ID");
                dtResult.Columns.Add("UPDATE_TIME");
                dtResult.Columns.Add("LEVEL_FAULT_COUNT");
                dtResult.Columns.Add("LEVEL_WARNING_COUNT");
                dtResult.Columns.Add("RAWID");
                dtResult.Columns.Add("RES_ID");
                dtResult.Columns.Add("DCP_ID");

                int[] iaWidth = new int[dtResult.Columns.Count];
                for (int i = 0; i < dtResult.Columns.Count; i++)
                {
                    if (i < 50)
                        iaWidth[i] = 80;
                    else
                        iaWidth[i] = -1;
                }
                DevGridControlHelper.BindData(gdcSummary, dtResult, iaWidth);

                return false;
            }
        }

       

将要显示的数据绑定到series中,CreateSeries():

   private Series[] CreateSeries(DataTable dt, ViewType viewType)
        {
            Series[] aSeries = new Series[2];
            Series series1 = new Series("FAULT", viewType);//两种不同的数据结果
            Series series2 = new Series("WARNING", viewType);
            int count = dt.Rows.Count;
            try
            {
                int dNum_Fault = Convert.ToInt32(dt.Rows[0]["LEVEL_FAULT_COUNT"]);//统计结果值
              
                int dNum_Warning = Convert.ToInt32(dt.Rows[0]["LEVEL_WARNING_COUNT"]);
                string sResId = dt.Rows[0]["RES_ID"].ToString();//R15101 柱状图名称
                series1.Points.Add(new SeriesPoint(sResId, dNum_Fault));
                series2.Points.Add(new SeriesPoint(sResId, dNum_Warning));
                aSeries.SetValue(series1,0);
                aSeries.SetValue(series2,1);
            }
            catch (Exception ex)
            {
                CommonFunction.ShowMsgBox(ex.Message);
                series1.Points.Clear();
                series2.Points.Clear();
                return aSeries;
            }
            
            //series.ArgumentScaleType = ScaleType.DateTime;
             series1.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签
             series2.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签

            return aSeries;
        }

DevExpress官网柱状图示例

 

注:后台能查到数据,但是前台获取不到或者获取到其他列的数据,耐心地排查,可能是绑定时列表某个字段漏了、字段名错了

转载于:https://my.oschina.net/8824/blog/3098425

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值