1、说明:
利用HighStock显示曲线,在右上角的日期间隔选择好日期后,重新请求后台数据,重新加载曲线。
2、实现方法:
在HighStock的rangeSelector中有一个属性inputDateParser,在这里面可以定义一个回调函数,当输入完日期后,会调用这个函数。
3、日期的取得:
右键查看元素可知,开始日期的input有name=‘min’属性,结束日期input有name='max'属性。这样只需要获得value只就可以了。
4、代码:
在回调函数中会用到,自己调用自己,因此定义了func()函数,以便在回调函数中使用。本例在回调函数中只是模拟,原理是一样的,只要把ajax发送的数据改为min、max就可以了。在后台,接收日期查询数据返回数据。
1 $(function () { 2 $.getJSON("/handler1.ashx", function func(dt) { 3 var data=[]; 4 Highcharts.setOptions({ 5 global: { 6 useUTC:false 7 } 8 9 10 }); 11 for (var i = 0; i < dt.length; i++) { 12 data.push([Date.parse(dt[i]["Time"]), Number(dt[i]["Value"])]); 13 } 14 $('#highstock').highcharts('StockChart', { 15 16 credits: { 17 enabled:false 18 }, 19 20 navigator: { 21 enabled: $(window).width() > 640 22 }, 23 24 25 rangeSelector: { 26 selected: 1, 27 inputDateFormat: '%Y-%m-%d', 28 enabled: true, 29 inputDateParser:function () { 30 $.ajax({ //实现点击日期框 再次选择数据 31 url: '/handler1.ashx', 32 dataType: 'json', 33 data:'min=45', 34 success:function(ds) { 35 func(ds); 36 } 37 }); 38 39 } 40 }, 41 42 43 series: [{ 44 name: '持仓量', 45 data: data, 46 tooltip: { 47 valueDecimals: 2 48 } 49 }], 50 tooltip: { 51 formatter: function () { 52 var tip = ""; 53 tip += Highcharts.dateFormat("%Y年%m月%d日", this.points[0].point.x, false) + "<br/>"; 54 tip += "净持仓:" + this.points[0].point.y.toFixed(2) + "吨<br/>"; 55 return tip; 56 57 } 58 }, 59 yAxis: { 60 61 gridLineColor: '#ccc', 62 63 labels: { 64 formatter: function () { 65 return this.value + "吨"; 66 } 67 } 68 } 69 }); 70 }); 71 72 });
后台代码:接收到“45”说明是,点击日期选择框了,返回前2条数据。实际使用中,接收min、max日期,拼where条件查询数据返回。
string min = context.Request["min"]??""; string sql; if (min=="45") { sql = "select top(2)Time,Value from TableTest order by Time"; } else { sql= "select Time,Value from TableTest order by Time"; } DataTable dt=SqlDbHelper.ExecuteDataTable(sql); context.Response.Write(JsonConvert.SerializeObject(dt));