我有一个包含2列数据的linq查询创建的列表。
var result = root.Descendants().Elements("sensor")
.Where(el => (string)el.Attribute("name") == "Sensor1")
.Elements("evt")
.Select(el => new { t1 = el.Attribute("time").Value,
v1 = el.Attribute("val").Value })
.ToList()
我正在尝试使用图表控件数据源来使用该列表,但是当我调用bind方法时,我收到此错误:
System.ArgumentException未处理HResult = -2147024809
消息=系列数据点不支持类型的值 <> f__AnonymousType0`2 [System.Double,System.Decimal]仅限值 可以使用这些类型:Double,Decimal,Single,int,long,uint, ulong,String,DateTime,short,ushort。
//result is a generic list defined as var result = root.Descendants()
chart1.DataSource = result;
chart1.DataBind(); // This is line that causes the exception.
问候。
答案 0 :(得分:0)
是的,但可以通过将列表绑定到Chart
本身来实现。
有几种完全不同的方法可以做Chart Databinding,所有方法都有不同的优点和缺点..
我建议使用Series.Points.DataBindXY
或Series.Points.DataBind
方法。
以下是一个例子:
// create a list with test data:
List<PointF> points = new List<PointF>();
for (int i = 0; i < 100; i++) points.Add(new PointF(i, 1f * i / 2f * R.Next(8)));
现在从中创建一个通用列表:
var al = points.Select(x => new { t1 = x.X, v1 = x.Y }).ToList();
现在可行:
someSeries.Points.DataBindXY(al, "t1", al, "v1");
或者也是这样:
someSeries.DataBind(al, "t1", "v1", "" );
在你的情况下,你可以这样写:
chart1.Series[0].Points.DataBind(result, "t1", "v1");
请注意,Chart
通常只能显示对值,而DGV
可以创建尽可能多的列 DataSource
} 具有。所以Chart
需要一些帮助才能找到x值和y值。