private void ChartInit() { //#region Title //ChartTitle chartTitle = new ChartTitle(); ////标题内容 //chartTitle.Text = "大盘5分钟走势预测"; ////字体颜色 //chartTitle.TextColor = Color.White; ////字体类型字号 //chartTitle.Font = new Font("新宋体", 11, FontStyle.Bold); ////标题对齐方式 //chartTitle.Dock = ChartTitleDockStyle.Top; //chartTitle.Alignment = StringAlignment.Near; //chartControl1.Titles.Clear(); //chartControl1.Titles.Add(chartTitle); //#endregion #region Series _seCurrent = new Series(DateTime.Now.ToShortDateString(), ViewType.Line); _seCurrent.ArgumentScaleType = ScaleType.Qualitative; _seCurrent.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.False; LineSeriesView myView1 = (LineSeriesView)_seCurrent.View; myView1.Color = Color.DeepSkyBlue; _seCorrected = new Series("当日修正值", ViewType.Spline); _seCorrected.ArgumentScaleType = ScaleType.Qualitative; _seCorrected.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.False; SplineSeriesView myView2 = (SplineSeriesView)_seCorrected.View; myView2.Color = Color.OrangeRed; this.chartControl1.Series.Add(_seCurrent); this.chartControl1.Series.Add(_seCorrected); #endregion Series #region XYDiagram XYDiagram myDiagram = chartControl1.Diagram as XYDiagram; #endregion XYDiagram #region AxisX AxisX myAxisX = myDiagram.AxisX; myAxisX.Label.Font = new Font("Tahoma ", 8, FontStyle.Bold); myAxisX.Label.Staggered = false; myAxisX.Label.Angle = -90; myAxisX.Label.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True; myAxisX.Tickmarks.MinorVisible = false; myAxisX.WholeRange.Auto = true; myAxisX.WholeRange.AutoSideMargins = true; #endregion AxisX #region AxisY AxisY myAxisY = myDiagram.AxisY; myAxisY.Label.Font = new Font("Tahoma ", 8, FontStyle.Bold); myAxisY.Label.TextPattern = "{ V:F2}"; //myAxisY.GridLines.Color = Color.FromArgb(165, 42, 42); //myAxisY.GridLines.LineStyle.Thickness = 1; //myAxisY.GridLines.LineStyle.DashStyle = DevExpress.XtraCharts.DashStyle.Dot; myAxisY.Tickmarks.MinorVisible = false; myAxisY.WholeRange.Auto = true; #endregion AxisY }
private void BindChart() { ConnDB conn = new ConnDB(); string strsql, strsql2, month; int deptid; deptid = (int)comboBoxDept.SelectedValue; List <Series> myseries = new List <Series>(); month = dateTimePicker1.Text.ToString(); if (deptid == 0) { strsql = "select SALE_TYPE_NAME 营业类型,dept_name 部门,Cdate 日期,DIRECT_HOURS 直接人工小时数,cast(round(DIRECT_COST,2) as decimal(18,2)) 直接人工成本,INDIRECT_HOURS 间接人工小时数,cast(round(INDIRECT_COST,2) as decimal(18,2)) 间接人工成本,cast(round(POINTCOUNT,2) as decimal(18,2)) 点数,cast(round(COST,2) as decimal(18,2)) 预估成本,COST_POINT 预估单点成本,STANDARD_POINT 标准单点成本,cast(round(isnull(STANDARD_COST,0),2) as decimal(18,2)) 标准成本,cast(round(PROFIT,2) as decimal(18,2)) 盈亏 from COST_DEPT_CALCULATE where cdate like '" + month + "%' and sale_type_id =2"; strsql2 = "select distinct dept_name 部门 from COST_DEPT_CALCULATE where cdate like '" + month + "%' and sale_type_id =2"; } else { strsql = "select SALE_TYPE_NAME 营业类型,dept_name 部门,Cdate 日期,DIRECT_HOURS 直接人工小时数,cast(round(DIRECT_COST,2) as decimal(18,2)) 直接人工成本,INDIRECT_HOURS 间接人工小时数,cast(round(INDIRECT_COST,2) as decimal(18,2)) 间接人工成本,cast(round(POINTCOUNT,2) as decimal(18,2)) 点数,cast(round(COST,2) as decimal(18,2)) 预估成本,COST_POINT 预估单点成本,STANDARD_POINT 标准单点成本,cast(round(isnull(STANDARD_COST,0),2) as decimal(18,2)) 标准成本,cast(round(PROFIT,2) as decimal(18,2)) 盈亏 from COST_DEPT_CALCULATE where cdate like '" + month + "%' and sale_type_id =2 and dept_id =" + deptid; strsql2 = "select distinct dept_name 部门 from COST_DEPT_CALCULATE where cdate like '" + month + "%' and sale_type_id =2 and dept_id = " + deptid; } DataSet ds = conn.ReturnDataSet(strsql); DataTable dt = ds.Tables[0]; DataSet ds2 = conn.ReturnDataSet(strsql2); XYDiagram dg = (XYDiagram)chartControlDeptDay.Diagram; if (dg != null) { dg.Panes.Clear(); } chartControlDeptDay.Series.Clear(); chartControlDeptDay.Annotations.Clear(); chartControlDeptDay.DataSource = dt; for (int i = 0; i < ds2.Tables[0].Rows.Count; i++) { //预估成本 myseries.Add(new Series(ds2.Tables[0].Rows[i][0].ToString() + "预估成本", DevExpress.XtraCharts.ViewType.Spline)); myseries[i * 2].ArgumentDataMember = dt.Columns["日期"].ToString(); myseries[i * 2].ValueDataMembersSerializable = dt.Columns["预估成本"].ToString(); chartControlDeptDay.Series.Add(myseries[i * 2]); //标准成本 myseries.Add(new Series(ds2.Tables[0].Rows[i][0].ToString() + "标准成本", DevExpress.XtraCharts.ViewType.Spline)); myseries[i * 2 + 1].ArgumentDataMember = dt.Columns["日期"].ToString(); myseries[i * 2 + 1].ValueDataMembersSerializable = dt.Columns["标准成本"].ToString(); chartControlDeptDay.Series.Add(myseries[i * 2 + 1]); //设置过滤 DataFilter df = new DataFilter("部门", "System.String", DataFilterCondition.Equal, ds2.Tables[0].Rows[i][0].ToString()); //series1.DataFiltersConjunctionMode = ConjunctionTypes.Or; myseries[i * 2].DataFilters.Clear(); myseries[i * 2].DataFilters.AddRange(new DataFilter[] { df }); myseries[i * 2 + 1].DataFilters.Clear(); myseries[i * 2 + 1].DataFilters.AddRange(new DataFilter[] { df }); //设置pane XYDiagram diagram = (XYDiagram)chartControlDeptDay.Diagram; if (i > 0) { //// Add secondary axes to the diagram, and adjust their options. //diagram.SecondaryAxesX.Add(new SecondaryAxisX(Convert.ToString(i - 1))); //diagram.SecondaryAxesY.Add(new SecondaryAxisY(Convert.ToString(i - 1))); //diagram.SecondaryAxesX[i - 1].Alignment = AxisAlignment.Near; //diagram.SecondaryAxesY[i - 1].Alignment = AxisAlignment.Near; //diagram.Panes[ds2.Tables[0].Rows[i][0].ToString()] diagram.Panes.Add(new XYDiagramPane(ds2.Tables[0].Rows[i][0].ToString())); SplineSeriesView myView1 = (SplineSeriesView)myseries[i * 2].View; //myView1.AxisX = diagram.SecondaryAxesX[i - 1]; //myView1.AxisY = diagram.SecondaryAxesY[i - 1]; myView1.Pane = diagram.Panes[i - 1]; SplineSeriesView myView2 = (SplineSeriesView)myseries[i * 2 + 1].View; //myView2.AxisX = diagram.SecondaryAxesX[i - 1]; //myView2.AxisY = diagram.SecondaryAxesY[i - 1]; myView2.Pane = diagram.Panes[i - 1]; chartControlDeptDay.Annotations.AddTextAnnotation(Convert.ToString(i)); XYDiagramPaneBase myPane = diagram.Panes[i - 1]; ((FreePosition)chartControlDeptDay.Annotations[i].ShapePosition).DockTarget = diagram.Panes[i - 1]; ((FreePosition)chartControlDeptDay.Annotations[i].ShapePosition).DockCorner = DockCorner.LeftTop; TextAnnotation myTextAnnotation = (TextAnnotation)chartControlDeptDay.AnnotationRepository.GetElementByName(Convert.ToString(i)); //myTextAnnotation.Text = "<color=red>" + ds2.Tables[0].Rows[i][0].ToString() + " </color>"; myTextAnnotation.Text = ds2.Tables[0].Rows[i][0].ToString(); myTextAnnotation.ShapeKind = ShapeKind.Rectangle; myTextAnnotation.ConnectorStyle = AnnotationConnectorStyle.None; } else { chartControlDeptDay.Annotations.AddTextAnnotation("Annotation 0"); XYDiagramPaneBase myPane = diagram.DefaultPane; ((FreePosition)chartControlDeptDay.Annotations[i].ShapePosition).DockTarget = myPane; ((FreePosition)chartControlDeptDay.Annotations[i].ShapePosition).DockCorner = DockCorner.LeftTop; TextAnnotation myTextAnnotation = (TextAnnotation)chartControlDeptDay.AnnotationRepository.GetElementByName("Annotation 0"); //myTextAnnotation.Text = "<color=red>" + ds2.Tables[0].Rows[i][0].ToString() + " </color>"; myTextAnnotation.Text = ds2.Tables[0].Rows[i][0].ToString(); myTextAnnotation.ShapeKind = ShapeKind.Rectangle; myTextAnnotation.ConnectorStyle = AnnotationConnectorStyle.None; } ((SplineSeriesView)myseries[i * 2].View).MarkerVisibility = DefaultBoolean.True; ((SplineSeriesView)myseries[i * 2 + 1].View).MarkerVisibility = DefaultBoolean.True; ((SplineSeriesView)myseries[i * 2].View).Color = Color.Orange; ((SplineSeriesView)myseries[i * 2 + 1].View).Color = Color.OliveDrab; ((FreePosition)chartControlDeptDay.Annotations[i].ShapePosition).InnerIndents.All = 0; ((FreePosition)chartControlDeptDay.Annotations[i].ShapePosition).OuterIndents.Top = 10; diagram.PaneDistance = 10; diagram.PaneLayoutDirection = PaneLayoutDirection.Vertical; diagram.DefaultPane.SizeMode = PaneSizeMode.UseWeight; diagram.DefaultPane.Weight = 1.2; } //外观 chartControlDeptDay.Legend.Visibility = DefaultBoolean.True; chartControlDeptDay.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Center; chartControlDeptDay.Legend.AlignmentVertical = LegendAlignmentVertical.TopOutside; chartControlDeptDay.Legend.Direction = LegendDirection.LeftToRight; conn.Close(); }
private void ExTrade() { #region Экспоненциальная регрессия Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.WorksheetFunction wsf = xl.WorksheetFunction; Series series3 = new Series("Экспоненциальный тренд", ViewType.Spline); chartControl1.Series.Add(series3); series3.ArgumentScaleType = ScaleType.Numerical; series3.ValueScaleType = ScaleType.Numerical; int ch = 0; int ch1 = 0; int ch2 = 0; int ch3 = 1; double x1 = 0; int count = dataGridView1.RowCount; double[] x = new double[count]; double[] y = new double[count]; double[] yY = new double[count]; for (int k = 0; k < count; k++) { x[k] = Convert.ToDouble(dataGridView1.Rows[k].Cells[3].Value); y[k] = Convert.ToDouble(dataGridView1.Rows[k].Cells[2].Value); ch++; } for (int k = 0; k < count; k++) { object[,] lin1 = wsf.LogEst(y, x, 1, 1); double b = Convert.ToDouble(lin1[1, 2]); double m = Convert.ToDouble(lin1[1, 1]); double bb = Math.Round(b, 3); double mm = Convert.ToDouble(Math.Round(Math.Log(m), 4)); x1 = Convert.ToDouble(dataGridView1.Rows[k].Cells[3].Value); yY[k] = Math.Round(bb * Math.Exp(x1 * mm), 2); ch3++; } for (int k = 0; k < yY.Length; k++) { ch2++; series3.Points.Add(new SeriesPoint(ch2, yY[k])); } TrendLine trendline1 = new TrendLine("Экспоненциальный тренд"); SplineSeriesView myView = ((SplineSeriesView)series3.View); trendline1.ExtrapolateToInfinity = false; trendline1.ShowInLegend = false; trendline1.Visible = false; trendline1.Color = Color.Red; trendline1.LineStyle.DashStyle = DashStyle.Dash; myView.Indicators.Add(trendline1); try { object[,] lin1 = wsf.LogEst(y, x, 1, 1); double b = Convert.ToDouble(lin1[1, 2]); double m = Convert.ToDouble(lin1[1, 1]); double bb = Math.Round(b, 3); double mm = Convert.ToDouble(Math.Round(Math.Log(m), 4)); double yY1 = Math.Round(bb * Math.Exp(mm * (ch + 1)), 2); textBox2.Text = yY1.ToString(); chartControl1.Series[1].Points.Add(new SeriesPoint((ch + 1), yY1)); } catch (Exception ex) { MessageBox.Show(ex.Message, "ФАНЗ"); return; } for (int jk = 0; jk < x.Length; jk++) { ch1++; chartControl1.Series[0].Points.Add(new SeriesPoint(ch1, Convert.ToDouble(dataGridView1[2, jk].Value))); } #endregion }