【问题标题】:Showing data by percentage on Pie Charts in MVC在 MVC 中的饼图上按百分比显示数据
【发布时间】:2015-05-08 00:16:07
【问题描述】:

在我的 MVC5 应用程序中,我有一个表格,假设它的名字是学生,每个学生都属于一个团队。我想按百分比向学生展示他们的团队。出于这个原因,我还创建了一个 ViewModel,以便将 Student 实体与 Team 实体连接起来。那么,如何在 Kendo UI 饼图中显示我想要的数据呢?你能看一下代码并纠正下面的错误吗?您能否提供适合这种方法的 View 示例?提前致谢。


ViewModel:

public class StudentViewModel
{
    public int StudentId { get; set; }

    public int TeamId { get; set; }

    public string TeamName { get; set; }

    public int TeamPercentage { get; set; }
}


控制器:

public ActionResult Index_Read([DataSourceRequest] DataSourceRequest request)
{
    var dataContext = repository.Student;

    var result = dataContext.ToDataSourceResult(request, m => new StudentViewModel
        {
            StudentId = m.StudentId,
            TeamId = m.TeamId,
            TeamName = m.TeamName,

            TeamPercentage = //??? How can I obtain percentage by Lambda Expression ???
        }
    );
    return Json(result, JsonRequestBehavior.AllowGet);
}

【问题讨论】:

    标签: c# .net asp.net-mvc kendo-ui kendo-chart


    【解决方案1】:

    你可以这样做:

    视图模型

    public class StudentViewModel
    {
        public string category { get; set; }
        public int value { get; set; }
    }
    

    控制器(注意我在查询中做了一些假设)

    public ActionResult Index_Read()
    {
        var teamCount = repository.Team.Count();
        var result = repository.Student.GroupBy(g => g.TeamName).Select(s => new StudentViewModel { category = s.Key, value = s.Count()/teamCount });
        // Imagine result contains something like this: { category = "Team 1", value = "20" }, { category = "Team 2", value = "30" }, { category = "Team 3", value = "10" }, { category = "Team 4", value = "40" }
        return View(result);
    }
    

    查看

    @model IEnumerable<StudentViewModel>
    
    @(Html.Kendo().Chart()
        .Name("chart")
        .Title(title => title.Text("Teams").Position(ChartTitlePosition.Bottom))
        .Legend(legend => legend.Visible(true))
        .Series(series => series.Pie(Model))
    )
    

    替代方案

    另一种方法是使用数据源绑定。

    public class StudentViewModel
    {
        public string TeamName{ get; set; }
        public int Percentage { get; set; }
    }
    
    @(Html.Kendo().Chart<StudentViewModel>()
        .Name("chart2")
        .DataSource(ds => ds.Read("GetTeamData", "Home"))
        .Series(series => series.Pie(m => m.Percentage, model => model.TeamName))
    )
    

    【讨论】:

    • 虽然我设法通过分组设置了相关数据(名称和百分比)的适当属性,但图表上没有任何内容。我认为视图上的图表定义应该是固定的。你能看看上面并纠正它吗?提前致谢。
    • 我已经修复了代码并添加了另一种方法。测试了它,它在这里工作正常。应该足以让您上路。
    • 一切正常,除了在视图页面上渲染图表。唯一的问题与“将 int 转换为字符串”有关。当我在 ViewModel 上使用 TeamName 字符串值并尝试在 Controller 上使用它等于“s.Key”时,我遇到了错误。所以,我使用 toString() 方法来解决这个问题。但是虽然没有错误并且数据可以从控制器正确发送,但图表没有呈现,除了标题之外没有任何内容。 >>>
    • >>> 我有所有必要的 css 和 javascript 文件,当我使用 demos.telerik.com/aspnet-mvc/pie-charts/index 上的静态上下文时,我可以看到饼图。那么,索引页面或渲染方法有什么问题?
    • 显然我不知道你的数据库结构,我的查询只是一个例子。你现在真的应该有足够的信息来实现它。请注意,您的模型必须具有名为“类别”和“值”的属性,除非您将第二个示例与 lambda 表达式一起使用。
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多