chartControl.SeriesDataMember = "Series";
     chartControl.SeriesTemplate.ArgumentDataMember = "Arguments";
     chartControl.SeriesTemplate.ValueDataMembers.AddRange(new string[] { "Values" });
     this.chartControl.DataSource = this.pivotGridControl; //pivotGridControl也是dev的一个控件这是基本的赋数据源的代码……但是chartControl在画图的时候特别的慢,尤其是数据稍多的时候!
所以想加一个进度条!
搞了好久效果皆不理想,原因是没有找到这个控件关于表绘图结束相关的事件,方法或者属性.
所以……达人有做过类似的,或者知道的方法,原理的,有代码更好!
300分送上…………(额……最多100分,悲剧!如能解决,另给300)

解决方案 »

  1.   

    为什么要绘图表的事件呢?如果数据多的话,你可以使用多线程来做,用线程来填充Charts数据并显示进度条
    进度条只和数据有关系,和这个控件没关系的,控件只是一个显示数据的"工具"而已.至于你要数据自己传到它的里面去是自己控制的
      

  2.   


    额……我要的就是他绘图的一个状态,好来控制进度。而且它的数据源不是一个表,而是pivotGridControl控件中所选的数据(可以是任意多个不相邻得cell),所以我想在它绘图的时候根据它的绘图来确定!继续坐等达人……
      

  3.   


    估计用 EevExpress 插她 控件的不多
      

  4.   

    代码来
            #region MarqueeProcess 显示连续滚动的进度条
            /// <summary>
            /// 显示连续滚动的进度条
            /// </summary>
            public void MarqueeProcess()
            {
                this.Hide();
                m_ProgressThread = new Thread(new ThreadStart(ProgressAutoRun));
                m_ProgressThread.IsBackground = true;
                m_ProgressThread.Start();
            }        private void ProgressAutoRun()
            {
                frmProgress fp = new frmProgress();
                fp.StepValue = 1;
                fp.NewProcess(100);            while (true)
                {
                    if (fp.CurProgressValue >= fp.MaxProgressValue)
                        fp.SetProcessValue(fp.MinProgressValue);
                    else
                        fp.SetProcessValue(fp.CurProgressValue + fp.StepValue);
                    fp.Refresh();
                    Thread.Sleep(100);
                }
            }        #endregion        private Thread m_ProgressThread;        #region StepValue 阶段进度值
            /// <summary>
            /// 阶段进度值
            /// </summary>
            public int StepValue
            {
                get
                {
                    return this.progressBar1.Step;
                }
                set
                {
                    this.progressBar1.Step = value;
                }
            }
            #endregion        #region CurProgressValue 当前进度值
            /// <summary>
            /// 当前进度值
            /// </summary>
            public int CurProgressValue
            {
                get
                {
                    return this.progressBar1.Value;
                }
            }
            #endregion        #region MinProgressValue 最低进度值
            /// <summary>
            /// 最低进度值
            /// </summary>
            public int MinProgressValue
            {
                get
                {
                    return this.progressBar1.Minimum;
                }
                set
                {
                    this.progressBar1.Minimum = value;
                }
            }
            #endregion        #region MaxProgressValue 最高进度值
            /// <summary>
            /// 最高进度值
            /// </summary>
            public int MaxProgressValue
            {
                get
                {
                    return this.progressBar1.Maximum;
                }
            }
            #endregion        #region NewProcess 创建并显示进度条
            /// <summary>
            /// 创建并显示进度条
            /// </summary>
            /// <param name="progressBarMaximum"></param>
            public void NewProcess(int ProgressMaximum)
            {
                this.progressBar1.Style = ProgressBarStyle.Blocks;
                this.progressBar1.Minimum = 0;
                this.progressBar1.Maximum = ProgressMaximum;
                this.progressBar1.Value = 0;
                this.TopMost = true;
                this.Visible = true;
            }
            #endregion        #region HideProcess 隐藏进度条
            /// <summary>
            /// 隐藏进度条
            /// </summary>
            public void HideProcess()
            {
                if (m_ProgressThread != null)
                {
                    m_ProgressThread.Abort();
                    m_ProgressThread = null;
                }
                if (this.Visible)
                {
                    this.Visible = false;
                }
            }
            #endregion        #region SetProcessValue 设置进度值
            /// <summary>
            /// 设置进度值
            /// </summary>
            /// <param name="value">进度值</param>
            public void SetProcessValue(int value)
            {
                if (value < this.progressBar1.Minimum)
                    value = this.progressBar1.Minimum;
                if (value > this.progressBar1.Maximum)
                    value = this.progressBar1.Maximum;            this.progressBar1.Value = value;
                this.Refresh();
            }
            #endregion
            frmProgress pmTest = new frmProgress();        pmTest.MarqueeProcess();        // 执行很慢的操作代码中间放        pmTest.HideProcess();
      

  5.   

    http://www.cnblogs.com/homer/archive/2008/05/21/1204060.html
      

  6.   

    前台代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <html>
     <head>
      <title>ajaxguagedemo</title>
      <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
      <meta name="CODE_LANGUAGE" Content="C#">
      <meta name=vs_defaultClientScript content="JavaScript">
      <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
      <script language=javascript >
    function returnresponse()
    {
      urls="ajaxguagedemo.aspx?guage=1";
      var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      xmlHttp.open("GET",urls,true);
      xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4)
        {
          temp=xmlHttp.responseText;
          document.getElementById("ddf").innerText=temp;
          if(temp!="100%")
          {
          returnresponse();
          }伊图教程网[www.etoow.com]
    http://www.etoow.com/html/2007-08/1186838995.html
        }
      }
      xmlHttp.send(urls);
    }
      </script>
     </head>
     <body MS_POSITIONING="GridLayout">
      <form id="Form1" method="post" runat="server">
      <input type=button onclick="returnresponse()" value=1111111>
      <div id=ddf></div>
      </form>
     </body>
    </html>
    后台代码如下:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Threading;
    namespace guagedemo
    {
      /// <summary>
      /// ajaxguagedemo 的摘要说明。
      /// </summary>
      public class ajaxguagedemo : System.Web.UI.Page
      {
        static public int percent=0;//静态变量,记录百分比
        private void Page_Load(object sender, System.EventArgs e)
        {
          // 在此处放置用户代码以初始化页面
          if(Request.QueryString["start"]!=null)
          {
            startThread();//开始新进程处理查数程序
          }
          if(Request.QueryString["guage"]!=null)
          {
            ajaxResponse();//响应ajax,返回百分比
          }
        }
        private void guage()伊图教程网[www.etoow.com]
    http://www.etoow.com/html/2007-08/1186838995-1.html
        {
          for(int i=0;i<100;i++)
          {
            percent++;
            Thread.Sleep(500);
          }
        }
        public void startThread()
        {
          System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(guage));
          thread.Start();
        }
        private void ajaxResponse()
        {
          Response.Write(percent.ToString()+"%");
          Response.Flush();
          Response.Close();
        }    Web 窗体设计器生成的代码
      }
    }
      

  7.   

    使用线程不行吗?
    用Sleep(int n); 然后连续相加得到进度
      

  8.   

    使用线程不行吗?
    用Sleep(int n); 然后连续相加得到进度
      

  9.   

    你去下载DevExpress源码,然后找到DevExpress.XtraCharts 重新改写即可DevExpress.XtraCharts 处理的时候并不是异步,因此你怎么写进度条都是不理想的
      

  10.   

    呵呵,你可以下载DevExpress源码?
      

  11.   

    你可以用DevExpress 的进度条marqueeProgressBarControl1 自己做一个新窗体,
    不过 这个进度条 是循环滚动 目的只是提示用户当前 程序运行正常,和控制其操作..        private void ShowWaitingForm()
            {
                frmWaiting pFrm = new frmWaiting(); //自己做的等待窗体
                pFrm.ShowInTaskbar = false;
                pFrm.TopMost = true;
                pFrm.ShowDialog();
            }在你的需要开始显示程序中加入
    Thread thread = new Thread(ShowWaitingForm);
    thread.Start();需要它不显示的时候就 杀掉它                if (thread != null)
                    {
                        //thread.Suspend();
                        thread.Abort();//杀掉它
                        thread.Join();
                    }
      

  12.   

    请不要忘记加分,我自己实现的代码:
                        //加载数据   最快的方式############################                    HistoryColtDataSeries.Points.Clear();              
                        HistoryColtDataSeries.Points.BeginUpdate();                             SqlConnection mysqlConn = new SqlConnection(szDBConnStr);
                        SqlCommand mysqlCmd = mysqlConn.CreateCommand();
                        mysqlCmd.CommandText = szQueryStr;
                        SqlDataAdapter MyDataAdapter = new SqlDataAdapter();
                        MyDataAdapter.SelectCommand = mysqlCmd;
                        DataSet MyDataSet = new DataSet();
                        mysqlConn.Open();                    int nRowNums = MyDataAdapter.Fill(MyDataSet, "ColtRecordSet");
                        mysqlConn.Close();
                        DataTable MyDataTable = MyDataSet.Tables["ColtRecordSet"];                    DevExpress.XtraCharts.SeriesPoint sp;
                        Double[] bi;                    foreach (DataRow MyDataRow in MyDataTable.Rows)
                        {
                            sp = new DevExpress.XtraCharts.SeriesPoint();
                            sp.Argument = MyDataRow["Collect_Time"].ToString();
                            bi = new double[1];
                            bi[0] = Double.Parse(MyDataRow["Collect_Value"].ToString());
                            sp.Values = bi ;                        HistoryColtDataSeries.Points.Add(sp);                        this.progressBar_LoadData.Value++;
                            Thread.Sleep(0);                                  //让出运行权   让UI主线程   有时间更新UI界面(进度条)
                        }                    HistoryColtDataSeries.Points.EndUpdate();                    //###################################################################################################################                    this.progressBar_LoadData.Value = nCount + 1;                                       chartControl1.Series.AddRange(new Series[] { HistoryColtDataSeries });     // 把串行数据对象  添加到图表                    this.label_Process.Text = "数据加载完成并成功更新显示!共计" + nCount + "点数据!";