如何使用数据库中的数据在 C# 中创建折线图?
How to create a line chart in c# using data from database?
我想创建一个折线图,其中 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);
}
当我要创建点时出现以下错误"Points od data doesn't work value type 'System.Linq.Enumerable+WhereSelectEnumerableIterator'. You can use Double, Decimal, Single, int, long, uint, ulong, String, Datetime, short, ushort."
但是ListOfDates里面的Data是Datetime类型,Price是Double类型。如何更改类型?
要告诉 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
并且您将无法将它们用于任何事情,无论是格式化、搜索还是对齐系列的点。
我想创建一个折线图,其中 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);
}
当我要创建点时出现以下错误"Points od data doesn't work value type 'System.Linq.Enumerable+WhereSelectEnumerableIterator'. You can use Double, Decimal, Single, int, long, uint, ulong, String, Datetime, short, ushort."
但是ListOfDates里面的Data是Datetime类型,Price是Double类型。如何更改类型?
要告诉 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
并且您将无法将它们用于任何事情,无论是格式化、搜索还是对齐系列的点。