【问题标题】:C# MVC - Drawing Bar Chart from Variables within LoopC# MVC - 从循环内的变量中绘制条形图
【发布时间】:2016-01-29 05:02:45
【问题描述】:

我的问题是针对: Showing System.Web.Helpers.Chart in a partial view from the model

@{
    var myChart = new Chart(width: 600, height: 400)
        .AddTitle("Chart Title")
        .AddSeries(
            name: "Employee",
            xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" },
            yValues: new[] { "2", "6", "4", "5", "3" })
        .Write();
}

有没有人能够在 xValue 和 yValue 中使用循环中的值。目前在示例中,我发现所有值都是硬编码的。

我想使用下面 foreach 语句中的 item.season 作为 X 和 item.year 作为 Y(第一次收集主题,第二次收集年份和季节):

string json2 = File.ReadAllText(@"C:\Temp\Assess.json");
var root = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<WebApplication1.Models.SchoolSubject>>(json2);
        foreach (var subject in root)
        {
            <h2>@Html.Raw(subject.Subject)</h2>
            foreach (var item in subject.AppScores)
            {
               <p>@Html.Raw(item.Season)</p> 
                <p>@Html.Raw(item.year)</p>
                <p>@Html.Raw(item.value)</p>
                }
            }

包含类代码的模型:

public class SchoolSubjectAppScore
    {
        public string Season { get; set; }
        public string year { get; set; }
        public string value { get; set; }
    }
    public class SchoolSubject
    {
        public SchoolSubject() { this.AppScores = new List<SchoolSubjectAppScore>(); }
        public string Subject { get; set; }
        public List<SchoolSubjectAppScore> AppScores { get; set; }
    }

我拥有的 JSON 文件是:

[{"Subject": "English","AppScores": [{"Season": "Winter","year": "2009", "value" : "20" }, {"Season": "Summer","year": "2009", "value" : "38"}]}, {"Subject": "Maths","AppScores": [{"Season": "Winter","year": "2009", "value" : "10"}, {"Season": "Summer","year": "2009", "value" : "27"}]}]

我想要的图表上的输出是两个系列 - 数学/英语,xValue - Season/Year 和 yValue - Value。

任何想法,因为我到处寻找帮助。

【问题讨论】:

    标签: c# asp.net asp.net-mvc loops charts


    【解决方案1】:

    这很容易。当您在循环中时,您只需要将您的 Season 和 year 数据从 json 添加到 List。拥有List 后,您可以将其转换为数组并将其分配给图表。请参阅下面的更新代码。

    string json2 = File.ReadAllText(@"C:\Temp\Assess.json");
    var root = new System.Web.Script.Serialization.JavaScriptSerialize().Deserialize<List<WebApplication1.Models.SchoolSubject>>(json2);
    
    var seasons = new List<string>();
    var years = new List<string>();
    
        foreach (var subject in root)
        {
            <h2>@Html.Raw(subject.Subject)</h2>
            foreach (var item in subject.AppScores)
            {
                <p>@Html.Raw(item.Season)</p> 
                <p>@Html.Raw(item.year)</p>
    
                seasons.Add(item.Season);
                years.Add(item.year);
                }
            }
    

    完成上述操作后,您可以将seasons 和years 添加到图表中。

    @{
    var myChart = new Chart(width: 600, height: 400)
        .AddTitle("Chart Title")
        .AddSeries(
            name: "Employee",
            xValue: seasons.ToArray(),
            yValues: years.ToArray())
        .Write();
    }
    

    【讨论】:

    • 感谢您对此的帮助,我如何在图表上显示两列而不是一列,例如数学(蓝色)和英语(红色)。另外我如何将Season\Year的标题组合在一起?这可能吗,再次感谢您的帮助 Martin :)
    • 对不起,我没有得到你的问题。你能用细节更新你的问题以在 X 和 Y 轴上显示你想要的吗?
    • 嗨马丁,我想要的图表输出是两个系列 - 数学/英语,xValue - 季节/年份和 yValue - 价值。
    • 请展示您为实现此目标而编写的代码,如果有任何问题,我可能会帮助您解决问题。
    • 如果您需要更多关于添加多个系列的信息,请查看此链接,msdn.microsoft.com/en-us/library/…
    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    相关资源
    最近更新 更多