我創建了一個DotNet.Highcharts圖表使用兩個表中的數據:支出和收入。我正在使用SQL語句爲每個創建一個DataTable
。第一個(Incomings)Dt
包含IncCost
和IncDate
。第二個(用於支出)名爲Dt2
包含ExpCost
和ExpDate
。DotNet.Highcharts:成本沒有繪製在正確的日期
我可以繪製IncCost
與IncDate
和ExpCost
對ExpDate
。當我嘗試連接IncDate
和ExpDate
(最終)時,問題就出現了,因爲IncCost
和ExpCost
的成本是針對(最終)日期的位置繪製的,而不是與其相關的實際日期。
這裏是調用我用它來創建每個數據表:
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();
代碼這裏是我用來創建代碼我highchart:
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) }
});
正如您所看到的,該系列正在創建中,但它們正在針對數組中的數字進行繪圖,而不是針對它應該鏈接的日期進行繪製。
我不知道我對解決方案有多接近或遠遠,但任何幫助表示讚賞。 這裏是我的進帳數據表
這裏是我的支出數據表
真的不知道如何去這一點。任何信息將不勝感激
感謝你爲這個,雖然我希望它是動態的,而不是手動輸入數據 – Stuart
您可以動態地做到這一點....我指出哪些核心問題在這裏:你正在使用錯誤的構造函數重載'Data(object [] data)',這導致你的'Series'的X和Y被完全解除關聯。相反,使用'Data(object [,] data)',這樣你有一組[X,Y]對,它解決了你所遇到的問題,而不是有兩個獨立的數組[X]和[Y ]彼此無關。無論您是否動態獲取數據結構,您的數據結構保持結果必須與上面顯示的結構相同。 – jsanalytics
謝謝你的幫助。雖然我不知道如何以您建議的方式重構我的代碼以使其動態變化 – Stuart