Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 23205|Odgovoriti: 6

[ASP.NET] Highcharts združuje Asp.net za uresničitev dinamičnih podatkovnih prikazov grafov delnic

[Kopiraj povezavo]
Objavljeno na 28. 06. 2015 00:06:24 | | | |

Specifična uporaba trga za ta primer je, da moram redno brati ceno surovine iz baze podatkov in jo nato prikazati na spletni strani kot graf, podobno kot graf trendov cen pri trgovanju z instrumenti v delnicah.

Uporabljam asp.net, v kombinaciji z implementacijo vtičnika Highcharts v jQueryju, vtičnik podpira veliko vrst grafike, vendar so statični, in primere, ki jih podate, je treba preoblikovati, zainteresirani prijatelji lahko obiščejo uradno spletno stran Highcharts (http://www.highcharts.com/), ki ponuja veliko demonstracij, iskreno, da bi razumel svoje potrebe, bi moral uporabiti Highstock, Vendar pa po ogledu primera dinamične posodobitve Highcharts ugotavljam, da je moj vmesnik za zahteve bolj jedrnat, zato ta članek uporablja model dinamične posodobitve v Highcharts, grafični tip pa je spline. Končni zemljevid učinkov je naslednji (cena Pinqijina se posodablja vsakih 10 sekund, vsakih 10 sekund pa se doda točka na graf):

Napredujte po korakih:

Ustvarite novo spletno stran z VS in ustvarite asp.net stran DynamicUpdate.aspx, koda strani je naslednja:


  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>
Kopiraj kodo

Lastnost Highcharts renderTo označuje prikazne kontejnerje,

dogodki predstavljajo dogodek, ki ga mora kontejner registrirati, kjer nalaganje pomeni, da se nalaganje zgodi po zaključku nalaganja, tukaj je v nalaganju nastavljen js časovnik, ki se zgodi vsakih 10 sekund, koda v njem pa zahteva najnovejši GOLD iz datoteke dataupdate.ashx mape ajaxhandler v isti korenski mapi kot DynamicUpdate.aspx stran preko ajax v jQuery Podatki o cenah te vrste, tukaj je razlog, zakaj dodam randomCode + "=" + oldrandomCode v ajax URL, ker dodajanje naključne številke prepreči predpomnjenje, flag=1 pa zato, ker moja dataupdate.ashx datoteka želi sprejeti več zahtevkov iz različnih ajax, zato uporabljam flag za razlikovanje

xAxis predstavlja zbirko atributov, definiranih za x-os vsebnika, type predstavlja prikazani tip besedila, opcijsko, tukaj vnesem tip časa, tukaj upoštevajte, da je privzeta vrednost primera GMT čas, lahko uporabite tudi UTC čas, vendar običajno uporabljamo pekinški čas (GMT ali UTC) + 8 ur = pekinški čas, zato ko uporabimo ajax, da določimo, da je čas pekinški čas, moramo od ure odšteti 8 ur (tukaj želim deliti tudi izkušnjo, Kako pretvoriti strežniški čas v js čas, ki ga lahko uporabi metoda .getTime(), torej odšteti strežniški čas od 1970-1-1, pretvori preostale dni v milisekunde in nato dodeli vrednost novo inicializiranemu času z metodo setTime v js. Ugotovil sem, da rezultat, pridobljen z getTime(), ni pravilen za inicializacijo js časa neposredno v js v js v obliki novega datuma (leto, mesec, dan, ura, minuta, sekunda, milisekunda) z getTime(), Kar zadeva razlog, zakaj se 1970-1-1 odšteje, je to zato, ker je definicija metode getTime(), da se število milisekund pridobi od trenutnega časa iz 1970-1-1). Ko x-os ni prikazana kot čas ali jo morate sami definirati, jo je mogoče definirati tudi z atributom kategorij, tickPixelInterval predstavlja gostoto x-osi, oznake pa se uporabljajo za oblikovanje prikaznega formata x-osi

yAxis predstavlja zbirko atributov, definiranih za y-os vsebnika, ki je približno enaka atributom x-osi, vendar v Highcharts ni mogoče določiti fiksne vrednosti y-osi preko kategorij; y-os Highcharts se samodejno generira na podlagi podatkov o koordinatnih točkah, ki so odvisni od podatkovnega podatributa atributa serije, na primer, ko podatke dodelite vrednost, je največja vrednost 300, najmanjša pa 100. Nato bo prikaz y-osi med 100 in 300, ali pa lahko nastavite tudi atribut max ali min za yAxis

serija predstavlja zbirko vseh krivulj, prikazanih v vsebniku, tukaj prikazujem samo eno krivuljo, ime predstavlja ime krivulje, podatki predstavljajo zbirko niza koordinatnih točk krivulje, x je spredaj, y je zadaj, to je js matrika, v tem primeru ker x-os prikazuje čas, zato mora biti x-lastnost objekta polja nastavljena na čas, vendar v Highcharts ni neposredno dodeljen čas x-osi, Namesto tega je število milisekund med 1970-1-1 in določenim časom dodeljeno x-osi, da predstavlja ta čas, zato je treba uporabiti metodo getTime(), oblika y-osi koordinatne točke mora biti y = majhno število * cela številska oblika, in nisem razumel, zakaj mora Highcharts to početi, saj so podatki o cenah v tem primeru večinoma enaki, zato sem moral pri pridobivanju podatkov deliti z 200, nato pa pomnožiti z 200, ko sem y-osi dodelil vrednost.


<%= jsonstr %> v kodi strani so začetni podatki, ki jih moram pridobiti od strežnika za inicializacijo grafa, to je generiranje strani CS


  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.         }
