Kendo UI MVC - 如何动态绑定 double[] 类型的数据
Kendo UI MVC - How to bind dynamically data of type double[]
我在尝试将列绑定到 Kendo UI MVC 图表时遇到以下错误:
InvalidOperationException: Bound columns require a field or property access expression.
<div class="demo-section k-content wide">
@(Html.Kendo().Chart(Model)
.Name("chart")
.Theme("blueOpal")
.HtmlAttributes(new { style = "height: 400px;" })
.Title("Site Visitors Stats /thousands/")
.Legend(legend => legend
.Position(ChartLegendPosition.Bottom)
)
.SeriesDefaults(seriesDefaults => seriesDefaults
.Column().Stack(true)
)
.Series(series =>
{
series.Column(model => ChartDataHelper.GetWeekTotals(model.Invoices)).Name("Week Totals"); // fails
series.Column(new double[] { 52000, 34000, 23000, 48000, 67000, 83000 }).Name("Unique visitors"); // works
})
.CategoryAxis(axis => axis
.Categories("Jan", "Feb", "Mar", "Apr", "May", "Jun")
.MajorGridLines(lines => lines.Visible(false))
)
.ValueAxis(axis => axis
.Numeric()
.Line(line => line.Visible(false))
)
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}")
)
)
</div>
这是 helper static 的代码 class:
public static class ChartDataHelper
{
public static decimal[] GetWeekTotals(ICollection<InvoiceDto> invoices)
{
var currentWeekNumber = DateHelper.GetWeekOfYear(DateTime.Now);
var firstWeekNumber = currentWeekNumber - 5;
decimal[] results = new decimal[5];
for (var i = 0; i < 5; i++)
{
results[i] = invoices.Where(o =>
o.InvoiceDate.Year == DateTime.Now.Year &&
DateHelper.GetWeekOfYear(o.InvoiceDate) == (firstWeekNumber + i)
).Sum(o => o.TotalNetCharge);
}
return results;
}
似乎因为 decimal[]
不是基本类型,所以动态传递数据似乎有问题,但是在创建 double[]
类型的匿名对象时,如第二系列专栏中所示, 这里没有问题。怎么会?
尝试这样的事情
创建模型
public class ChartsModel
{
public double invoices { get; set; }
public int Currentweek{ get; set; }
}
修改你的控制器
public JsonResult _BindInvoiceChart()
{
List<InvoiceDto> invoices=your_functionToGetInvoices();
List<ChartsModel> res = new List<ChartsModel>();
var currentWeekNumber = DateHelper.GetWeekOfYear(DateTime.Now);
var firstWeekNumber = currentWeekNumber - 5;
for (var i = 0; i < 5; i++)
{
ChartsModel chartsModel=new ChartsModel();
chartsModel.Currentweek=i;
chartsModel.invoices = invoices.Where(o =>
o.InvoiceDate.Year == DateTime.Now.Year &&
DateHelper.GetWeekOfYear(o.InvoiceDate) == (firstWeekNumber + i)
).Sum(o => o.TotalNetCharge);
res.Add(chartsModel)
}
return Json(res, JsonRequestBehavior.AllowGet);
}
查看
@(Html.Kendo().Chart<ChartsModel>()
.HtmlAttributes(new { style = "width:100%;height:263px" })
.Name("InvoiceChart")
.DataSource(dataSource => dataSource
.Read(read => read.Action("_BindInvoiceChart", "yourCOntrollerName")) // Specify the action method and controller name
)
.Name("chart")
.Theme("blueOpal")
.HtmlAttributes(new { style = "height: 400px;" })
.Title("Site Visitors Stats /thousands/")
.Legend(legend => legend
.Position(ChartLegendPosition.Bottom)
)
.SeriesDefaults(seriesDefaults => seriesDefaults
.Column().Stack(true)
)
.Series(series =>
{
series.Column(d => d.invoices).Tooltip(tooltip => tooltip.Visible(true)).Name("Week Totals");
// series.Column(model => ChartDataHelper.GetWeekTotals(model.Invoices)).Name("Week Totals"); // fails
//series.Column(new double[] { 52000, 34000, 23000, 48000, 67000, 83000 }).Name("Unique visitors"); // works
})
.CategoryAxis(axis => axis
.Categories("Jan", "Feb", "Mar", "Apr", "May", "Jun")
.MajorGridLines(lines => lines.Visible(false))
)
.ValueAxis(axis => axis
.Numeric()
.Line(line => line.Visible(false))
)
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}")
))
我在尝试将列绑定到 Kendo UI MVC 图表时遇到以下错误:
InvalidOperationException: Bound columns require a field or property access expression.
<div class="demo-section k-content wide">
@(Html.Kendo().Chart(Model)
.Name("chart")
.Theme("blueOpal")
.HtmlAttributes(new { style = "height: 400px;" })
.Title("Site Visitors Stats /thousands/")
.Legend(legend => legend
.Position(ChartLegendPosition.Bottom)
)
.SeriesDefaults(seriesDefaults => seriesDefaults
.Column().Stack(true)
)
.Series(series =>
{
series.Column(model => ChartDataHelper.GetWeekTotals(model.Invoices)).Name("Week Totals"); // fails
series.Column(new double[] { 52000, 34000, 23000, 48000, 67000, 83000 }).Name("Unique visitors"); // works
})
.CategoryAxis(axis => axis
.Categories("Jan", "Feb", "Mar", "Apr", "May", "Jun")
.MajorGridLines(lines => lines.Visible(false))
)
.ValueAxis(axis => axis
.Numeric()
.Line(line => line.Visible(false))
)
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}")
)
)
</div>
这是 helper static 的代码 class:
public static class ChartDataHelper
{
public static decimal[] GetWeekTotals(ICollection<InvoiceDto> invoices)
{
var currentWeekNumber = DateHelper.GetWeekOfYear(DateTime.Now);
var firstWeekNumber = currentWeekNumber - 5;
decimal[] results = new decimal[5];
for (var i = 0; i < 5; i++)
{
results[i] = invoices.Where(o =>
o.InvoiceDate.Year == DateTime.Now.Year &&
DateHelper.GetWeekOfYear(o.InvoiceDate) == (firstWeekNumber + i)
).Sum(o => o.TotalNetCharge);
}
return results;
}
似乎因为 decimal[]
不是基本类型,所以动态传递数据似乎有问题,但是在创建 double[]
类型的匿名对象时,如第二系列专栏中所示, 这里没有问题。怎么会?
尝试这样的事情
创建模型
public class ChartsModel
{
public double invoices { get; set; }
public int Currentweek{ get; set; }
}
修改你的控制器
public JsonResult _BindInvoiceChart()
{
List<InvoiceDto> invoices=your_functionToGetInvoices();
List<ChartsModel> res = new List<ChartsModel>();
var currentWeekNumber = DateHelper.GetWeekOfYear(DateTime.Now);
var firstWeekNumber = currentWeekNumber - 5;
for (var i = 0; i < 5; i++)
{
ChartsModel chartsModel=new ChartsModel();
chartsModel.Currentweek=i;
chartsModel.invoices = invoices.Where(o =>
o.InvoiceDate.Year == DateTime.Now.Year &&
DateHelper.GetWeekOfYear(o.InvoiceDate) == (firstWeekNumber + i)
).Sum(o => o.TotalNetCharge);
res.Add(chartsModel)
}
return Json(res, JsonRequestBehavior.AllowGet);
}
查看
@(Html.Kendo().Chart<ChartsModel>()
.HtmlAttributes(new { style = "width:100%;height:263px" })
.Name("InvoiceChart")
.DataSource(dataSource => dataSource
.Read(read => read.Action("_BindInvoiceChart", "yourCOntrollerName")) // Specify the action method and controller name
)
.Name("chart")
.Theme("blueOpal")
.HtmlAttributes(new { style = "height: 400px;" })
.Title("Site Visitors Stats /thousands/")
.Legend(legend => legend
.Position(ChartLegendPosition.Bottom)
)
.SeriesDefaults(seriesDefaults => seriesDefaults
.Column().Stack(true)
)
.Series(series =>
{
series.Column(d => d.invoices).Tooltip(tooltip => tooltip.Visible(true)).Name("Week Totals");
// series.Column(model => ChartDataHelper.GetWeekTotals(model.Invoices)).Name("Week Totals"); // fails
//series.Column(new double[] { 52000, 34000, 23000, 48000, 67000, 83000 }).Name("Unique visitors"); // works
})
.CategoryAxis(axis => axis
.Categories("Jan", "Feb", "Mar", "Apr", "May", "Jun")
.MajorGridLines(lines => lines.Visible(false))
)
.ValueAxis(axis => axis
.Numeric()
.Line(line => line.Visible(false))
)
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}")
))