【发布时间】:2020-04-02 15:58:25
【问题描述】:
我显示并设置了chart.js 的样式,并且还在数组中使用模拟数据,我只是不知道如何使用MVC 5 填充chart.js 中的数据。我尝试了很多不同的方法,它显示数据但不显示图表。理想情况下,我需要两个数据集;一份用于每周费用,一份用于每月费用。以下是我尝试过的方法。如果有人能建议我做错了什么或只是指出我正确的方向,将不胜感激。
谢谢。
图表控制器
public JsonResult WeeklyExpenseSummary()
{
System.Web.UI.DataVisualization.Charting.Chart chart = new System.Web.UI.DataVisualization.Charting.Chart();
DateTime d = DateTime.Today;
var offset = d.DayOfWeek - System.DayOfWeek.Monday;
offset = (offset < 0) ? 6 : offset;
DateTime FromDate = d.AddDays(-offset);
DateTime ToDate = FromDate.AddDays(7);
var data = (from a in ExpenseReport
join at in Amount on a.ItemName equals at.Amount
where a.Date >= FromDate
&& a.Date < ToDate
group at by at.ItemName into g
select new
{
value = g.Count(),
label = g.Key
}).ToList();
return Json(JsonConvert.SerializeObject(chart.barChart(data)), JsonRequestBehavior.AllowGet);
}
public JsonResult MonthlyExpenseSummary()
{
System.Web.UI.DataVisualization.Charting.Chart chart = new System.Web.UI.DataVisualization.Charting.Chart();
DateTime today = DateTime.Today;
DateTime startDate = new DateTime(today.Year, today.Month, 1);
DateTime endDate = new DateTime(today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month));
var data = (from a in ExpenseReport
join at in Amount on a.itemName equals at.Amount
where a.Date >= FromDate
&& a.Date < ToDate
group at by at.ItemName into g
select new
{
value = g.Count(),
label = g.Key
}).ToList();
return Json(JsonConvert.SerializeObject(chart.barChart(data)), JsonRequestBehavior.AllowGet);
}
Index.cshtml
<div style="width: 80%;">
<canvas id="barChart" heigh="400" width="400"></canvas>
</div>
<script>
var chart = document.getElementById("barChart").getContext('2d');
Chart.defaults.global.animation.duration = 2000;
var barChart = new Chart(chart,
{
type: 'bar',
data: {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
datasets: [{
label: 'Weekly Expenses',
fill: true,
barTension: 0.1,
borderColor: '#2C3E50',
borderWidth: 2,
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "#2C3E50",
pointBackgroundColor: "#fff",
pointBorderWidth: 2,
pointHoverRadius: 8,
pointHoverBackgroundColor: "#2C3E50",
pointHoverBorderColor: "#2C3E50",
pointHoverBorderWidth: 5,
pointRadius: 10,
PointHitRadius:10,
data: [20,30,40,50,60,70,80,90,100,120,140,50]
},
{
label: 'Monthly Expenses',
fill: true,
barTension: 0.8,
backgroundColor: '#2C3E50',
borderColor: '#f0c419',
borderWidth: 2,
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "#f0c419",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "#f0c419",
pointHoverBorderColor: "#f0c419",
pointHoverBorderWidth: 2,
pointRadius: 1,
PointHitRadius:1,
data: /*[10,20,30,40,50,60,70,80,90,100,110,120]*/ data
}
]
},
options: {
scales: {
yAxes: [
{
ticks: {
beginAtZero: true,
},
}]
}
}
});
</script>
【问题讨论】:
-
@HardikMasalawala 没关系,但我需要显示一个 SQL 表中的数据。例如,理想情况下,第一个数据集仅显示每周费用金额,第二个数据集每月费用金额>我尝试过的是 C# 方法 Jsonconvert 以及 javascript 方法来获取图表中的数据,如果需要,我也可以发布它们谢谢
标签: c# asp.net sql-server asp.net-mvc-5