我想创建一个折线图,其中在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类型。如何更改类型?
答案 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
的形式存储,您将无法将它们用于任何内容,既不能格式化,也不能搜索或对齐它们的点系列。