如何使用数据库中的数据在C#中创建折线图?

时间:2019-05-05 14:04:42

标签: c# database loops charts linechart

我想创建一个折线图,其中在x轴上有日期,在y轴上有价格。

我已经从数据库中创建了所有日期和价格的列表。

var ListOfDates = DBaccess.GetOperationToList().Select(x =>x.Data.ToString());
var ListOfPrices = DBaccess.GetOperationToList().Select(x => x.Price);

for (int i = 0; i < ListOfDates.Count(); i++)
{
    chart2.Series["s1"].Points.AddXY(ListOfPrices, ListOfPrices);
}

当我要创建点时,出现以下错误“点od数据不起作用,请输入'System.Linq.Enumerable + WhereSelectEnumerableIterator'。您可以使用Double,Decimal,Single,int,long,uint,ulong ,String,Datetime,short,ushort。”

但是ListOfDates中的数据具有Datetime类型,而Price具有Double类型。如何更改类型?

1 个答案:

答案 0 :(得分:1)

要告诉Series实际的数据类型是什么,请使用此

chart2.Series[0].XValueType = ChartValueType.DateTime;

您可以像在代码中那样在循环中添加DataPoints,但是必须使用元素,而不是整个列表:

chart2.Series["s1"].Points.AddXY(ListOfDates[i], ListOfPrices[i]);

这假定两个列表的长度相等。

但是建议使用DataBinding

如果您的数据源具有命名属性,则可以使用这种形式的数据绑定:

chart2.Series[0].Points.DataBindXY(datalist, "date", datalist, "price");

如果没有,则可以创建组合数据源,如下所示:

var ListOfData = DBaccess.GetOperationToList()
                         .Select(x => new { date = x.Data, price = x.Price});

然后将其绑定:

 chart2.Series[0].Points.DataBind(ListOfData, "date", "price", "");

请注意,如果像您一样将x值添加为字符串,它们将以0s的形式存储,您将无法将它们用于任何内容,既不能格式化,也不能搜索或对齐它们的点系列。