C# 以编程方式创建 xyseries

标签 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并遍历列表以附加值。然后,我将图表(在 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 次远非理想,但我真的非常渴望为此找到一个优雅的解决方案。

最佳答案

Can i do something like the above where 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;
    });

关于C# 以编程方式创建 xyseries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635140/

相关文章:

.net - Debug.Fail 给我一个 "Dispatcher processing has been suspended"错误

c# - 如何在 UWP 中将 `DependencyProperty` 标记为 `BindsTwoWayByDefault`?

wpf - 如何更改 WPF `<Separator/>` 的高度?

WPF DataBinding - 完全困惑

c# - SelectedItem 更改文本 block 变量

c# - 如何在 Xamarin.Forms 中为条目添加背景图像?

c# - 在我的编译器(生成 IL)中编写单元测试

javascript - 在 C# 代码隐藏中调用 WebMethod,而无需在 ASPX 页面中使用服务器窗体

c# - 通过指纹查找证书

c# - 尝试从 AJAX 帖子重定向