我正在尝试以编程方式为我的XyDataSeries
的每一列创建一个Datatable
,以用于图表(SciChart)。我之所以需要这样做是因为事先不知道列和名称的数量。
对于任何给定的序列,x值始终始终是从0开始的增量整数,y值是列值。
我将excel数据导入到Datatable
,然后将每个列作为Dictionary
传递到List
,其中列标题是List
的名称,如下所示;
dict = dt.Columns.Cast<DataColumn>().ToDictionary(c => c.ColumnName, c => dt.AsEnumerable().Select(r => r[c]).ToList());
我可以在
Dictionary<string, XyDataSeries<double, double>>
位置执行上述操作吗?假设我确实知道列的数量及其名称,那么我可以对每个列/列表执行类似的操作;
手动创建
XyDataSeries
并遍历列表以附加值。然后,将图表(在XAML中定义)的chartseries.DataSeries设置为相应的XyDataSeries
。var list = dict["ListName"];
XyDataSeries<double, double> xyseries;
xyseries = new XyDataSeries<double, double>() { SeriesName = "ListName" };
foreach (var i in list)
{
double x = 1;
var d = Convert.ToDouble(i);
xyseries.Append(x++, d);
}
chartseries.DataSeries = xyseries;
我还必须在XAML中声明该系列-我可以解决这个问题吗?
但是,必须执行600次以上仍不是理想的选择,我非常渴望为此提供一个优雅的解决方案。
最佳答案
我可以在Dictionary<string, XyDataSeries<double, double>>
位置执行上述操作吗?ToDictionary
方法接受Func<TSource, TElement>
作为其第二个参数。因此,您可以在此代码中创建并填充XyDataSeries<double, double>
。像这样:
dict = dt.Columns.Cast<DataColumn>()
.ToDictionary(c => c.ColumnName, c =>
{
var dataSeries = new XyDataSeries<double, double>();
double x = 1.0;
dataSeries.Append(dt.AsEnumerable().Select(_ => x++), dt.AsEnumerable().Select(r => Convert.ToDouble(r[c])));
return dataSeries;
});