jQuery HighChartsおよびMVC 2アプリケーションのシンプルなバーチャート?
-
11-10-2019 - |
質問
MVCのJSONアクションメソッドの結果を使用して、非常にシンプルなバーチャートを作成しようとしています。実際のバーチャートを取得しますが、オプションとそれほど十分によくわかりませんので、基本的に何をすべきかを推測しています。サーバーコードからデータを取得し、チャートを作成する方法の例として、HighChartsサイトの例を使用しました。違いは、私のチャートが例よりも簡単だということです。 (フルーツの例のように)各ユーザーのカテゴリはありませんが、ユーザーと数時間のログが記録されています。
これがHighCharts JQueryコードです:
function getHighChart() {
var actionUrl = '<%= Url.Action("GetChartData") %>';
var customerId = $('#customersId').val();
var startdate = $('.date-pickStart').val();
var enddate = $('.date-pickEnd').val();
var options = {
chart: {
renderTo: 'chart-container',
defaultSeriesType: 'bar'
},
title: {
text: 'Statistik'
},
xAxis: {
categories: []
},
yAxis: {
title: {
text: 'Timmar'
}
},
series: []
}
jQuery.getJSON(actionUrl,
{ customerId: customerId, startdate: startdate, enddate: enddate }, function (items) {
var series = {
data: []
};
$.each(items, function (itemNo, item) {
series.name = item.Key;
series.data.push(parseFloat(item.Value));
});
options.series.push(series);
var chart = new Highcharts.Chart(options);
});
}
そして、JSONを返すアクション方法は次のとおりです。
public JsonResult GetChartData(string customerId, string startdate, string enddate)
{
int intcustomerId = Int32.Parse(customerId);
var emps = from segment in _repository.TimeSegments
where
segment.Date.Date >= DateTime.Parse(startdate) &&
segment.Date.Date <= DateTime.Parse(enddate)
where segment.Customer.Id == intcustomerId
group segment by segment.Employee
into employeeGroup
select new CurrentEmployee
{
Name = employeeGroup.Key.FirstName + " " + employeeGroup.Key.LastName,
CurrentTimeSegments = employeeGroup.ToList(),
CurrentMonthHours = employeeGroup.Sum(ts => ts.Hours)
};
Dictionary<string, double > retVal = new Dictionary<string, double>();
foreach (var currentEmployee in emps)
{
retVal.Add(currentEmployee.Name, currentEmployee.CurrentMonthHours);
}
return Json(retVal.ToArray(), JsonRequestBehavior.AllowGet);
}
私はパイチャートを作成することができましたが、今では簡単なバーを作成したいとき、jQueryコードで何が何であるかを解決することができないので、結果は最初に唯一のユーザーであるバーです伝説にリストされているのは、配列の最後のものです。第二に、ツールチップにはx = [ユーザーの名前]、y = 29、[ユーザーの名前]:29を表示します。これはパイチャートに入りました。
このJSONのHighchartsでこのようなシンプルなバーチャートを作成するにはどうすればよいですか?
解決 2
まあ、私は結局それを自分で解決しました...私は私のような他のハイチャートの初心者が興味を持っている場合に備えてそれを投稿するべきだと思いました:
これが機能したjQueryです:
function getHighChart() {
var actionUrl = '<%= Url.Action("GetChartData") %>';
var customerId = $('#customersId').val();
var customerName = $('#customersId option:selected').text();
var startdate = $('.date-pickStart').val();
var enddate = $('.date-pickEnd').val();
//define the options
var options = {
chart: {
renderTo: 'chart-container',
defaultSeriesType: 'column'
},
title: {
text: 'Hours worked for ' + customerName
},
xAxis: {
categories: [customerName]
},
yAxis: {
title: {
text: 'Hours'
}
},
series: []
};
//Calls the JSON action method
jQuery.getJSON(actionUrl,
{ customerId: customerId, startdate: startdate, enddate: enddate }, function (items) {
$.each(items, function (itemNo, item) {
var series = {
data: []
};
series.name = item.Key;
series.data.push(parseFloat(item.Value));
options.series.push(series);
});
var chart = new Highcharts.Chart(options);
});
}
誰かがこれに欠陥を見つけて、それを行うためのより良い方法を私に向けることができるなら、私は喜んで答えクレジットを引き渡します、そうでなければ私は私自身の答えを受け入れます...
他のヒント
私が使う:
//Controller action:
public JsonResult GetData(int id)
{
Dictionary<int, double> data = this.repository.GetData(id);
return Json(data.ToArray(), JsonRequestBehavior.AllowGet);
}
意見:
<script>
var chart1;
$(document).ready(function () {
chart1 = new Highcharts.Chart({
chart: {
renderTo: 'chart-container-1',
defaultSeriesType: 'scatter',
events: {
load: requestData
}
},
options...
,
series: [{
name: 'some data',
data: []
}]
});
}
);
function requestData() {
$.ajax({
url: '/ControllerName/GetData?id=@(Model.Id)',
success: function (items) {
$.each(items, function (itemNo, item) {
chart1.series[0].addPoint([item.Key,item.Value], false);
});
chart1.redraw();
},
cache: false
});
}
</script>
<div id="chart-container-1"></div>
したがって、基本的に私はaddpoint( 'x、y'の配列、falseを再描画しないためにfalse)を使用します)