|
Selle näite konkreetne rakendusturg on see, et pean regulaarselt lugema kauba hinda andmebaasist ja seejärel kuvama seda veebilehel graafikuna, sarnaselt aktsiatega kauplemisinstrumentide hinnatrendide graafikule. Kasutan asp.net koos Highchartsi plugina rakendusega jQuery's, plugin toetab mitut tüüpi graafikat, kuid need on staatilised ja näited vajavad muutmist, huvitatud sõbrad saavad minna Highchartsi ametlikule veebilehele (http://www.highcharts.com/), mis pakub palju demosid, ausalt öeldes, et oma vajadusi realiseerida, peaksin kasutama Highstocki, Kuid pärast Highchartsi dünaamilise uuenduse näite vaatamist saan aru, et minu nõuete liides on täpsem, seega kasutab see artikkel Highchartsi dünaamilise uuenduse mudelit ja graafikatüüp on spline. Lõplik efektikaart on järgmine (Pinqijini hind uuendatakse iga 10 sekundi järel ja iga 10 sekundi järel lisatakse punkt joongraafikule):
Saavuta sammude kogumine: Loo uus veebileht VS-iga ja loo asp.net leht DynamicUpdate.aspx, lehe kood on järgmine:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicUpdate.aspx.cs"
- Inherits="WebImg.DynamicUpdate" %>
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>动态显示价格图例</title>
- <scrip去掉t type="text/javascrip去掉t" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></scrip去掉t>
- <scrip去掉t type="text/javascrip去掉t">
- $(function () {
- $(document).ready(function () {
- Highcharts.setOptions({
- global: {
- useUTC: false
- }
- });
- var chart;
- chart = new Highcharts.Chart({
- chart: {
- renderTo: 'container',
- type: 'spline',
- marginRight: 10,
- events: {
- load: function () {
- // set up the updating of the chart each second
- var series = this.series[0];
- setInterval(function () {
- var randomCode = parseInt(Math.random() * 10000);
- var oldrandomCode = parseInt(Math.random() * 10000);
- $.ajax({
- url: "ajaxhandler/dataupdate.ashx?" + randomCode + "=" + oldrandomCode + "&flag=1",
- type: "get",
- dataType: "json",
- success: function (data, textStatus, XMLHttpRequest) {
- var ctime = new Date();
- ctime.setTime(parseInt(data.rows[0].times));
- var x = ctime.getTime(), // current time
- y = data.rows[0].price * 200;
- series.addPoint([x, y], true, true);
- },
- error: function () { }
- });
- }, 10000);
- }
- }
- },
- title: {
- text: '品旗撮合交易市场品种行情'
- },
- xAxis: {
- title: {
- text: '时间'
- },
- type: 'datetime',
- tickPixelInterval: 150,
- labels:{formatter:function(){
- var vDate = new Date(this.value);
- return vDate.getHours()+":"+vDate.getMinutes()+":"+vDate.getSeconds();
- }}
- },
- yAxis: {
- title: {
- text: '价格'
- },
- plotLines: [{
- value: 0,
- width: 1,
- color: '#808080'
- }]
- },
- tooltip: {
- formatter: function () {
- return '<b>' + this.series.name + '</b><br/>' +
- Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
- Highcharts.numberFormat(this.y, 2);
- }
- },
- legend: {
- enabled: false
- },
- exporting: {
- enabled: false
- },
- credits:{
- text:'品旗金属交易市场',
- url:'http://www.inv6.com'
- },
- series: [{
- name: '品旗金(GOLD)',
- data: (function () {
- var data = [],
- i;
- var jsonData = <%= jsonstr %>;
- for (i = -19; i <= 0; i++) {
- var ctime = new Date();
- ctime.setTime(parseInt(jsonData.rows[i+19].time1));
- data.push({
- x: ctime.getTime(),
- y: jsonData.rows[i + 19].price * 200
- });
- }
- return data;
- })()
- }]
- });
- });
- });
- </scrip去掉t>
- </head>
- <body>
- <scrip去掉t src="http://code.highcharts.com/highcharts.js"></scrip去掉t>
- <scrip去掉t src="http://code.highcharts.com/modules/exporting.js"></scrip去掉t>
- <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto">
- </div>
- </body>
- </html>
Kopeeri koodHighcharts omadus renderTo näitab kuvakonteinereid, sündmused tähistavad sündmust, mida konteiner peab registreerima, kus koormus tähendab, et see toimub pärast laadimise lõpetamist, siin on laadimisse seatud js-taimer, mis toimub iga 10 sekundi järel, ning selle kood on taotleda uusimat GOLD-faili dataupdate.ashx failist ajaxhandler kaustas samas juurkataloogis kui DynamicUpdate.aspx leht ajax-i kaudu jQuery's Hinnaandmed, miks lisan ajaxi URL-i randomCode + "=" + oldrandomCode, sest juhusliku arvu lisamine aitab vältida vahemällu salvestamist, ja flag=1 on see, et minu dataupdate.ashx fail tahab vastu võtta mitut päringut erinevatelt ajax-idelt, seega kasuta lipp selle eristamiseks xAxis esindab konteineri x-telje jaoks defineeritud atribuutide kogumit, tüüp tähistab kuvatavat tekstitüüpi, valikuline, siin täidan ajatüübi, siin märgi, et vaikimisi on eksemplari aeg GMT aeg, võid kasutada ka UTC aega, aga üldiselt kasutame Pekingi aega (GMT või UTC) + 8 tundi = Pekingi aeg, nii et kui kasutame ajax-i, et saada aeg on Pekingi aeg, lahutame sellest 8 tundi (siin tahan jagada ka kogemust, Kuidas konverteerida serveri aeg js ajaks, mida saab kasutada .getTime() meetodiga, st lahutada serveri aeg vahemikus 1970-1-1, teisendada ülejäänud päevad millisekunditeks ja seejärel määrata väärtus äsja initsialiseeritud ajale setTime meetodi abil js-is, leidsin, et getTime() poolt saadud tulemus on vale, et initsialiseerida js aeg otse js-is uue kuupäeva (aasta, kuu, päev, tund, minut, sekund, millisekund) kujul getTime(), Miks 1970-1-1 lahutatakse, siis sellepärast, et getTime() meetodi definitsioon on saada millisekundite arv praegusest ajast 1970-1-1), kui x-telge ei kuvata ajana või pead selle ise defineerima, saab seda määratleda ka kategooriate atribuudi järgi, tickPixelInterval tähistab x-telje tihedust ja sildid kasutatakse x-telje kuvavormingu vormindamiseks yAxis esindab atribuutide kogumit, mis on defineeritud konteineri y-telje jaoks, mis on ligikaudu sama mis x-telje atribuudid, kuid Highchartsis ei ole võimalik määratleda y-telje fikseeritud väärtust kategooriate kaudu; Highchartsi y-telg genereeritakse automaatselt antud koordinaatpunkti andmete põhjal, mis sõltub jada atribuudi andme-alamatribuudist, näiteks kui määrata andmetele väärtus, siis maksimaalne väärtus on 300 ja minimaalne väärtus 100. Siis kuvatakse y-telje vahemikus 100 kuni 300, või saad määrata ka y-telje maksimaalse või minimaalse atribuudi seeria tähistab kõigi konteinerisse kuvatud kõverate kogumit, siin näitan ainult ühte kõverat, nimi tähistab kõvera nime, andmed tähistavad kõvera koordinaatpunktide kogumist, x on ees, y on taga, see on js-massiivi, antud juhul kuna x-telg näitab aega, peab massiiviobjekti x-omadus olema seatud ajaks, kuid Highchartsis ei määrata sellele otseselt aega x-teljele, Selle asemel määratakse x-teljele millisekundite arv vahemikus 1970-1-1 ja teatud aja, et seda aega esindada, seega tuleb kasutada getTime() meetodit, y-telje koordinaatpunkti kuju peab olema y = väike arv * täisarvuline vorm, ja ma ei saanud aru, miks Highcharts pidi seda tegema, sest selle näite hinnaandmed on üldiselt umbes samad, nii et pidin andmete saamisel jagama 200-ga ja siis 200-ga väärtuse määramisel y-teljele.
<%= jsonstr %> lehekoodis on algne andmestik, mida pean serverist saama graafiku initsialiseerimiseks, lehe cs genereerimiseks
- public string jsonstr = "";
- protected void Page_Load(object sender, EventArgs e)
- {
- getData();
- }
- private void getData()
- {
- DataTable dtPrice = SQLDBHelper.ExecuteTable("select top 20 TMPCode,TMPTime,TMPPrice from TabMerPrice with(nolock) order by TMPTime desc");
- string json = "{"rows":[";
- for (int i = (dtPrice.Rows.Count-1); i >= 0; i--)
- {
- json += "{"time1":"" + (Convert.ToDateTime(dtPrice.Rows[i]["TMPTime"]).AddHours(-8) - new DateTime(1970, 1, 1)).TotalMilliseconds + "","price":"" + (Convert.ToDecimal(dtPrice.Rows[i]["TMPPrice"])/200) + ""},";
- }
- json = json.TrimEnd(',');
- json += "]}";
- jsonstr = json;
- }
Kopeeri koodNende hulgas on TabMerPrice tabel mitmekesisuse hinnainfo tabel, TMPTime aeg, TMPPrice hind, TMPTime ajavahemik on kümme sekundit, kasutan andmebaasi tööd tabeli kirje genereerimiseks, mis toimub iga kümne sekundi järel AddHours(-8) teisendab aja Pekingi ajaks ning genereeritud andmeformaat on json-formaat dataupdate.ashx kood näeb välja selline:
- public void ProcessRequest(HttpContext context)
- {
- string flag = context.Request.QueryString["flag"].ToString();
- switch (flag)
- {
- case "1"://获取品种当前价格
- GetMerPrice(context);
- break;
- }
- }
- private void GetMerPrice(HttpContext context)
- {
- context.Response.Clear();
- context.Response.Buffer = true;
- context.Response.ContentType = "application/json";
- context.Response.ContentEncoding.GetBytes("utf-8");
- DataTable dtPrice = SQLDBHelper.ExecuteTable("select top 1 TMPCode,TMPTime,TMPPrice from TabMerPrice with(nolock) order by TMPTime desc");
- string json = "{"rows":[";
- json += "{"times":"" + (Convert.ToDateTime(dtPrice.Rows[0]["TMPTime"]).AddHours(-8) - new DateTime(1970, 1, 1)).TotalMilliseconds + "","price":"" + (Convert.ToDecimal(dtPrice.Rows[0]["TMPPrice"]) / 200) + ""}";
- json = json.TrimEnd(',');
- json += "]}";
- context.Response.Write(json);
- context.Response.Flush();
- context.Response.End();
- }
Kopeeri koodSee on samm-agregatsiooni umbkaudne rakendus, mis võimaldab serveripoolsete andmete reaalajas kuvamist graafikuga, mis sarnaneb tavapärasele formaadile
HighCharts演示.zip
(48.69 KB, Allalaadimiste arv: 1)
|