问题描述
我已经苦苦挣扎了一段时间,但找不到任何与此相关的东西。我是Kendo的新手,可惜我找不到能帮助我解决问题,文档,论坛以及所有这些问题的东西:他们根本没有帮助。
情况: 我的ASP .NET应用程序中有一个viewmodel。我正在尝试从一种称为“类型”的特性中制作一张图表。这种专有性代表了一种数据类型-比方说水果,例如“香蕉”,“苹果”等。 此类型一次仅包含一种类型。它不能包含“苹果和香蕉”之类的内容。它也总是一个字符串。 这种礼节是更大模型的一部分。 但是我只对此感兴趣。
现在,我想做什么: 我想以此为依据,使用剑道制作图表。 这意味着,我必须将图表绑定到我的模型,然后,它将能够知道使用了其中一些类型的时间。 就像示例一样,如果我有三个对象: 姓名:“ Mjuzl” 类型:“土豆”
名称:“ Uijqf” 类型:“苹果”
名称:“ Zjli” 类型:马铃薯”
我希望char能够算出我的模型两次使用了Potato类型,而Apple使用了一次。 我知道如何获取包含使用我的模型的所有对象的数据源。 (我之前刚刚使用过Kendo Grid,但是它太简单了)我现在的问题是,我不知道-我也找不到任何东西-如何在图表中实际显示我想要的东西。我再说一遍,它们是字符串。我知道如何获取数据源。我不知道该如何展示自己想展示的内容。 (我应该使用列吗?部分?我不知道)
我是否需要从控制器构建一个JSON来要求数据库计数?剑道能自己做到吗?我很迷茫,我不知道剑道实际上正在等待什么使我的图表工作。该文档完全没有帮助。我研究了一段时间,没有发现任何描述完全相同的问题的东西。我一直在寻找几天。
我为将图片放在问题上而做的图像绘制得很差:
我不要求为我做,我要求一条路。一种方法。 谢谢。
解决方法
一种方法是专门为图表创建视图模型,然后可以根据数据填充该视图模型。
大致(未经测试的代码-只是为了给您提供一个主意),就像这样:
public class MyChartViewModel
{
public int TypeCount { get; set; }
public string TypeName { get; set; }
}
,然后在填充MyChartViewModel的图表的读取方法中:
var myExistingDataModel = howeverYouGetYourDataHere;
var model = new MyChartViewModel();
var distinctTypes = myExistingDataModel.Select(x => x.Type).Distinct().ToList();
foreach (var distinctType in distinctTypes)
{
model.TypeCount = myExistingDataModel.Count(x => x.Type == distinctType);
model.TypeName = distinctType;
}
,
最后!我做到了! 以后参考:
基于G_P的回答,我使用LINQ请求来计算我的所有类型:Linq distinct - Count(不要忘记删除.District(),否则我将无法工作!)
然后,我进行了一些调试以查看是否确实返回了数据,因为图表中没有显示任何内容。它确实返回了我的数据和正确的数字。
此案的问题是,我使用
return Json(types.ToDataSourceResult(request,ModelState));
将数据返回到图表。但是!关于Chart有一些小知识,它们不像网格那样工作。如果您使用ToDataSourceResult,则必须使用特定的设置来显示数据:https://docs.telerik.com/aspnet-mvc/html-helpers/charts/data-binding(请参阅“ 3)(可选)配置自定义数据源。”),只需更改对控制器的调用,然后更改即可!它起作用了!