3

我正在尝试以编程方式XyDataSeries为我的每一列创建一个Datatable用于图表(SciChart)。我需要这样做是因为列和名称的数量事先是未知的。

对于任何给定的系列,x 值始终只是从 0 开始递增的整数,y 值是列值。

我将excel数据导入到Datatable,然后将每一列传递给Dictionarya,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 中定义)的 charteries.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 次远非理想,我真的非常渴望为此找到一个优雅的解决方案。

4

1 回答 1

1

我可以在哪里做类似上面的事情Dictionary<string, XyDataSeries<double, double>>吗?

ToDictionary方法接受 aFunc<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;
    });
于 2017-12-04T16:48:07.657 回答