将 Kendo 饼图与数据源绑定
Bind Kendo pie chart with Datasource
我正在尝试使用饼图来显示统计信息。数据在我的 table 中,我是这样得到的:
public class StatisticsAccess
{
public static object getTypesForStatistics()
{
var dbo = new UsersContext();
var all = (from a in dbo.Note
select a).ToList();
var results = all.GroupBy(item => item.language.lang)
.Select(g => new
{
language = g.Key,
Count = g.Count()
});
return (results.ToList());
}
}
控制器:
public class StatisticsController : Controller
{
//
// GET: /Statistics/
public ActionResult Index()
{
return View();
}
public void displayChart()
{
var results = Json(DAL.StatisticsAccess.getTypesForStatistics());
}
}
查看:
@(Html.Kendo().Chart()
.Name("chart")
.Title(title => title
.Text("Share of Internet Population Growth, 2007 - 2012")
.Position(ChartTitlePosition.Bottom))
.Legend(legend => legend
.Visible(false)
)
.Series(series =>
{
series.Column("Count").CategoryField("language");
})
.DataSource(ds => ds.Read(read => read.Action("displayChart", "Statistics")))
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}%")
)
)
我的视图中没有语法错误,但当我加载页面时我的图表只是显示为空。
任何人都可以向我解释我应该遵循的语法来修复这个错误吗?
谢谢
您的代码至少有两个主要问题。
您已经定义了一个柱形图,这应该是一个饼图:
@(Html.Kendo().Chart<MyModel>()
.Name("chart")
.Title(title => title
.Text("Share of Internet Population Growth, 2007 - 2012")
.Position(ChartTitlePosition.Bottom))
.Legend(legend => legend.Visible(false))
.Series(series => {
series.Pie(model => model.language, model => model.Count);
})
.DataSource(ds => ds.Read(read => read.Action("displayChart", "Statistics")))
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}%")
)
)
您的操作 returns 无效,而不是 ActionResult
:
public class StatisticsController : Controller
{
[HttpPost]
public ActionResult displayChart()
{
var results = DAL.StatisticsAccess.getTypesForStatistics();
return Json(results);
}
}
此外,您可能还想这样做:
创建视图模型:
public class PieModel {
public string Language { get;set; }
public int Count { get;set; }
}
将模型添加到您的图表中。
@(Html.Kendo().Chart<PieModel>() {
...
更改您的查询:
public IEnumerable<PieModel> getTypesForStatistics()
{
var dbo = new UsersContext();
var all = (from a in dbo.Note
select a).ToList();
var results = all.GroupBy(item => item.language.lang)
.Select(g => new PieModel
{
Language = g.Key,
Count = g.Count()
});
return results.ToList();
}
我正在尝试使用饼图来显示统计信息。数据在我的 table 中,我是这样得到的:
public class StatisticsAccess
{
public static object getTypesForStatistics()
{
var dbo = new UsersContext();
var all = (from a in dbo.Note
select a).ToList();
var results = all.GroupBy(item => item.language.lang)
.Select(g => new
{
language = g.Key,
Count = g.Count()
});
return (results.ToList());
}
}
控制器:
public class StatisticsController : Controller
{
//
// GET: /Statistics/
public ActionResult Index()
{
return View();
}
public void displayChart()
{
var results = Json(DAL.StatisticsAccess.getTypesForStatistics());
}
}
查看:
@(Html.Kendo().Chart()
.Name("chart")
.Title(title => title
.Text("Share of Internet Population Growth, 2007 - 2012")
.Position(ChartTitlePosition.Bottom))
.Legend(legend => legend
.Visible(false)
)
.Series(series =>
{
series.Column("Count").CategoryField("language");
})
.DataSource(ds => ds.Read(read => read.Action("displayChart", "Statistics")))
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}%")
)
)
我的视图中没有语法错误,但当我加载页面时我的图表只是显示为空。
任何人都可以向我解释我应该遵循的语法来修复这个错误吗? 谢谢
您的代码至少有两个主要问题。
您已经定义了一个柱形图,这应该是一个饼图:
@(Html.Kendo().Chart<MyModel>()
.Name("chart")
.Title(title => title
.Text("Share of Internet Population Growth, 2007 - 2012")
.Position(ChartTitlePosition.Bottom))
.Legend(legend => legend.Visible(false))
.Series(series => {
series.Pie(model => model.language, model => model.Count);
})
.DataSource(ds => ds.Read(read => read.Action("displayChart", "Statistics")))
.Tooltip(tooltip => tooltip
.Visible(true)
.Format("{0}%")
)
)
您的操作 returns 无效,而不是 ActionResult
:
public class StatisticsController : Controller
{
[HttpPost]
public ActionResult displayChart()
{
var results = DAL.StatisticsAccess.getTypesForStatistics();
return Json(results);
}
}
此外,您可能还想这样做:
创建视图模型:
public class PieModel {
public string Language { get;set; }
public int Count { get;set; }
}
将模型添加到您的图表中。
@(Html.Kendo().Chart<PieModel>() {
...
更改您的查询:
public IEnumerable<PieModel> getTypesForStatistics()
{
var dbo = new UsersContext();
var all = (from a in dbo.Note
select a).ToList();
var results = all.GroupBy(item => item.language.lang)
.Select(g => new PieModel
{
Language = g.Key,
Count = g.Count()
});
return results.ToList();
}