DevExpress
DevExpress控件ChartControl 柱状图、折线图、扇形图的使用
- 扇形图:效果
代码实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.XtraCharts; namespace WindowsFormsApplication1.dev { public partial class CharPei : Form { public CharPei() { InitializeComponent(); } private void CharPei_Load(object sender, EventArgs e) { BuilderDevChart(); DataTable dt = CreateChartData(); gridControl1.DataSource = dt; } private DataTable CreateChartData() { DataTable table = new DataTable("Table1"); table.Columns.Add("Name", typeof(String)); table.Columns.Add("Value", typeof(Int32)); table.Rows.Add(new object[] { "A", 10 }); table.Rows.Add(new object[] { "B", 20 }); table.Rows.Add(new object[] { "C", 40 }); table.Rows.Add(new object[] { "D", 20 }); table.Rows.Add(new object[] { "E", 10 }); return table; } private void BuilderDevChart() { Series _pieSeries = new Series("测试", ViewType.Pie); _pieSeries.ValueDataMembers[0] = "Value"; _pieSeries.ArgumentDataMember = "Name"; _pieSeries.DataSource = CreateChartData(); chartControl1.Series.Add(_pieSeries); _pieSeries.LegendPointOptions.PointView = PointView.ArgumentAndValues; SetPiePercentage(_pieSeries); } /// <summary> /// 饼状Series设置成百分比显示 /// </summary> /// <param name="series">Series</param> public void SetPiePercentage(Series series) { if (series.View is PieSeriesView) { ((PiePointOptions)series.PointOptions).PercentOptions.ValueAsPercent = true; ((PiePointOptions)series.PointOptions).ValueNumericOptions.Format = NumericFormat.Percent; ((PiePointOptions)series.PointOptions).ValueNumericOptions.Precision = 0; } } } }
- 折线图效果及代码实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.XtraCharts; using DevExpress.Utils; namespace WindowsFormsApplication1.dev { public partial class ChartControl : Form { public ChartControl() { InitializeComponent(); } private void ChartControl_Load(object sender, EventArgs e) { DataTable dt = CreateData(); this.gridControl1.DataSource = dt; CreateChart(dt); } private DataTable CreateData() { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("类型")); dt.Columns.Add(new DataColumn("2005-1月", typeof(decimal))); dt.Columns.Add(new DataColumn("2005-2月", typeof(decimal))); dt.Columns.Add(new DataColumn("2005-3月", typeof(decimal))); dt.Columns.Add(new DataColumn("2005-4月", typeof(decimal))); dt.Columns.Add(new DataColumn("2005-5月", typeof(decimal))); dt.Columns.Add(new DataColumn("2005-6月", typeof(decimal))); dt.Rows.Add(new object[] { "员工人数", 437, 437, 414, 397, 387, 378 }); dt.Rows.Add(new object[] { "人均月薪", 3964, 3961, 3979, 3974, 3967, 3972 }); dt.Rows.Add(new object[] { "成本TEU", 3104, 1339, 3595.8, 3154.5, 2499.8, 3026 }); dt.Rows.Add(new object[] { "人均生产率", 7.1, 3.06, 8.69, 7.95, 6.46, 8.01 }); dt.Rows.Add(new object[] { "占2005年3月人数比例", 1.06, 1.06, 1, 0.96, 0.93, 0.91 }); return dt; } private void CreateChart(DataTable dt) { Color[] colorList = {Color.Yellow,Color.Red,Color.Purple,Color.SkyBlue,Color.Green}; #region Series //创建几个图形的对象 Series series1 = CreateSeries("员工人数", ViewType.Line, dt, 0); Series series2 = CreateSeries("人均月薪", ViewType.Line, dt, 1); Series series3 = CreateSeries("成本TEU", ViewType.Line, dt, 2); Series series4 = CreateSeries("人均生产率", ViewType.Line, dt, 3); Series series5 = CreateSeries("占2005年3月人数比例", ViewType.Line, dt, 4); #endregion List<Series> list = new List<Series>() { series1, series2, series3, series4, series5 }; chartControl1.Series.AddRange(list.ToArray()); chartControl1.Legend.Visible = false; //chartControl1.SeriesTemplate.Label= chartControl1.SeriesTemplate.Visible = true; for (int i = 0; i < list.Count; i++) { list[i].View.Color = colorList[i]; CreateAxisY(list[i]); } } /// <summary> /// 根据数据创建一个图形展现 /// </summary> /// <param name="caption">图形标题</param> /// <param name="viewType">图形类型</param> /// <param name="dt">数据DataTable</param> /// <param name="rowIndex">图形数据的行序号</param> /// <returns></returns> private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int rowIndex) { Series series = new Series(caption, viewType); for (int i = 1; i < dt.Columns.Count; i++) { string argument = dt.Columns[i].ColumnName;//参数名称 decimal value = (decimal)dt.Rows[rowIndex][i];//参数值 series.Points.Add(new SeriesPoint(argument, value)); } //必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示 //也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative series.ArgumentScaleType = ScaleType.Qualitative; series.Visible = true;//显示标注标签 return series; } /// <summary> /// 创建图表的第二坐标系 /// </summary> /// <param name="series">Series对象</param> /// <returns></returns> private SecondaryAxisY CreateAxisY(Series series) { SecondaryAxisY myAxis = new SecondaryAxisY(series.Name); ((XYDiagram)chartControl1.Diagram).SecondaryAxesY.Add(myAxis); ((LineSeriesView)series.View).AxisY = myAxis; myAxis.Title.Text = series.Name; myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐 myAxis.Title.Visible = true; //显示标题 myAxis.Title.Font = new Font("宋体", 9.0f); Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致 myAxis.Title.TextColor = color; myAxis.Label.TextColor = color; myAxis.Color = color; return myAxis; } } }
- 柱状图的实现效果及代码实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.XtraCharts; namespace WindowsFormsApplication1.dev { public partial class Bar : Form { public Bar() { InitializeComponent(); } private void Bar_Load(object sender, EventArgs e) { SetDataToBar(); } private DataTable GetDataToBar() { DataTable dt = new DataTable(); dt.Columns.Add("fruitName",typeof(string)); dt.Columns.Add("currentCount",typeof(int)); dt.Columns.Add("totalCount",typeof(int)); dt.Rows.Add("苹果", 200, 400); dt.Rows.Add("香蕉", 300, 500); dt.Rows.Add("橘子", 100, 200); dt.Rows.Add("榴莲", 50, 500); dt.Rows.Add("杨桃", 10, 100); return dt; } private void SetDataToBar() { DataTable data = GetDataToBar(); chartControl1.Series.Clear(); gridControl1.DataSource = data; // 柱状图里的第一个柱 Series Series1 = new Series("当年数据", ViewType.Bar); Series1.DataSource = data; Series1.ArgumentScaleType = ScaleType.Qualitative; // 以哪个字段进行显示 Series1.ArgumentDataMember = "fruitName"; Series1.ValueScaleType = ScaleType.Numerical; // 柱状图里的柱的取值字段 Series1.ValueDataMembers.AddRange(new string[] { "currentCount" }); // 柱状图里的第二柱 Series Series2 = new Series("累计数据", ViewType.Bar); Series2.DataSource = data; Series2.ArgumentScaleType = ScaleType.Qualitative; Series2.ArgumentDataMember = "fruitName"; Series2.ValueScaleType = ScaleType.Numerical; Series2.ValueDataMembers.AddRange(new string[] { "totalCount" }); chartControl1.Series.Add(Series1); chartControl1.Series.Add(Series2); } } }