DevExpress ChartControl 柱狀圖的使用【轉】


//中心業務平台的“熱門崗位信息監測”柱狀圖

 

public partial class HotJobInfo : UserControl
    {
        private object _objLock = new object();

        private delegate void getDataHandler();

        /// <summary>
        /// 熱門崗位數據
        /// </summary>
        private BarGraghData _barGraghData = null;

        public HotJobInfo()
        {
            InitializeComponent();
            //獲取熱門崗位數據
            //異步獲取數據,繪制圖表
            getDataHandler handler = new getDataHandler(GetHotJobDataInfo);
            IAsyncResult result = handler.BeginInvoke(new AsyncCallback(showLine), "AsycState:OK");
        }

        private void showLine(IAsyncResult result)
        {
            try
            {
                this.Invoke(
                            new Action(
                            delegate
                            {
                                //繪制圖表
                                ToLineGragh();
                            }));
            }
            catch { }
        }

        /// <summary>
        /// 獲取熱門崗位信息數據
        /// </summary>
        private void GetHotJobDataInfo()
        {
            try
            {
                lock (_objLock)
                {
                    //向服務器請求數據
                    Random ran = new Random();
                    int sjd = ran.Next(1, 1000);
                    string addr = ConfigurationManager.AppSettings["ServiceAddr"].ToString();
                    //去掉地址結尾的'/',否則請求中會出現兩個'/',而導致請求失敗
                    string url = string.Format(@"{0}/JobInfoCheck/GetHotJob", addr[addr.Length - 1] != '/' ? addr : addr.Substring(0, addr.Length - 1));
                    string response = Utility.HttpResult.GetHttpRequest(url, sjd.ToString());
                    BarGraghDataJson result = Utility.JsonHelper.JsonDeserialize<BarGraghDataJson>(response);
                    if (result.IsOK)
                    {
                        BarGraghData data = result.Result;
                        _barGraghData = data;
                    }
                }
              
            }
            catch {}
        }

        /// <summary>
        /// 把接收到的數據轉換額外柱狀圖表所需要的數據, 繪制圖表
        /// </summary>
        private void ToLineGragh()
        {
            ChartControl chartControl = new ChartControl();
            if (_barGraghData != null)
            {
                DataTable table = new DataTable();
                //橫坐標顯示值
                table.Columns.Add("hName", typeof(string));
                //縱坐標顯示值
                table.Columns.Add("value", typeof(int));
                for (int i = 0; i < _barGraghData.GWFLMC.Length; i++)
                {
                    DataRow row = table.NewRow();
                    row["hName"] = _barGraghData.GWFLMC[i];
                    row["value"] = _barGraghData.GWSL[i];
                    table.Rows.Add(row);
                }
                //動態生成一個柱狀圖表,調用下面的靜態方法
                chartControl = ToBarGraph.GetChartControl("", 0, table, "hName", "hName", "value");
            }
            //縱坐標標題
            chartControl.Dock = DockStyle.Fill;
            this.panel1.Controls.Add(chartControl);
            //X軸刻度間隔設置
            XYDiagram xydiagram = (XYDiagram)chartControl.Diagram;
            xydiagram.AxisX.MinorCount = 1;
            //小刻度是否顯示
            xydiagram.AxisX.Tickmarks.Visible = false;
            xydiagram.AxisX.Range.MinValueInternal = -0.5D;
        }
    }


    /// <summary>
    /// 熱門崗位信息監測菜單
    /// </summary>
    public class HotjobMenu : BtnMenuBase
    {
        public override UserControl GetEditControl()
        {
            return new HotJobInfo();
        }
    }

 

 

 

/// <summary>
    /// 生成柱狀圖類
    /// </summary>
    public static class ToBarGraph
    {
        /// 獲取圖表
        /// </summary>
        /// <param name="titleName">圖表名稱</param>
        /// <param name="viewType">圖表類型</param>
        /// <param name="dataSourse">數據源</param>
        /// <param name="textField1">顯示文字字段</param>
        /// <param name="textField2">橫坐標顯示的文字字段</param>
        /// <param name="valueField">顯示數值字段</param>
        /// <returns></returns>
        public static ChartControl GetChartControl(string titleName, ViewType viewType, DataTable dataSourse, string textField1, string textField2, string valueField)
        {
            ChartControl _ChartControl = new ChartControl();
            if (dataSourse == null || textField1 == "" || textField2 == "" || valueField == "")
            {
                return _ChartControl;
            }
            List<string> listTitle = new List<string>();
            foreach (DataRow item in dataSourse.Rows)
            {
                string title = item[textField1].ToString();
                if (listTitle.Contains(title))
                {
                    continue;
                }
                else
                {
                    listTitle.Add(title);
                    DataView dv = dataSourse.AsDataView();
                    dv.RowFilter = string.Format(" {0}='{1}' ", textField1, title);
                    DataTable dt = dv.ToTable();
                    // 柱狀圖里的第一個柱
                    Series Series1 = new Series(title, viewType);

                    Series1.ArgumentScaleType = ScaleType.Qualitative;
                    Series1.PointOptions.PointView = PointView.ArgumentAndValues;//顯示表示的信息和數據
                    Series1.PointOptions.ValueNumericOptions.Precision = 0;
                    Series1.DataSource = dt;
                    //柱狀圖柱子的寬度設置
                    BarSeriesView bsv = (BarSeriesView)Series1.View;
                    bsv.BarWidth = 7;

                    // 以哪個字段進行顯示
                    Series1.ArgumentDataMember = textField2;
                    Series1.ValueScaleType = ScaleType.Numerical;

                    // 柱狀圖里的柱的取值字段
                    Series1.ValueDataMembers.AddRange(new string[] { valueField });
                    Series1.LegendText = title;
                    _ChartControl.Series.Add(Series1);
                }
            }
            return _ChartControl;
        }

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM