我在ASP.NET

时间:2015-11-17 07:44:44

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

首先抱歉我的英语。

我正在尝试从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();
} 

错误的屏幕截图是: Error message screenshot

例外框指向此行:“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)

Table Definition

我很感激听到你的建议。

1 个答案:

答案 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()遇到同样的问题。