当前位置:编程学习 > C#/ASP.NET >>

zedgraph在winform中画动态柱状图(棒状图,直方图)

我在winform中用zedgraph控件画柱状图,定时刷新,为什么不数据不能更新呢
 private void GraphBar(string [] lables,double [] i_values,double []v_values  )
        {   GraphPane myPane = Zg_control.GraphPane;
            myPane.Title.Text = "";
            myPane.XAxis.Title.Text = "";
            myPane.YAxis.Title.Text = "";
            myPane.CurveList.Clear();
            myPane.GraphObjList.Clear();
                
            myPane.Title.Text= "变压柜电流/电压柱状图";
            myPane.XAxis.Title.Text  = "电流/电压值";
            myPane.YAxis.Title.Text  = "电压电流值";
            
            

            BarItem myBar = myPane.AddBar("curve_I" ,null ,i_values ,Color .Red );
            myBar = myPane.AddBar("curve_V",null ,v_values,Color .Green  );
           
           
            Zg_control.AxisChange();
            //Zg_control.Invalidate();
            Zg_control.Refresh();
           }
传入正确的参数后我就定期调用这个方法,可是直方图不更新啊
void KepGroup_AsyncReadComplete(int TransactonID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Quantities, ref Array TimeStamps, ref Array Errors)
        {
            listView1.Items.Clear();
            string GK;
            string V;
            string I;
            int p = 0;
            zg_lables = new string[NumItems / 3];
            I_values = new double[NumItems / 3];
            V_values = new double[NumItems / 3];
            int result;
            int resultI;
            int resultV;

            Array.Sort(ClientHandles);//搜索前一定要进行排序
            ListViewItem viewitem;
            try
            {
                if (TransactonID == READASYNC_ID)
                {

                    for (int i = 1; i <= NumItems; i = i + 3)
                    {

                        result = Array.BinarySearch(ClientHandles, i);

                        if (result > 0)
                        {
                            GK = ClientHandles.GetValue(result).ToString();//获取开关句柄

                            viewitem = new ListViewItem(GK);//第i行第1列

                            zg_lables[p] = GK;

                            resultI = Array.BinarySearch(ClientHandles, i + 2);//获取电流项句柄


                            if (resultI > 0)
                            {



                                I = ItemValues.GetValue(resultI).ToString();

                                viewitem.SubItems.Add(I);//第i行第2列 
                                I_values[p] = Convert.ToDouble(I);
                            }



                            else
                            {
                                break;
                            }


                            resultV = Array.BinarySearch(ClientHandles, i + 1);//获取电压项句柄
                            if (resultV > 0)
                            {


                                V = ItemValues.GetValue(resultV).ToString();

                                viewitem.SubItems.Add(V);//第i行第2列
                                V_values[p] = Convert.ToDouble(V);



                            }

                            else
                            {
                                break;
                            }

                        }

                        else
                        {
                            break;
                        }



                        listView1.Items.Add(viewitem);
                        p++;


                    }
                    GraphBar(zg_lables, I_values, V_values);
                }


            }
            catch (Exception ee)
            {
                MessageBox.Show("异步读完成处理失败:"+ee .Message ,"提示信息",MessageBoxButtons .OK ,MessageBoxIcon.Warning);
            }

        }
    快帮我看一下啊           --------------------编程问答--------------------
//Zg_control.Invalidate();
--------------------编程问答-------------------- invalidate()这个方法我试了,也不行啊,所以我才用的Zg_control.Refresh()啊,而且下面这段代码,我做了测试,是可以动态刷新柱状图的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ZedGraph;

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int i = 0;
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
           
            string[] labes = { "1", "2", "3", "4" };
            double[] I = { i + 1, i - 1, i + 5, i - 4 };
            double[] V = { i + 5, i - 4, i + 3, i - 7 };
            label1.Text = i.ToString();
            GraphBar(labes, I, V);
            i++;
        }

       
        private void GraphBar(string[] lables, double[] i_values, double[] v_values)
        {
            GraphPane myPane = Zg_control.GraphPane;
            myPane.CurveList.Clear();
            myPane.GraphObjList.Clear();

            myPane.Title.Text = "";
            myPane.XAxis.Title.Text = "";
            myPane.YAxis.Title.Text = "";


            myPane.Title.Text = "变压柜电流/电压柱状图";
            myPane.XAxis.Title.Text = "电流/电压值";
            myPane.YAxis.Title.Text = "电压电流值";




            BarItem myBar = myPane.AddBar("curve_I", null,i_values, Color.Red);
            myBar = myPane.AddBar("curve_V", null, v_values, Color.Green);

           myPane.XAxis.Type = AxisType.Text;
           myPane.XAxis.Scale.TextLabels = lables;

            Zg_control.AxisChange();

            Zg_control.Refresh();






        }

    } --------------------编程问答-------------------- 同志们。。帮帮忙啊。。还在受此问题困扰呢,三天了 --------------------编程问答-------------------- Zg_control.AxisChange();

  Zg_control.Refresh();
我就是这样啊。可以刷新的,但是我发现每次刷新后柱子上的数据不显示,要滚动一下滚动条才行。 --------------------编程问答-------------------- 做图形控件可以用第三方控件,我们的平台做这种就比较方便。
查看地址 --------------------编程问答-------------------- 重新绘制之前要清除
                  mypie.GraphPane.GraphObjList.Clear();
                mypie.GraphPane.CurveList.Clear();
                //mypie.XAxis.Scale.TextLabels = null;
                mypie.Refresh();
                mypie.AxisChange();
补充:.NET技术 ,  组件/控件开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,