c# - DotNet.Highcharts : Cost not plotted against the correct date

标签 c# sql asp.net datatable dotnethighcharts

我正在创建一个 DotNet.Highcharts使用来自两个表的数据的图表:支出和收入。我正在使用 SQL 语句为每个创建一个 DataTable。第一个(用于收入)称为 Dt 包含 IncCostIncDate。第二个(用于支出)称为 Dt2 包含 ExpCostExpDate

我能够根据 IncDate 绘制 IncCost 和针对 ExpDate 绘制 ExpCost。当我尝试连接 IncDateExpDate(最终)时出现问题,因为 IncCostExpCost 的成本是绘制日期在(最终)中的位置,而不是它相关的实际日期。

下面是我用来创建每个 DataTable 的调用:

SqlDataAdapter Adp = new SqlDataAdapter("select CONVERT(DATETIME, IncDate, 103) AS IncDate, SUM(IncCost) AS IncCost from Incomings GROUP BY CONVERT(DATETIME, IncDate, 103) ORDER BY CONVERT(DATETIME, IncDate, 103)", con);

SqlDataAdapter Adp2 = new SqlDataAdapter("select CONVERT(DATETIME, ExpDate, 103) AS ExpDate, SUM(ExpCost) AS ExpCost from Expenditures GROUP BY CONVERT(DATETIME, ExpDate, 103) ORDER BY CONVERT(DATETIME, ExpDate, 103)", con);

这是从数据表中调用每一个的代码

var dateArr = Dt.AsEnumerable().Select(r => r.Field<DateTime>("IncDate")).ToArray();
var objectArr = Dt.AsEnumerable().Select(r => r.Field<object>("IncCost")).ToArray();

var dateArr2 = Dt2.AsEnumerable().Select(r => r.Field<DateTime>("ExpDate")).ToArray();
var objectArr2 = Dt2.AsEnumerable().Select(r => r.Field<object>("ExpCost")).ToArray();   

var res = dateArr.Concat(dateArr2).ToArray();
var final = res.Select(d => d.ToString(@"dd\/MM\/yyyy")).ToArray();

下面是我用来创建图表的代码:

Highcharts chart = new Highcharts("graph")
  .SetTitle(new Title { Text = "Incoming Stats" })
  .SetXAxis(new[] { new XAxis { Categories = final } })
  .SetYAxis(new YAxis { Title = new YAxisTitle { Text = "Amount Incoming" } })
  .SetSeries(new[]
    {
      new Series { Name = "inc", Data = new Data(objectArr)},
      new Series { Name = "exp", Data = new Data(objectArr2) }
    });

Plot 1

如您所见,正在创建系列,但它们是根据数组中的数字绘制的,而不是根据它应该链接到的日期绘制的。

我不确定我离解决方案有多近或多远,但我们将不胜感激。 这是我的收入数据表

Here is the data for my incomings datatable Dt

这是我的支出数据表

Here is the data for my expenditures datatable (Dt2)

真的不知道该怎么办。非常感谢任何信息

最佳答案

您的 Y 值与 X 值完全脱节。为了实现你想要的,你需要重组你的数据如下:

        DateTime dt = new DateTime(2016, 2, 27);

        Highcharts chart = new Highcharts("graph")
           .SetTitle(new Title { Text = "Incoming Stats" })
           .SetXAxis(new XAxis { Type = AxisTypes.Datetime })
           .SetYAxis(new YAxis { Title = new YAxisTitle { Text = "Amount Incoming" } })
           .SetSeries(new[]
             {
              new Series { Name = "inc", Data = new Data(new object[,] { 
                  {dt , 23 }, 
                  {dt.AddDays(1) , 223 }, 
                  {dt.AddDays(2) , 51 }, 
                  {dt.AddDays(11) , 200 }, }) },
              new Series { Name = "exp", Data = new Data(new object[,] { 
                  {dt.AddDays(5) , 100 }, 
                  {dt.AddDays(6) , 23 }, 
                  {dt.AddDays(11) , 23 }, 
                  {dt.AddDays(19) , 35 }, 
                  {dt.AddDays(35) , 288 }, }) }
             });

enter image description here

编辑: 如何动态地做到这一点:

        object[,] data1 = new object[Dt.Rows.Count, 2];
        for (int i = 0; i < Dt.Rows.Count; i++)
        {
            data1[i, 0] = Dt.Rows[i]["IncDate"];
            data1[i, 1] = Dt.Rows[i]["IncCost"];
        }

        object[,] data2 = new object[Dt2.Rows.Count, 2];
        for (int i = 0; i < Dt2.Rows.Count; i++)
        {
            data2[i, 0] = Dt2.Rows[i]["ExpDate"];
            data2[i, 1] = Dt2.Rows[i]["ExpCost"];
        }

        Highcharts chart = new Highcharts("graph")
           .SetTitle(new Title { Text = "Incoming Stats" })
           .SetXAxis(new XAxis { Type = AxisTypes.Datetime })
           .SetYAxis(new YAxis { Title = new YAxisTitle { Text = "Amount Incoming" } })
           .SetSeries(new[]
             {
                    new Series { Name = "inc", Data = new Data(data1) },
                    new Series { Name = "exp", Data = new Data(data2) }
             });

enter image description here

从数据库中检索的数据:

enter image description here

enter image description here

关于c# - DotNet.Highcharts : Cost not plotted against the correct date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35802637/

相关文章:

.net - .NET 4.0 网站加载速度更快是有原因的吗?

c# - 如何从另一个点知道相邻点

c# - 什么是轻量级事件?

sql - BCP 导入帮助

MySQL 查询 - 返回每个月过去 12 个月记录的值

c# - 在 ASP.NET C# Web 应用程序中动态创建图像的正确方法?

c# - 从文件系统读取 ASPX 文件并呈现为 HTML

c# - 在 PDFsharp 中打开文档

c# - 将 SAXON 9.5 (nuget) 与 Schematron 结合使用

mysql - sql子查询如何获取想要的值