highcharts日期型X轴示例
highcharts处理日期型X轴比较麻烦,用以下方法可以实现:
HTML:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Highcharts_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="../JS/jquery-1.7.min.js" type="text/javascript"></script> <script src="../JS/highcharts.js" type="text/javascript"></script> </head> <body> <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"> </div> </body> </html>
前端脚本:
<script type="text/javascript"> $(function () { var chart; $(document).ready(function () { chart = new Highcharts.Chart({ chart: { renderTo: 'container', type: 'line', marginRight: 130, marginBottom: 25 }, title: { text: '员工工资曲线图', style:{ fontSize: '20px' }, x: -20 //center }, subtitle: { text: 'Source: WorldClimate.com', x: -20 }, xAxis: { type: 'datetime', labels: { step: 4, formatter: function () { return Highcharts.dateFormat('%Y-%m-%d', this.value); } } }, 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', this.x) + ': ¥' + this.y.toFixed(2); } }, legend: { layout: 'vertical', align: 'right', verticalAlign: 'top', x: -10, y: 100, borderWidth: 0 }, plotOptions: { series: { cursor: 'pointer', dataLabels: { enabled: true, formatter: function() { return '¥' + this.y.toFixed(2); } }, point: { events: { click: function() { alert ('Category: '+ Highcharts.dateFormat('%Y-%m-%d', this.x) +', value: '+ this.y + ",id:" + this.id); } } } } }, series: [<%=dataPoints%> ] }); }); }); </script>
后台代码示例:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; public partial class Highcharts_Default : System.Web.UI.Page { public string dataPoints=""; protected void Page_Load(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["dgmlOAConnectionString"].ConnectionString)) { SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select max(money) as money,id, name,date from(" + " SELECT sum(e.amount) as money,w.id, w.name,d.date,e.empCode" + " FROM ProductpSchedule_Tasks t" + " INNER JOIN ProductpSchedule_Main m ON t.pid = m.id" + " INNER JOIN ProductpSchedule_ReportData d ON t.id = d.pid" + " INNER JOIN workcenter w ON w.code = d.workcenterCode" + " INNER JOIN department dept ON w.pid = dept.id" + " Inner join dbo.ProductpSchedule_ReportData_Emps e on e.pid=d.id" + " WHERE d.date BETWEEN @date1 AND @date2 "; cmd.CommandText += " group by w.id, w.name,d.date,e.empCode) t" + " group by id,name,date having(max(money))>0 order by id,date"; cmd.Parameters.Add("date1", "2012-4-1"); cmd.Parameters.Add("date2", "2012-9-1"); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); string ser = ""; string data = ""; TimeSpan ticks =new TimeSpan(new DateTime(1970, 1, 1).Ticks); while (dr.Read()) { if (ser != dr["name"].ToString()) { if (ser != "") { if (dataPoints != "") { dataPoints += ","; } dataPoints += "{name:'" + ser + "',data:[" + data + "]}"; } ser = dr["name"].ToString(); data = "{x:" + new TimeSpan(DateTime.Parse(dr["date"].ToString()).Ticks).Subtract(ticks).Duration().TotalMilliseconds.ToString() + ",y:" + dr["money"].ToString() + ",id:" + dr["id"].ToString() + "}"; } else { if (data != "") { data += ","; } data += "{x:" + new TimeSpan(DateTime.Parse(dr["date"].ToString()).Ticks).Subtract(ticks).Duration().TotalMilliseconds.ToString() + ",y:" + dr["money"].ToString() + ",id:" + dr["id"].ToString() + "}"; } } if (dataPoints != "") { dataPoints += ","; } dataPoints += "{name:'" + ser + "',data:[" + data + "]}"; //Response.Write(dataPoints); dr.Close(); cmd.Dispose(); } } }