private void btnExport_Click(object sender, EventArgs e)
 {
     saveFileDia.Title  = @"请选择文件的保存位置";
     saveFileDia.Filter = "Excel 97-2003 工作簿|*.xls";//Excel 工作簿|*.xlsx|
     try
     {
         string sheetName  = StationId;
         string columnName = DataEnum2Titles.ToTitles(DataName);
         saveFileDia.FileName = $@"{StationId}雷达{columnName}电源数据";
         if (saveFileDia.ShowDialog() == DialogResult.OK)
         {
             Export2Excel.ExportToExcel(_powerData, columnName, sheetName, saveFileDia.FileName);
             MessageBox.Show($@"保存Excel文件{saveFileDia.FileName}成功!", @"提示", MessageBoxButtons.OK,
                             MessageBoxIcon.Information);
         }
     }
     catch (Exception exception)
     {
         CommonLogHelper.GetInstance("LogError").Error(@"实时数据查询窗口导出数据Excel过程出错", exception);
         MessageBox.Show(@"保存Excel文件过程出错," + exception.Message, @"错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
        private void btnQuery_Click(object sender, EventArgs e)
        {
            Thread drawDataLineProThread = new Thread((ThreadStart) delegate
            {
                try
                {
                    _synchContext.Post(a =>
                    {
                        gbControl.Enabled          = false;
                        stationchkListBox.Enabled  = false;
                        powerchkListBox.Enabled    = false;
                        circularProgress.IsRunning = true;
                        circularProgress.Visible   = true;
                    }, null);
                    _powerDataDics.Clear();
                    _sheetNameList.Clear();
                    List <string> stationsList = new List <string>();
                    for (int i = 1; i < stationchkListBox.Items.Count; i++)
                    {
                        if (stationchkListBox.GetItemChecked(i))
                        {
                            stationsList.Add(stationchkListBox.GetItemText(stationchkListBox.Items[i]));
                        }
                    }
                    string conn =
                        $"Data Source={_para.SqlServerPara.SqlIp};Initial Catalog={_para.SqlServerPara.SqlDb};User ID={_para.SqlServerPara.SqlUser};Password={_para.SqlServerPara.SqlPwd};";
                    DateTime sdt = dtpStartTime.Value;
                    DateTime edt = dtpEndTime.Value;
                    RadarDataClassesDataContext radarDataClasses = new RadarDataClassesDataContext(conn);
                    List <string> powerList = new List <string>();
                    for (int i = 1; i < powerchkListBox.Items.Count; i++)
                    {
                        if (powerchkListBox.GetItemChecked(i))
                        {
                            powerList.Add(powerchkListBox.GetItemText(powerchkListBox.Items[i]));
                        }
                    }

                    for (int i = 0; i < powerList.Count; i++)
                    {
                        powerList[i] = DataEnum2Titles.ToProperties(powerList[i]);
                    }

                    _synchContext.Post(a =>
                    {
                        chartVolCur.Titles.Clear();
                        chartVolCur.Titles.Add("电源数据曲线图");
                        chartVolCur.Titles.Add(
                            $"({sdt.ToString(CultureInfo.InvariantCulture)}——{edt.ToString(CultureInfo.InvariantCulture)})");
                        chartVolCur.ChartAreas.Clear();
                        chartVolCur.Series.Clear();
                        chartVolCur.Legends.Clear();
                        ChartArea ca = new ChartArea("Default");
                        chartVolCur.ChartAreas.Add(ca);
                        chartVolCur.ChartAreas[0].AxisX.IsMarginVisible    = true;
                        chartVolCur.ChartAreas[0].AxisX.Interval           = 1;
                        chartVolCur.ChartAreas[0].AxisX.MajorGrid.Interval = 1;

                        //chartVolCur.Legends["Legend2"].DockedToChartArea = "Default";

                        foreach (var stationid in stationsList)
                        {
                            Dictionary <string, List <string> > powerDataDic = new Dictionary <string, List <string> >();

                            List <string> columnName = new List <string>();

                            chartVolCur.Legends.Add(new Legend(stationid)
                            {
                                Title = stationid, Docking = Docking.Bottom
                            });
                            foreach (var powerName in powerList)
                            {
                                //chartVolCur.Legends["Legend2"].CellColumns.Add(new LegendCellColumn("Name", LegendCellColumnType.Text, stationid));
                                // Assign the legend to Series1.

                                Series s = new Series(stationid + "_" + powerName)
                                {
                                    MarkerSize          = 10,
                                    MarkerStyle         = MarkerStyle.Star10,
                                    ChartType           = SeriesChartType.Line,
                                    IsValueShownAsLabel = true,
                                    BorderWidth         = 3,
                                    ShadowOffset        = 1,
                                    Legend            = stationid,
                                    LegendText        = DataEnum2Titles.ToTitles(powerName),
                                    IsVisibleInLegend = true,
                                    Font = new Font("Microsoft Sans Serif", 8F, FontStyle.Bold),
                                };
                                var allpowerdata = (from vol in radarDataClasses.PowerDataTable
                                                    where stationsList.Contains(vol.StationID) &&
                                                    vol.DateTime >= sdt && vol.DateTime <= edt
                                                    orderby vol.DateTime ascending
                                                    select vol).ToList();
                                for (int i = 0; i <= (edt - sdt).TotalMinutes; i++)
                                {
                                    DateTime dt             = sdt.AddMinutes(i);
                                    List <string> powerdata = new List <string>();
                                    if (!powerDataDic.ContainsKey(dt.ToString(CultureInfo.InvariantCulture)))
                                    {
                                        powerDataDic.Add(dt.ToString(CultureInfo.InvariantCulture), powerdata);
                                    }
                                    var pd = (from v in allpowerdata
                                              where v.DateTime == dt && v.StationID == stationid
                                              select v).Distinct().ToList();
                                    if (pd.Count > 0)
                                    {
                                        object obj = (typeof(PowerDataTable)).GetProperty(powerName).GetValue(pd[0], null);
                                        s.Points.AddXY(dt.ToString("HH:mm"), obj);
                                        powerDataDic[dt.ToString(CultureInfo.InvariantCulture)].Add(obj.ToString());
                                    }
                                    else
                                    {
                                        s.Points.AddXY(dt.ToString("HH:mm"), DBNull.Value);
                                        powerDataDic[dt.ToString(CultureInfo.InvariantCulture)].Add(string.Empty);
                                    }
                                }
                                chartVolCur.Series.Add(s);

                                columnName.Add(DataEnum2Titles.ToTitles(powerName));
                            }

                            _powerDataDics.Add(stationid, powerDataDic);
                            _sheetNameList.Add(stationid, columnName);
                        }
                    }, null);
                }
                catch (Exception exception)
                {
                    CommonLogHelper.GetInstance("LogError").Error(@"数据查询并绘制曲线过程出错", exception);
                    _synchContext.Post(a =>
                                       MessageBox.Show(this, @"绘制复杂曲线过程错误," + exception.Message, @"错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
                                       , null);
                }
                finally
                {
                    _synchContext.Post(a =>
                    {
                        gbControl.Enabled          = true;
                        stationchkListBox.Enabled  = true;
                        powerchkListBox.Enabled    = true;
                        circularProgress.IsRunning = false;
                        circularProgress.Visible   = false;
                    }, null);
                }
            })
            {
                IsBackground = true
            };

            drawDataLineProThread.Start();
        }
        private void DrawNowDataLine()
        {
            Thread drawDataLineThread = new Thread((ThreadStart) delegate
            {
                try
                {
                    _synchContext.Post(a =>
                    {
                        gbControl.Enabled          = false;
                        circularProgress.IsRunning = true;
                        circularProgress.Visible   = true;
                    }, null);
                    _powerData.Clear();
                    DateTime sdt = dtpStartTime.Value;
                    DateTime edt = dtpEndTime.Value;
                    RadarDataClassesDataContext radarDataClasses = new RadarDataClassesDataContext(ConnectionString);
                    _synchContext.Post(a =>
                    {
                        chartVolCur.Titles.Clear();
                        chartVolCur.Titles.Add(DataEnum2Titles.ToTitles(DataName));
                        chartVolCur.Titles.Add(
                            $"({sdt.ToString(CultureInfo.InvariantCulture)}——{edt.ToString(CultureInfo.InvariantCulture)})");
                        chartVolCur.ChartAreas.Clear();
                        chartVolCur.Series.Clear();
                        ChartArea ca = new ChartArea("CA1");
                        chartVolCur.ChartAreas.Add(ca);
                        Series s = new Series("S1")
                        {
                            ChartType           = SeriesChartType.Line,
                            IsValueShownAsLabel = true,
                            BorderWidth         = 3,
                            ShadowOffset        = 1
                        };
                        chartVolCur.ChartAreas[0].AxisX.IsMarginVisible    = true;
                        chartVolCur.ChartAreas[0].AxisX.Interval           = 1;
                        chartVolCur.ChartAreas[0].AxisX.MajorGrid.Interval = 1;
                        try
                        {
                            var powerdata = (from p in radarDataClasses.PowerDataTable
                                             where p.StationID == StationId &&
                                             p.DateTime >= sdt && p.DateTime <= edt
                                             orderby p.DateTime ascending
                                             select p).ToList();
                            for (int i = 0; i <= (edt - sdt).TotalMinutes; i++)
                            {
                                DateTime dt = sdt.AddMinutes(i);
                                var pd      = (from v in powerdata
                                               where v.DateTime == dt
                                               select v).Distinct().ToList();
                                if (pd.Count > 0)
                                {
                                    object obj = typeof(PowerDataTable).GetProperty(DataName).GetValue(pd[0], null);
                                    s.Points.AddXY(dt.ToString("HH:mm"), obj);
                                    _powerData.Add(dt.ToString(CultureInfo.InvariantCulture), obj.ToString());
                                }
                                else
                                {
                                    s.Points.AddXY(dt.ToString("HH:mm"), DBNull.Value);
                                    _powerData.Add(dt.ToString(CultureInfo.InvariantCulture), string.Empty);
                                }
                            }
                            chartVolCur.Series.Add(s);
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }, null);
                }
                catch (Exception exception)
                {
                    CommonLogHelper.GetInstance("LogError").Error(@"实时数据查询并绘制曲线过程出错", exception);
                    _synchContext.Post(a =>
                                       MessageBox.Show(this, @"绘制当前曲线过程错误," + exception.Message, @"错误", MessageBoxButtons.OK,
                                                       MessageBoxIcon.Error)
                                       , null);
                }
                finally
                {
                    _synchContext.Post(a =>
                    {
                        gbControl.Enabled          = true;
                        circularProgress.IsRunning = false;
                        circularProgress.Visible   = false;
                    }, null);
                }
            })
            {
                IsBackground = true
            };

            drawDataLineThread.Start();
        }