Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 23205|Svar: 6

[ASP.NET] Highcharts kombinerar Asp.net för att realisera dynamiska exempel på bildskärm av datastocksgrafer

[Kopiera länk]
Publicerad på 2015-06-28 00:06:24 | | | |

Den specifika applikationsmarknaden för detta exempel är att jag regelbundet måste läsa priset på en råvara från databasen och sedan visa det på webbsidan som en graf, liknande pristrenddiagrammet för handelsinstrument i aktier.

Jag använder asp.net, kombinerat med Highcharts plugin-implementation i jQuery, pluginet kan stödja många typer av grafik, men de är statiska och exemplen måste transformeras, intresserade vänner kan gå till Highcharts officiella webbplats för att se (http://www.highcharts.com/), som erbjuder många demos, ärligt talat, för att uppfylla mina behov borde jag använda Highstock, Men efter att ha tittat på exemplet med dynamisk uppdatering i Highcharts kan jag också inse att mitt kravgränssnitt är mer koncist, så den här artikeln använder den dynamiska uppdateringsmodellen i Highcharts, och grafiktypen är spline. Den slutliga effektkartan är som följer (priset på Pinqijin uppdateras var tionde sekund och en punkt läggs till linjegrafen var tionde sekund):

Uppnå stegsamling:

Skapa en ny webbplats med VS och skapa en asp.net sida DynamicUpdate.aspx, sidkoden är följande:


  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicUpdate.aspx.cs"
  2.     Inherits="WebImg.DynamicUpdate" %>

  3. <!DOCTYPE HTML>
  4. <html>
  5. <head>
  6.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7.     <title>动态显示价格图例</title>
  8.     <scrip去掉t type="text/javascrip去掉t" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></scrip去掉t>
  9.     <scrip去掉t type="text/javascrip去掉t">
  10.    $(function () {
  11.        $(document).ready(function () {
  12.            Highcharts.setOptions({
  13.                global: {
  14.                    useUTC: false
  15.                }
  16.            });
  17.            var chart;
  18.            chart = new Highcharts.Chart({
  19.                chart: {
  20.                    renderTo: 'container',
  21.                    type: 'spline',
  22.                    marginRight: 10,
  23.                    events: {
  24.                    load: function () {
  25.                    // set up the updating of the chart each second
  26.                    var series = this.series[0];
  27.                    setInterval(function () {
  28.                                   var randomCode = parseInt(Math.random() * 10000);
  29.                                   var oldrandomCode = parseInt(Math.random() * 10000);
  30.                                   $.ajax({
  31.                                     url: "ajaxhandler/dataupdate.ashx?" + randomCode + "=" + oldrandomCode + "&flag=1",
  32.                                     type: "get",
  33.                                     dataType: "json",
  34.                                     success: function (data, textStatus, XMLHttpRequest) {
  35.                                         var ctime = new Date();
  36.                                         ctime.setTime(parseInt(data.rows[0].times));
  37.                                         var x = ctime.getTime(), // current time
  38.                                         y = data.rows[0].price * 200;
  39.                                         series.addPoint([x, y], true, true);
  40.                                     },
  41.                                     error: function () { }
  42.                                    });
  43.                    }, 10000);
  44.                    }
  45.                }
  46.            },
  47.            title: {
  48.                text: '品旗撮合交易市场品种行情'
  49.            },
  50.            xAxis: {
  51.                         title: {
  52.                                 text: '时间'
  53.                             },
  54.                type: 'datetime',
  55.                tickPixelInterval: 150,
  56.                         labels:{formatter:function(){
  57.                             var vDate = new Date(this.value);
  58.                             return vDate.getHours()+":"+vDate.getMinutes()+":"+vDate.getSeconds();
  59.                         }}
  60.            },
  61.            yAxis: {
  62.                title: {
  63.                    text: '价格'
  64.                },
  65.                plotLines: [{
  66.                    value: 0,
  67.                    width: 1,
  68.                    color: '#808080'
  69.                }]
  70.            },
  71.            tooltip: {
  72.                formatter: function () {
  73.                    return '<b>' + this.series.name + '</b><br/>' +
  74.                         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
  75.                         Highcharts.numberFormat(this.y, 2);
  76.                }
  77.            },
  78.            legend: {
  79.                enabled: false
  80.            },
  81.            exporting: {
  82.                enabled: false
  83.            },
  84.                     credits:{
  85.                         text:'品旗金属交易市场',
  86.                         url:'http://www.inv6.com'
  87.                     },
  88.            series: [{
  89.                name: '品旗金(GOLD)',
  90.                data: (function () {
  91.                    var data = [],
  92.                             i;
  93.                             var jsonData = <%= jsonstr %>;
  94.                    for (i = -19; i <= 0; i++) {
  95.                                 var ctime = new Date();
  96.                                 ctime.setTime(parseInt(jsonData.rows[i+19].time1));
  97.                        data.push({
  98.                             x: ctime.getTime(),
  99.                                      y: jsonData.rows[i + 19].price * 200
  100.                        });
  101.                    }
  102.                    return data;
  103.                })()
  104.            }]
  105.        });
  106.    });
  107. });
  108.     </scrip去掉t>
  109. </head>
  110. <body>
  111.     <scrip去掉t src="http://code.highcharts.com/highcharts.js"></scrip去掉t>
  112.     <scrip去掉t src="http://code.highcharts.com/modules/exporting.js"></scrip去掉t>
  113.     <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto">
  114.     </div>
  115. </body>
  116. </html>
Kopiera koden

Highcharts-egenskapen renderTo indikerar displaybehållare,

händelser representerar den händelse som containern behöver registrera, där load betyder att den sker efter att laddningen är klar, här sätts en js-timer i loaden, som sker var tionde sekund, och koden i den är att begära den senaste GOLD från dataupdate.ashx-filen i ajaxhandler-mappen i samma rotkatalog som DynamicUpdate.aspx-sidan via ajax i jQuery Prisdata för varianten, här är varför jag lägger till randomCode + "=" + oldrandomCode i ajax-URL:en eftersom tillägg av ett slumpnummer kan undvika caching, och flag=1 är för att min dataupdate.ashx-fil vill acceptera flera förfrågningar från olika ajax, så använd flagga för att skilja den åt

xAxis representerar samlingen av attribut som definierats för x-axeln i containern, type representerar den visade texttypen, valfritt, här fyller jag i tidstypen, notera att standarden för instansen är GMT-tid, du kan också använda UTC-tid, men vi använder vanligtvis Beijing-tid (GMT eller UTC) + 8 timmar = Beijing-tid, så när vi använder ajax för att få tiden är Beijing-tid bör vi dra av 8 timmar från timmen (här vill jag också dela en upplevelse, Hur man konverterar servertid till js-tid som kan användas med .getTime()-metoden, det vill säga subtrahera servertiden från 1970-1-1, konvertera de återstående dagarna till millisekunder och sedan tilldela ett värde till den nyinitierade tiden via setTime-metoden i js, jag fann att resultatet som getTime() erhåller är felaktigt för att initialisera en js-tid direkt i js i form av nytt datum (år, månad, dag, timme, minut, sekund, millisekund) med getTime(), När det gäller varför 1970-1-1 subtraheras beror det på att definitionen av getTime()-metoden är att få antalet millisekunder från den aktuella tiden från 1970-1-1), när x-axeln inte visas som en tid eller du behöver definiera den själv, kan den också definieras av attributet categories, tickPixelInterval representerar tätheten av x-axeln, och labels används för att formatera visningsformatet för x-axeln

yAxis representerar en samling attribut definierade för y-axeln i containern, vilket ungefär är samma som attributen för x-axeln, men i Highcharts är det inte möjligt att definiera det fasta värdet av y-axeln genom kategorier, y-axeln för Highcharts genereras automatiskt baserat på den givna koordinatpunktdatan, vilket beror på dataunderattributet för serieattributet, till exempel när du tilldelar ett värde till data. Maxvärdet är 300 och minimivärdet är 100. Då kommer displayen för y-axeln att ligga mellan 100 och 300, eller så kan du också ställa in max- eller min-attributet för yAxis

serie representerar samlingen av alla kurvor som visas i behållaren, här visar jag bara en kurva, namnet representerar namnet på kurvan, data representerar insamlingen av en serie koordinatpunkter på kurvan, x är fram, y bakom, det är en js-array, i detta fall eftersom x-axeln visar tid, så x-egenskapen för arrayobjektet måste sättas till tid, men i Highcharts tilldelas inte tid direkt till x-axeln, Istället tilldelas antalet millisekunder mellan 1970-1-1 och en viss tid x-axeln för att representera denna tid, så getTime()-metoden måste användas, formen på y-axelns koordinatpunkt måste vara y = litet tal * heltalsform, och jag förstod inte varför Highcharts var tvungen att göra detta, eftersom prisdatan för varieteten i detta exempel generellt är ungefär densamma, så jag var tvungen att dividera med 200 när jag fick data, och sedan multiplicera med 200 när jag tilldelade ett värde till y-axeln.


<%= jsonstr %> i sidkoden finns den initiala datan jag behöver hämta från servern för att initiera grafen, alltså CS-genereringen av sidan


  1. public string jsonstr = "";
  2.         protected void Page_Load(object sender, EventArgs e)
  3.         {
  4.             getData();
  5.         }
  6.         private void getData()
  7.         {
  8.             DataTable dtPrice = SQLDBHelper.ExecuteTable("select top 20 TMPCode,TMPTime,TMPPrice from TabMerPrice with(nolock) order by TMPTime desc");
  9.             string json = "{"rows":[";
  10.             for (int i = (dtPrice.Rows.Count-1); i >= 0; i--)
  11.             {
  12.                 json += "{"time1":"" + (Convert.ToDateTime(dtPrice.Rows[i]["TMPTime"]).AddHours(-8) - new DateTime(1970, 1, 1)).TotalMilliseconds + "","price":"" + (Convert.ToDecimal(dtPrice.Rows[i]["TMPPrice"])/200) + ""},";
  13.             }
  14.             json = json.TrimEnd(',');
  15.             json += "]}";
  16.             jsonstr = json;
  17.         }
Kopiera koden

Bland dem är TabMerPrice-tabellen en tabell för variationsprisinformation, TMPTime-tid, TMPPrice-pris, TMPTime-tidsintervall är tio sekunder, jag använder ett databasjobb för att generera tabellen som sker var tionde sekund

AddHours(-8) är för att konvertera tiden till Beijing-tid, och det genererade dataformatet är json-format

Dataupdate.ashx-koden ser ut så här:


  1. public void ProcessRequest(HttpContext context)
  2.         {
  3.             string flag = context.Request.QueryString["flag"].ToString();
  4.             switch (flag)
  5.             {
  6.                 case "1"://获取品种当前价格
  7.                     GetMerPrice(context);
  8.                     break;
  9.             }
  10.         }
  11.         private void GetMerPrice(HttpContext context)
  12.         {
  13.             context.Response.Clear();
  14.             context.Response.Buffer = true;
  15.             context.Response.ContentType = "application/json";
  16.             context.Response.ContentEncoding.GetBytes("utf-8");
  17.             DataTable dtPrice = SQLDBHelper.ExecuteTable("select top 1 TMPCode,TMPTime,TMPPrice from TabMerPrice with(nolock) order by TMPTime desc");
  18.             string json = "{"rows":[";
  19.             json += "{"times":"" + (Convert.ToDateTime(dtPrice.Rows[0]["TMPTime"]).AddHours(-8) - new DateTime(1970, 1, 1)).TotalMilliseconds + "","price":"" + (Convert.ToDecimal(dtPrice.Rows[0]["TMPPrice"]) / 200) + ""}";
  20.             json = json.TrimEnd(',');
  21.             json += "]}";
  22.             context.Response.Write(json);
  23.             context.Response.Flush();
  24.             context.Response.End();
  25.         }
Kopiera koden

Detta är den grova implementeringen av stegaggregering, som kan realisera realtidsvisning av serverdata med en graf liknande standardformatet


HighCharts演示.zip (48.69 KB, Antal nedladdningar: 1)


Tjog

Antal deltagare1MB+1 bidra+1 Kollaps förnuft
Manliga gudens gratulationer + 1 + 1 Kan hyresvärden ge mig kontaktuppgifter? Det hjälper mycket

Se alla betyg





Föregående:Hur man kommer in i utvecklarläge för Android 4.4.x
Nästa:Baserat på Sina@ enkelt exempel
Publicerad på 2015-06-28 10:34:21 |
Detta inlägg redigerades senast av microxdd den 28-6-2015 10:35

Att sy strängar är den mest slösaktiga prestandan och kan användas med StringBuilder. Det rekommenderas dock att använda JSON-serialisering, som kan konvertera objekt direkt till JSON-strängar. Det kan också avserialiseras.
Rekommenderar Baidu ikonbibliotek http://echarts.baidu.com/doc/example.html
 Hyresvärd| Publicerad på 2015-06-28 10:54:45 |
MicroXDD publicerades den 28 juni 2015 10:34
Att sy strängar är den mest slösaktiga prestandan och kan användas med StringBuilder. Det rekommenderas dock att använda JSON-serialisering, som kan konvertera objekt direkt till ...

Fördelen med JSON är att det är en gudomlig häst? Jag har bara hört talas om den här saken
Publicerad på 2015-06-28 16:02:07 |
Publicerad den 28 juni 2015 kl. 10:54
Fördelen med JSON är att det är en gudomlig häst? Jag har bara hört talas om den här saken

JSON är ett dataformat som är språkagnostiskt
Publicerad på 2015-06-28 16:03:36 |
Delver_Si Publicerad den 28-6-6 2015 16:02
JSON är ett dataformat som är språkagnostiskt

Överför direkt de data som krävs av JS från bakgrunden i JSON-format, hur man hanterar JS
 Hyresvärd| Publicerad på 2015-06-28 17:33:24 |
Delver_Si Publicerad den 28 juni 2015 16:03
Överför direkt de data som krävs av JS från bakgrunden i JSON-format, hur man hanterar JS

Lärande
Publicerad på 2015-06-29 18:56:59 |
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com