Ejemplo n.º 1
0
        public string LoadValues(string stSql, double[] x)
        {
            try
            {
                //обнуляем наш компонент
                foreach (var series in chart1.Series)
                {
                    Colorz.FreeColor(series.Color);
                }
                chart1.Series.Clear();
                //chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(0);
                //chart1.ChartAreas[0].AxisX.Interval = double.NaN;
                //chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(0);
                //chart1.ChartAreas[0].AxisY.Interval = double.NaN;
                if (x.Count() == 1)
                {
                    if (!checkBoxAutoScale.Checked)
                    {
                        checkBoxAutoScale.Checked = true;
                    }
                    else
                    {
                        ScaleToAuto();
                    }
                }

                if (stSql == "")
                {
                    stSql = _currentStSQL;
                }
                else
                {
                    _currentStSQL = stSql;
                }

                using (var reader = new RecDao(ConnectionString, stSql))
                {
                    Cursor = Cursors.WaitCursor;
                    while (reader.Read())
                    {
                        string substLegend = "";   //вормируется из таблицы и данного массива
                        string realLegend  = "";   //вормируется из таблицы
                        //считаем, что в x есть элемент хотя бы один (не имеющий смысла), т.к. пустой массив из аксеса плохо передается
                        for (int i = 1; i <= x.Count() - 1; i++)
                        {
                            realLegend  += reader.GetDouble("X" + (_dim - i + 1)) + "-";
                            substLegend += x[i] + "-";
                        }
                        for (int i = 3; i <= _dim - x.Count() + 1; i++)
                        {
                            realLegend  += reader.GetDouble("X" + i) + "-";
                            substLegend += reader.GetDouble("X" + i) + "-";
                        }
                        if (realLegend.Equals(substLegend))    //фильтр строк
                        {
                            if (substLegend.Length > 0)
                            {
                                substLegend = substLegend.Substring(0, substLegend.Length - 1);
                            }
                            //Сформировали легенду для конкретной точки. Дальше фасуем ее по сериям

                            bool chart1SeriesContainsLegend = false;
                            foreach (var se in chart1.Series)
                            {
                                if (se.Name == substLegend)
                                {
                                    chart1SeriesContainsLegend = true;
                                }
                            }
                            if (!chart1SeriesContainsLegend)
                            {
                                var s = new Series
                                {
                                    Name              = substLegend,
                                    BorderWidth       = 2,
                                    MarkerStyle       = MarkerStyle.Circle,
                                    MarkerSize        = 10,
                                    MarkerBorderColor = Color.WhiteSmoke
                                };
                                try
                                {
                                    s.Color = Colorz.GetColor();
                                }
                                catch (Exception ex)
                                {
                                    Error =
                                        new ErrorCommand(
                                            "Не удалось загрузить параметр. Превышено максимальное число параметров (80)",
                                            ex);
                                    return(ErrorMessage);
                                }
                                switch (_graphicType)
                                {
                                case GraphicType.Graphic:
                                    s.ChartType = SeriesChartType.Line;
                                    break;

                                case GraphicType.Graphic0:
                                    s.ChartType = SeriesChartType.StepLine;
                                    break;

                                case GraphicType.Diagram:
                                    s.ChartType = SeriesChartType.Point;
                                    break;
                                }
                                chart1.Series.Add(s);
                            }
                            if (substLegend == "")
                            {
                                substLegend = chart1.Series[0].Name;
                            }
                            chart1.Series[substLegend].Points.AddXY(reader.GetDouble("X2"), reader.GetDouble("X1"));
                        }
                    }
                    Cursor = Cursors.Default;
                }
                //chart1.Refresh();
                //if (!checkBoxAutoScale.Checked) checkBoxAutoScale.Checked = true;
                //else ScaleToAuto();
                return("");
            }
            catch (Exception e)
            {
                Cursor = Cursors.Default;
                Error  = new ErrorCommand("Проблема с загрузкой значений в параметр (LoadValues)", e);
                //MessageBox.Show(e.Message + "\n===\n" + e.StackTrace);
                return(ErrorMessage);
            }
            //throw new Exception();
            //return "";
        }
Ejemplo n.º 2
0
 //Чтение значений
 public override void GetValues()
 {
     try
     {
         DateTime beg = BeginRead.AddMinutes(-BeginRead.Minute).AddSeconds(-BeginRead.Second - 1);
         DateTime en  = EndRead.AddSeconds(1);
         using (var db = new DaoDb(_db))
         {
             foreach (var tableName in _objects.Keys)
             {
                 Logger.AddEvent("Чтение значений из таблицы " + tableName + "_ARCHIVE");
                 using (var rec = new RecDao(db, "SELECT * FROM " + tableName + "_ARCHIVE " +
                                             "WHERE (TYPE = 0) AND (Время >= " + beg.ToAccessString() + ") AND (Время <= " + en.ToAccessString() + ")"))
                     while (rec.Read())
                     {
                         int id = rec.GetInt("PARENT_ID");
                         if (_objectsId.ContainsKey(id))
                         {
                             var ob = _objectsId[id];
                             foreach (var sigCode in ob.Signals.Keys)
                             {
                                 ob.Signals[sigCode].AddMoment(rec.GetTime("Время"), rec.GetDouble(sigCode));
                             }
                         }
                     }
             }
             foreach (var tableName in _totals.Keys)
             {
                 Logger.AddEvent("Чтение значений из таблицы " + tableName + "_TOTALS");
                 using (var rec = new RecDao(db, "SELECT * FROM " + tableName + "_TOTALS " +
                                             "WHERE (Время >= " + beg.ToAccessString() + ") AND (Время <= " + en.ToAccessString() + ")"))
                     while (rec.Read())
                     {
                         int id = rec.GetInt("PARENT_ID");
                         if (_totalsId.ContainsKey(id))
                         {
                             var ob = _totalsId[id];
                             foreach (var sigCode in ob.Signals.Keys)
                             {
                                 ob.Signals[sigCode].AddMoment(rec.GetTime("Время"), rec.GetDouble(sigCode));
                             }
                         }
                     }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.AddError("Ошибка при чтении данных из файла программы Пролог", ex);
     }
 }