Kopiraj kodo

Med njimi je tabela TabMerPrice tabela o različnih cenah, TMPTime čas, TMPPrice cena, TMPTime časovni interval je deset sekund, uporabljam podatkovno nalogo za generiranje zapisa tabele, kar se zgodi vsakih deset sekund

AddHours(-8) je namenjen pretvorbi časa v pekinški čas, generirani podatkovni format pa je json format

Koda dataupdate.ashx izgleda takole:


  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.         }
Kopiraj kodo

To je groba izvedba agregacije korakov, ki omogoča prikaz podatkov na strežniški strani v realnem času z grafom, podobnim formatu delnic


HighCharts演示.zip (48.69 KB, Število prenosov: 1)


Partitura

Število udeležencev1MB+1 prispevati+1 Propad razlog
Moški bog, čestitke + 1 + 1 Ali mi lahko najemodajalec da kontaktne podatke? To mi zelo pomaga?

Oglejte si vse ocene





Prejšnji:Kako vstopiti v razvojni način za Android 4.4.x
Naslednji:Na podlagi Sina@ funkcije je preprost primer
Objavljeno na 28. 06. 2015 10:34:21 |
Ta objava je bila nazadnje urejena s strani microxdd 28. 6. 2015 ob 10:35

Šivanje vrvic je najbolj potratno za zmogljivost in ga je mogoče uporabiti s StringBuilderjem. Vendar je priporočljivo uporabljati JSON serializacijo, ki lahko neposredno pretvori objekte v JSON nize. Lahko se tudi deserializira
Priporočam knjižnico ikon Baidu http://echarts.baidu.com/doc/example.html
 Najemodajalec| Objavljeno na 28. 06. 2015 10:54:45 |
microxdd objavljeno 28. 6. 2015 ob 10:34
Šivanje vrvic je najbolj potratno za zmogljivost in ga je mogoče uporabiti s StringBuilderjem. Vendar je priporočljivo uporabljati JSON serijalizacijo, ki lahko neposredno pretvori objekte v ...

Prednost json je, da je božanski konj? O tem sem samo slišal
Objavljeno na 28. 06. 2015 16:02:07 |
Objavljeno 28. 6. 2015 ob 10:54
Prednost json je, da je božanski konj? O tem sem samo slišal

JSON je podatkovni format, ki je jezikovno neodvisen
Objavljeno na 28. 06. 2015 16:03:36 |
Delver_Si Objavljeno 28. 6. 2015 ob 16:02
JSON je podatkovni format, ki je jezikovno neodvisen

Neposredno prenesite podatke, ki jih JS zahteva, iz ozadja v JSON formatu, kako ravnati z JS
 Najemodajalec| Objavljeno na 28. 06. 2015 17:33:24 |
Delver_Si Objavljeno 28. 6. 2015 ob 16:03
Neposredno prenesite podatke, ki jih JS zahteva, iz ozadja v JSON formatu, kako ravnati z JS

Učenje
Objavljeno na 29. 06. 2015 18:56:59 |
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com