显示结果预览:
如上图:将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进行画图
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;
}
注:后台能查到数据,但是前台获取不到或者获取到其他列的数据,耐心地排查,可能是绑定时列表某个字段漏了、字段名错了