コントローラーから独自のデータを追加するために、Googleの縦棒グラフをカスタマイズしようとしていました。私は簡単な解決策を見つけましたが、誰かがより良いアプローチを知っていれば、コードを変更できてうれしいです。
https://google-developers.appspot.com/chart/interactive/docs/gallery/columnchartからコードをコピーすると仮定します
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]);
var options = {
title: 'Company Performance',
hAxis: {title: 'Year', titleTextStyle: {color: 'red'}}
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
<div id="chart_div" style="width:50%;float:left"></div>
ですから、私が最初に修正したいと思ったのは、カテゴリ名と注文数を表示することでした。解決策は簡単でした。Expensedを削除したので、次のようになりました。
['Category', 'Orders'],
['2004', 1000,],
['2005', 1170, ],
['2006', 660, ],
['2007', 1030, ]
しかし、これらはハードコードされたデータであり、自分のカテゴリ名とデータベースからの注文の名前が必要でした。
コントローラのカスタム文字列で作成し、それをスクリプトに渡します。
コントローラ:
foreach (var d in model.DinerCategoryOrders) // Build string for google chart js
{
// ['Pre-School', 1000], Template
GoogleOrdersCount += "['" + d.CategoryName + "', " + d.OrdersCount + "],";
}
model.OrdersForGoogleChart = "google.visualization.arrayToDataTable([['Category', 'Orders']," + GoogleOrdersCount +" ]);";
return model;
ビューで
データ変数の定義を、コントローラーに組み込んだ文字列に置き換えました。
@ Html.Raw(Model.OrdersForGoogleChart)
したがって、最終ビルドは次のようになります。
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = @Html.Raw(Model.OrdersForGoogleChart)
var options = {
title: 'Company Performance',
hAxis: {title: 'Year', titleTextStyle: {color: 'red'}}
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
Asp.Net MVCのRazorがjsと通信し、jsがrazorを通過した文字列を問題なくダイジェストすることに驚かされました。
あなたが私が一般的な問題を信じるより良い解決策を見つけたら、私たちに知らせてください!