DotNet.Highcharts:成本未针对正确日期绘制

Posted

技术标签:

【中文标题】DotNet.Highcharts:成本未针对正确日期绘制【英文标题】:DotNet.Highcharts: Cost not plotted against the correct date 【发布时间】:2016-06-18 13:50:57 【问题描述】:

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

我能够针对IncDateExpCost 针对ExpDate 绘制IncCost。当我尝试连接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) 
    );

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

我不确定我离解决方案有多近或多远,但感谢您提供任何帮助。 这是我的收入数据表

这是我的支出数据表

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

【问题讨论】:

【参考方案1】:

您的 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 , ) 
             );

编辑: 如何动态执行:

        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) 
             );

从数据库中检索到的数据:

【讨论】:

谢谢你,虽然我希望它是动态的,而不是手动输入数据 你可以动态地做到这一点......我在这里指出了核心问题:你使用了错误的构造函数重载Data(object[] data),这会导致你的@987654332 出现 X 和 Y @ 彼此完全分离。相反,使用Data(object[ , ] data),这样你就有了一个 [X,Y] 对的数组,它解决了你遇到的问题,而不是有两个彼此无关的单独数组 [X] 和 [Y] .无论您是否动态获取,保存结果的数据结构都必须具有与上图相同的结构。 感谢您的帮助。虽然我不知道如何按照您建议的方式重组我的代码以使其动态 非常感谢。我将在 13 小时内将其奖励给您 如果你在网上搜索 subquerycorrelated subquery 有很多资料。

以上是关于DotNet.Highcharts:成本未针对正确日期绘制的主要内容,如果未能解决你的问题,请参考以下文章

React-Native 我不断收到“您的二进制文件未针对 iPhone 5 进行优化”,但我有正确的图像?

软件成本估算:COCOMO 2模型方法的目录

提交时“您的二进制文件未针对 iPhone 5 进行优化”(ITMS-90096)

与用于日期查询的 Gmail Web UI 相比,Gmail API 未返回正确的电子邮件

OVF3为订单原因分配成本中心时报错“成本中心未定义”,消息号:VT806

5个测试Vue.js程序的有用工具和库