Как создать линейный график в C #, используя данные из базы данных? - PullRequest
1 голос
/ 05 мая 2019

Я хочу создать линейный график, где по оси 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);
}

Когда я хочу создать точки, у меня возникает следующая ошибка: «Точки или данные не работают», тип значения «System.Linq.Enumerable + WhereSelectEnumerableIterator». Вы можете использовать Double, Decimal, Single, int, long, uint, ulong , String, Datetime, короткий, ushort. "

Но данные в ListOfDates имеют тип Datetime, а Price - тип Double. Как мне изменить тип?

1 Ответ

1 голос
/ 05 мая 2019

Чтобы сообщить 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, и вы не сможете использовать их ни для чего, ни для форматирования, ни для поиска, ни для выравнивания точек рядов.

...