首先抱歉我的英语。
我正在尝试从W3School学习ASP.NET。有两个示例关于如何在Web网格和图表助手中显示数据库中的数据。
以下代码在网格中正常运行,并在网页中显示数据。
@{
var db = Database.Open("SmallBekery");
var selectQueryString = "SELECT * FROM Product ORDER BY Name";
var data = db.Query(selectQueryString);
var grid = new WebGrid(data);
}
<div id="grid">
@grid.GetHtml()
</div>
但是当我尝试使用下面的代码表示网页图表时,我收到错误消息。
@{
var db = Database.Open("SmallBekery");
var dbdata = db.Query("SELECT Name, Price FROM Product");
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Product Sales")
.DataBindTable(dataSource: dbdata, xField: "Name")
.Write();
}
例外框指向此行:“var myChart = new Chart(width:600,height:400)”
但是,当我使用此代码时,图表助手可以正常工作。
@{
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Employees")
.AddSeries(chartType: "column",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
堆栈跟踪是:
在System.Linq.Enumerable.Iterator
1.System.Collections.IEnumerator.Reset() at System.Web.UI.DataVisualization.Charting.ChartImage.GetDataSourceMemberNames(Object dataSource, Boolean usedForYValue) at System.Web.UI.DataVisualization.Charting.ChartImage.DataBindTable(IEnumerable dataSource, String xField) at System.Web.Helpers.Chart.DataBindChart(Chart chart) at System.Web.Helpers.Chart.ExecuteChartAction(Action
1次操作) 在System.Web.Helpers.Chart.GetBytes(String format) 在System.Web.Helpers.Chart.Write(String format) 在ASP._Page_Products_cshtml.Execute()在c:\ Users \ Roham \ Documents \ Visual Studio 2015 \ Projects \ WebPagesLab \ WebPagesLab \ Products.cshtml:第10行 在System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 在System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) 在System.Web.WebPages.WebPage.ExecutePageHierarchy() 在System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage) 在System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext)
我很感激听到你的建议。
答案 0 :(得分:0)
在您的情况下解决它的最简单方法是获取查询结果,并在生成Chart
时将它们作为数组或其他具体的可枚举数据结构传递。试试这个:
@{
var db = Database.Open("SmallBekery");
var dbdata = db.Query("SELECT Name, Price FROM Product");
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Product Sales")
.DataBindTable(dataSource: dbdata.ToArray(), xField: "Name")
.Write();
}
类似的问题:Can't bind datatable to Chart Control
如前所述,DataTable
未实现IEnumerable
,因此无法直接处理数据库查询结果。 Chart.AddSeries()
遇到同样的问题。