DevExpress ChartControl 중에서 BarChart를 사용하는 방법에 대한 예제입니다.
아래와 같은 형태로 나오는 Chart를 만들어보는 예제입니다.
아래와 같이 가상의 Data를 만들어서 왼쪽 Grid에 표시하고,
BarChart로 보여주는 예제입니다.
[실행화면]
=====================================================================
[Chart Data 세팅]
Chart를 세팅하는 부분입니다.
ChartControl.Series에 Series를 생성해서 Add 시켜주어야 합니다.
Series의 ViewType을 Bar로 설정하면 BarChart로 보여주게 됩니다.
Series.Points에 Chart에 보여줄 SeriesPoint를 만들어서 Add 해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 |
private void SetChartData(ChartControl chart, ViewType viewType, DataTable dt)
{
#region BarChart
if (viewType == ViewType.Bar)
{
Dictionary<string, Series> seriesList = new Dictionary<string, Series>();
foreach (DataRow row in dt.Rows)
{
string product = row["PRODUCT"].ToString();
string year = row["YEAR"].ToString();
int qty = (int)row["QTY"];
Series series;
if (seriesList.TryGetValue(product, out series) == false)
{
seriesList.Add(product, series = new Series(product, viewType));
chart.Series.Add(series);
}
SeriesPoint point = new SeriesPoint(year, qty);
series.Points.Add(point);
}
}
#endregion
} |
=====================================================================
[Chart에 Title 세팅하기]
아래처럼 빨간색 동그라미로 표시된 부분처럼 Title 세팅하는 방법입니다.
Chart 생성부분에서 23, 24, 25 Line의 코드(빨간색으로 표시된 코드 부분) 추가해줍니다.
ChartTitle을 생성해서 ChartControl의 Titles 속성에 Add 시켜줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 |
#region BarChart
if (viewType == ViewType.Bar)
{
Dictionary<string, Series> seriesList = new Dictionary<string, Series>();
foreach (DataRow row in dt.Rows)
{
string product = row["PRODUCT"].ToString();
string year = row["YEAR"].ToString();
int qty = (int)row["QTY"];
Series series;
if (seriesList.TryGetValue(product, out series) == false)
{
seriesList.Add(product, series = new Series(product, viewType));
chart.Series.Add(series);
}
SeriesPoint point = new SeriesPoint(year, qty);
series.Points.Add(point);
}
ChartTitle title = new ChartTitle();
title.Text = viewType.ToString();
chart.Titles.Add(title);
}
#endregion |
=====================================================================
[Label 세팅]
아래처럼 Bar위에 수량정보를 표시하는 방법입니다.
Chart 생성부분에서 16번째 Line의 코드(빨간색으로 표시) 부분을 추가해줍니다.
Series 객체의 LabelsVisibility 속성을 DevExpress.Utils.DefaultBoolean.True로 설정해줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
#region BarChart
if (viewType == ViewType.Bar)
{
Dictionary<string, Series> seriesList = new Dictionary<string, Series>();
foreach (DataRow row in dt.Rows)
{
string product = row["PRODUCT"].ToString();
string year = row["YEAR"].ToString();
int qty = (int)row["QTY"];
Series series;
if (seriesList.TryGetValue(product, out series) == false)
{
seriesList.Add(product, series = new Series(product, viewType));
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
chart.Series.Add(series);
}
SeriesPoint point = new SeriesPoint(year, qty);
series.Points.Add(point);
}
ChartTitle title = new ChartTitle();
title.Text = viewType.ToString();
chart.Titles.Add(title);
}
#endregion |
=====================================================================
[가상 Data 생성]
가상의 Data를 생성합니다.
APPLE, BANANA, ORAGE에 대한 년도별 생산수량에 대한 시나리오로 생성했고,
생산수량은 Random을 사용해서 생성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 |
private DataTable CreateData()
{
DataTable dataTable = new DataTable();
DataColumn productColumn = new DataColumn("PRODUCT", typeof(string));
DataColumn yearColumn = new DataColumn("YEAR", typeof(string));
DataColumn qtyColumn = new DataColumn("QTY", typeof(int));
dataTable.Columns.Add(productColumn);
dataTable.Columns.Add(yearColumn);
dataTable.Columns.Add(qtyColumn);
List<string> prodList = new List<string>();
prodList.Add("APPLE");
prodList.Add("BANANA");
prodList.Add("ORAGNE");
Random random = new Random();
for (int i = DateTime.Now.Year - 4; i <= DateTime.Now.Year; i++)
{
foreach (string prod in prodList)
{
DataRow row = dataTable.NewRow();
row[productColumn] = prod;
row[yearColumn] = string.Format("{0}", i.ToString());
row[qtyColumn] = random.Next(10, 101);
dataTable.Rows.Add(row);
}
}
return dataTable;
} |
=====================================================================
[전체 소스코드]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 |
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.XtraBars.Docking;
namespace Chart
{
public partial class Form1 : Form
{
MainView mainView;
public Form1()
{
InitializeComponent();
//가상의 Data 생성
DataTable dataTable = CreateData();
//Control 초기화
InitializeControl(dataTable);
}
// 가상의 Data를 생성하는 함수입니다.
private DataTable CreateData()
{
DataTable dataTable = new DataTable();
DataColumn productColumn = new DataColumn("PRODUCT", typeof(string));
DataColumn yearColumn = new DataColumn("YEAR", typeof(string));
DataColumn qtyColumn = new DataColumn("QTY", typeof(int));
dataTable.Columns.Add(productColumn);
dataTable.Columns.Add(yearColumn);
dataTable.Columns.Add(qtyColumn);
List<string> prodList = new List<string>();
prodList.Add("APPLE");
prodList.Add("BANANA");
prodList.Add("ORAGNE");
Random random = new Random();
for (int i = DateTime.Now.Year - 4; i <= DateTime.Now.Year; i++)
{
foreach (string prod in prodList)
{
DataRow row = dataTable.NewRow();
row[productColumn] = prod;
row[yearColumn] = string.Format("{0}", i.ToString());
row[qtyColumn] = random.Next(10, 101);
dataTable.Rows.Add(row);
}
}
return dataTable;
}
private void InitializeControl(DataTable dataTable)
{
foreach(ViewType viewType in Enum.GetValues(typeof(ViewType)))
{
this.comboBoxChartOption.Items.Add(viewType);
}
this.comboBoxChartOption.SelectedIndex = 0;
this.gridControlData.DataSource = dataTable;
this.mainView = new MainView();
this.mainView.Dock = DockStyle.Fill;
this.panelMainView.Controls.Add(this.mainView);
}
private void buttonViewChart_Click(object sender, EventArgs e)
{
ViewType viewType = (ViewType)this.comboBoxChartOption.SelectedItem;
DockPanel newPanel = this.mainView.DockManager.AddPanel(DockingStyle.Float);
newPanel.Text = viewType.ToString();
newPanel.DockedAsTabbedDocument = true;
ChartControl chart = new ChartControl();
chart.Dock = DockStyle.Fill;
newPanel.Controls.Add(chart);
SetChartData(chart, viewType, this.gridControlData.DataSource as DataTable);
}
//Chart에 Data를 세팅
private void SetChartData(ChartControl chart, ViewType viewType, DataTable dt)
{
#region BarChart
if (viewType == ViewType.Bar)
{
Dictionary<string, Series> seriesList = new Dictionary<string, Series>();
foreach (DataRow row in dt.Rows)
{
string product = row["PRODUCT"].ToString();
string year = row["YEAR"].ToString();
int qty = (int)row["QTY"];
Series series;
if (seriesList.TryGetValue(product, out series) == false)
{
seriesList.Add(product, series = new Series(product, viewType));
chart.Series.Add(series);
}
SeriesPoint point = new SeriesPoint(year, qty);
series.Points.Add(point);
}
}
#endregion
}
}
} |
'C# > DevExpress' 카테고리의 다른 글
[C# DevExpress]DockManager, DocumentManager (0) | 2018.04.10 |
---|---|
[C# DevExpress] ChartControl - BubbleChart (0) | 2018.04.09 |
[C# DevExpress] ChartControl - LineChart (0) | 2018.04.09 |
[C# DevExpress] ChartControl - PieChart (0) | 2018.04.09 |
[C# DevExpress] SpreadSheet에 값 넣기 (0) | 2018.03.28 |
댓글