C#以编程方式创建xyseries

时间:2017-12-04 14:03:48

标签: c# wpf xaml scichart

我正在尝试以编程方式为我的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并迭代列表以附加值。然后,我将图表的chartseries.DataSeries(在XAML中定义)设置为相应的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次远非理想,我真的很想要一个优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

  

我可以执行上述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;
    });