数据更改时更新telerik图表

时间:2012-02-10 11:12:57

标签: c#-4.0 telerik

我有一个显示在telerik radchart中的缓冲区列表。 它显示正确,但当一个(或多个)缓冲区更新时,我想更新图表以反映新状态。 我唯一能做的就是从头开始重新创建图表,这是一个非常简单的解决方案,但不是很聪明...... 所以我的问题是,当一个映射为DataSeries的集合发生更改时,是否存在特殊的RadChart类型或某些选项以使图表自动更新。 有人可以帮忙吗?

以下是我用来创建图表的代码:

private void createChart()
    {
        //Set axis stuff and clear old configuration here

            //Create a dataseries for each values to draw
           foreach (ChannelKeyValueConfiguration channelKeyValue in this.Device.Configuration.ChannelConfigurations)
                {

                    IChannel channel = this.Device.Channels[channelKeyValue.Name];

                    DataSeries serie = new DataSeries();
                    serie.Definition = new LineSeriesDefinition();
                    serie.LegendLabel = channel.Description;

                    int i = 0;
                    int elNumber = channel.Measure.Buffer.Count;   //Neeeded to set xAxis values
                    DateTime minTime = channel.Measure.TimeStamp.Value.AddMilliseconds(-1 * elNumber * channel.Measure.PollingTime);   //Neeeded to set xAxis values

                    foreach (double point in channel.Measure.Buffer)   //Buffer is a Queue<T> that i use as data provider. It updates each x seconds.
                    {
                        i++;
                        serie.Add(new DataPoint() { XValue = minTime.AddMilliseconds( i * channel.Measure.PollingTime).ToOADate(), YValue = point });
                    }

                    RadTimeChart.DefaultView.ChartArea.DataSeries.Add(serie);
                }
            }

然后我有一个应该更新图表的事件处理程序。由于我不知道如何实现它,它只是重新创建它以便更新。

void StatusChanged(object sender, EventArgs e)
    {
        Dispatcher.BeginInvoke(new Action(delegate
        {
            createChart();
        }));
    }

请提供一些关于我如何更好地处理更新的想法。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

经过大量的搜索和测试后,我发现telerik的图表很慢,如果不使用Queue来破坏你的图表,有时会使用内存开始频繁增加。 然而,他们确实提供了一些非常好的examples in their site,就像实时数据一样,这正是我所寻找的。