Exemplo n.º 1
0
        //
        // GET: /Home/
        public ActionResult Index()
        {
            DbDataContext dt = new DbDataContext();

             //Fetching data from db:
            var voltageValues = dt.Values.Where(v => v.FieldName == "Voltage").OrderBy(v => v.Datetime).ToList<Value>();
            var currentValues = dt.Values.Where(v => v.FieldName == "Current").OrderBy(v => v.Datetime).ToList<Value>();

            Highcharts Chart = new Highcharts("Chart");
            // Initiizing chart
            // Making month and days persian, however it is not accurate at all!
            Chart.SetOptions(new GlobalOptions
            {
                Lang = new DotNet.Highcharts.Helpers.Lang
                {
                    Loading = "در حال بارگذاری",
                    Months = new string[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند" },
                    Weekdays = new string[] { "شنبه", "یک شنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه" },
                    ShortMonths = new string[] { "فرور", "اردی", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند" }
                }
            });
            Chart.InitChart(new Chart
                {
                    DefaultSeriesType = ChartTypes.Line,
                    MarginRight = 130,
                    MarginBottom = 55,
                    ClassName = "chart",
                    ZoomType = ZoomTypes.X
                })
            .SetTitle(new Title
                {
                    Text = "نمودار تغییرات داده ها "
                })
            .SetSubtitle(new Subtitle
                {
                    Text = "نمونه استفاده نمودار",
                    X = -20
                })
            .SetXAxis(new XAxis
                {
                    Type = AxisTypes.Datetime,
                    Title = new XAxisTitle
                    {
                        Text = "بازه زمانی از ... تا..."
                    },
                    MinorTickInterval = 3600 * 1000,
                    TickLength = 1,
                    MinRange = 3600 * 1000,
                    MinTickInterval = 3600 * 1000,
                    GridLineWidth = 1,
                    Labels = new XAxisLabels
                    {
                        Align = HorizontalAligns.Right,
                        Rotation = -30,
                    },
                    DateTimeLabelFormats = new DateTimeLabel
                    {
                        Second = "%H:%M:%S",
                        Minute = "%H:%M",
                        Hour = "%H:%M",
                        Day = "%e %b",
                        Week = "%e %b",
                        Month = "%b",
                        Year = "%Y",
                    },
                    ShowEmpty = false,

                })
                .SetLegend(new Legend
                {
                    Layout = Layouts.Vertical,
                    Align = HorizontalAligns.Left,
                    X = 20,
                    VerticalAlign = VerticalAligns.Top,
                    Y = 80,
                    BackgroundColor = new BackColorOrGradient(System.Drawing.ColorTranslator.FromHtml("#FFFFFF"))
                });

            YAxis[] yAxis = new YAxis[2];
            yAxis[0] = (new YAxis
            {
                Title = new YAxisTitle
                {
                    Text = string.Format("{0} ({1})", "Voltage", "V"),

                },
                Labels = new YAxisLabels
                {
                    //Align = HorizontalAligns.Right,
                    Formatter = "function() { return this.value; }",
                },
                Opposite = true,
                GridLineWidth = 0
            });
            yAxis[1] = (new YAxis
            {
                Title = new YAxisTitle
                {
                    Text = string.Format("{0} ({1})", "Current", "A"),

                },
                Labels = new YAxisLabels
                {
                    //Align = HorizontalAligns.Left,
                    Formatter = "function() { return this.value; }",
                },
                Opposite = false,
                GridLineWidth = 1
            });

            Chart.SetYAxis(yAxis);

            Series[] seriesOfData = new Series[2];

            object[,] x1 = new object[voltageValues.Count(), 2];
            for (int i = 0; i < voltageValues.Count(); i++)
            {

                x1[i, 0] = PersianDateTime.ParseFromDateTime(voltageValues[i].Datetime).ToString("Date.parse('MM/dd/yyyy HH:mm:ss')");
                x1[i, 1] = voltageValues[i].Value1;
            }

            DotNet.Highcharts.Helpers.Data data1 = new DotNet.Highcharts.Helpers.Data(x1);
            Series series1 = new Series
            {
                Name = "Voltage",
                Data = data1,
                Type = ChartTypes.Line,
            };
            series1.YAxis = "0";
            seriesOfData[0] = series1;

            object[,] x2 = new object[currentValues.Count(), 2];
            for (int i = 0; i < voltageValues.Count(); i++)
            {
                x2[i, 0] = PersianDateTime.ParseFromDateTime(voltageValues[i].Datetime).ToString("Date.parse('MM/dd/yyyy HH:mm:ss')");
                x2[i, 1] = currentValues[i].Value1;
            }
            DotNet.Highcharts.Helpers.Data data2 = new DotNet.Highcharts.Helpers.Data(x2);
            Series series2 = new Series
            {
                Name = "Current",
                Data = data2,
                Type = ChartTypes.Spline,
            };
            series1.YAxis = "1";
            seriesOfData[1] = series2;

            Chart.SetSeries(seriesOfData);
            ViewBag.Chart = Chart;

            return View();
        }