gpt4 book ai didi

c# - 图表绑定(bind)到非原始类型

转载 作者:行者123 更新时间:2023-11-30 20:28:56 24 4
gpt4 key购买 nike

我有一个 C#.NET Windows 窗体应用程序,该应用程序使用一个包含多个线系列的图表。我有一个存储读数的物理设备,当我下载读数时,我希望图表能够填充详细信息。

我在软件中创建了可量化值(例如温度)的类型,这些值可能会根据位置使用不同的单位,从而允许我对显示单位进行用户设置,并且无需关心地处理后台的所有内容,并且当它以正确的单位显示给用户时。

C#.NET Charting.Series 类非常严格,当尝试使用绑定(bind)数组进行绘制时,它会抛出一个 ArgumentExeption 语句:“系列数据点不支持 Units.Temperature 类型的值,只有这些类型的值可以使用:Double、Decimal、Single、int、long、uint、ulong、String、DateTime、short、ushort。

Temperature 类型有一个名为 Value 的属性,它是一个 double 型,也可以隐式转换为 double 型,但这似乎无关紧要。我希望有一种方法可以绑定(bind)它,以便它在请求结果数组中的值时进行转换,以便它可以正确绘制图形,任何人都知道这是怎么回事 可能完成了吗?

我希望避免只需要 LogItem[] 和次要的 double[] 来进行转换。

private LogItem[] results;

private async void GraphPage_Load(object sender, EventArgs e) {
var count = await device.LogCount.Read(CancelToken);
results = new LogItem[count];
graph.DataSource = results;
graph.Series[0].XValueMembers = nameof(LogItem.DateTime); //Type is System.DateTime
graph.Series[0].YValueMembers = nameof(LogItem.Temperature); //Type my library, Units.Temperature

var prog = new Progress<double>();
prog.ProgressChanged += (sender2, e2) => {
BeginInvoke(new Action(() => {
progBar.Value = results.Count(log => !Equals(log, LogItem.Empty));
CheckEmptyPoints(); //Sets or clears Points[x].IsEmpty;
graph.Invalidate(); //Force graph to draw new results, maybe a better way of doing this?
}));
};
await device.DownloadLogs(CancelToken, results, prog); //Takes output buffer and IProgress to report more data has been downloaded.
}

最佳答案

您可以使用 linq 将结果调整为图表友好的形状。例如:

var list = results.Select(x => new { X = x.DateTime, Y = x.Temprature.Value }).ToList();
this.chart1.DataSource = list;
this.chart1.Series[0].XValueMember = "X";
this.chart1.Series[0].YValueMembers = "Y";

XY 只是占位符,您可以使用 DateTimeTempratue 或任何合适的标签。

关于c# - 图表绑定(bind)到非原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46794040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com