teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/20 15:40

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -1,107 +1,107 @@
1
- > おそらく何かプロパティのような物が存在する
2
-
3
- さすがにそこまではやってくれないんじゃないでしょうか?(ほとんど使ったことないのでわかりませんが)
4
- 元々が日付なわけですから`DateTime`にすればいいですね。
5
-
6
- ```C#
7
- using System;
8
- using System.Data;
9
- using System.Globalization;
10
- using System.Linq;
11
- using System.Windows.Forms;
12
- using System.Windows.Forms.DataVisualization.Charting;
13
-
14
- namespace Questions244234
15
- {
16
- public partial class Form1 : Form
17
- {
18
- public Form1()
19
- {
20
- InitializeComponent();
21
-
22
- var dt = Dammy();
23
- test(dt);
24
- dataGridView1.DataSource = dt;
25
- }
26
-
27
- private void test(DataTable dt)
28
- {
29
- // clear
30
- chart1.Series.Clear();
31
- chart1.ChartAreas.Clear();
32
- chart1.Titles.Clear();
33
-
34
- chart1.Titles.Add(new Title("Title1"));
35
-
36
- // series
37
- var seriesLine = new Series
38
- {
39
- ChartType = SeriesChartType.Line,
40
- LegendText = "Legend:Line",
41
- BorderWidth = 2,
42
- MarkerStyle = MarkerStyle.Circle,
43
- MarkerSize = 12
44
- };
45
- foreach(var item in dt.AsEnumerable())
46
- {
47
- // 平成25年(2013年)?を2025年としてしまうのが気にならなければ
48
- // 単にこれでいい(chart1_FormatNumberはいらない)
49
- //var date = DateTime.ParseExact((string)item.ItemArray[3], "yyMM", null);
50
- var date = DateTime.ParseExact((string)item.ItemArray[3], "yyMM", null).AddYears(-12);
51
-
52
- var dp = new DataPoint(date.ToOADate(), Convert.ToDouble(item.ItemArray[5]));
53
- seriesLine.Points.Add(dp);
54
- }
55
- chart1.Series.Add(seriesLine);
56
-
57
- // chartarea
58
- var area1 = new ChartArea();
59
- area1.AxisX.Title = "Title-XAxis";
60
- area1.AxisY.Title = "Title-YAxis";
61
- chart1.ChartAreas.Add(area1);
62
-
63
- // AxisX
64
- area1.AxisX.Interval = 12;
65
- area1.AxisX.IntervalType = DateTimeIntervalType.Months;
66
- area1.AxisX.IntervalOffsetType = DateTimeIntervalType.Months;
67
- //area1.AxisX.LabelStyle.Format = "yyMM";
68
- }
69
-
70
- private void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
71
- {
72
- if(e.ValueType == ChartValueType.DateTime)
73
- {
74
- var culture = new CultureInfo("ja-JP", true);
75
- culture.DateTimeFormat.Calendar = new JapaneseCalendar();
76
-
77
- var date = DateTime.FromOADate(e.Value);
78
- e.LocalizedValue = date.ToString("yyMM", culture);
79
- }
80
- }
81
-
82
- private DataTable Dammy()
83
- {
84
- var dt = new DataTable();
85
- dt.Columns.Add("AREA");
86
- dt.Columns.Add("GENDER");
87
- dt.Columns.Add("AGE");
88
- dt.Columns.Add("MONTH");
89
- dt.Columns.Add("DISEASE");
90
- dt.Columns.Add("MED_1");
91
- dt.Columns.Add("MED_2");
92
-
93
- var r = new Random();
94
- for(var i = 0; i < 48; i++)
95
- {
96
- var month = $"{25 + (i + 3) / 12}{(i + 3) % 12 + 1:00}";
97
- var med_1 = r.Next(450_000, 550_000);
98
- dt.Rows.Add("", "", "", month, "", med_1, "");
99
- }
100
-
101
- return dt;
102
- }
103
- }
104
- }
105
- ```
106
-
1
+ > おそらく何かプロパティのような物が存在する
2
+
3
+ さすがにそこまではやってくれないんじゃないでしょうか?(ほとんど使ったことないのでわかりませんが)
4
+ 元々が日付なわけですから`DateTime`にすればいいですね。
5
+
6
+ ```cs
7
+ using System;
8
+ using System.Data;
9
+ using System.Globalization;
10
+ using System.Linq;
11
+ using System.Windows.Forms;
12
+ using System.Windows.Forms.DataVisualization.Charting;
13
+
14
+ namespace Questions244234
15
+ {
16
+ public partial class Form1 : Form
17
+ {
18
+ public Form1()
19
+ {
20
+ InitializeComponent();
21
+
22
+ var dt = Dammy();
23
+ test(dt);
24
+ dataGridView1.DataSource = dt;
25
+ }
26
+
27
+ private void test(DataTable dt)
28
+ {
29
+ // clear
30
+ chart1.Series.Clear();
31
+ chart1.ChartAreas.Clear();
32
+ chart1.Titles.Clear();
33
+
34
+ chart1.Titles.Add(new Title("Title1"));
35
+
36
+ // series
37
+ var seriesLine = new Series
38
+ {
39
+ ChartType = SeriesChartType.Line,
40
+ LegendText = "Legend:Line",
41
+ BorderWidth = 2,
42
+ MarkerStyle = MarkerStyle.Circle,
43
+ MarkerSize = 12
44
+ };
45
+ foreach(var item in dt.AsEnumerable())
46
+ {
47
+ // 平成25年(2013年)?を2025年としてしまうのが気にならなければ
48
+ // 単にこれでいい(chart1_FormatNumberはいらない)
49
+ //var date = DateTime.ParseExact((string)item.ItemArray[3], "yyMM", null);
50
+ var date = DateTime.ParseExact((string)item.ItemArray[3], "yyMM", null).AddYears(-12);
51
+
52
+ var dp = new DataPoint(date.ToOADate(), Convert.ToDouble(item.ItemArray[5]));
53
+ seriesLine.Points.Add(dp);
54
+ }
55
+ chart1.Series.Add(seriesLine);
56
+
57
+ // chartarea
58
+ var area1 = new ChartArea();
59
+ area1.AxisX.Title = "Title-XAxis";
60
+ area1.AxisY.Title = "Title-YAxis";
61
+ chart1.ChartAreas.Add(area1);
62
+
63
+ // AxisX
64
+ area1.AxisX.Interval = 12;
65
+ area1.AxisX.IntervalType = DateTimeIntervalType.Months;
66
+ area1.AxisX.IntervalOffsetType = DateTimeIntervalType.Months;
67
+ //area1.AxisX.LabelStyle.Format = "yyMM";
68
+ }
69
+
70
+ private void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
71
+ {
72
+ if(e.ValueType == ChartValueType.DateTime)
73
+ {
74
+ var culture = new CultureInfo("ja-JP", true);
75
+ culture.DateTimeFormat.Calendar = new JapaneseCalendar();
76
+
77
+ var date = DateTime.FromOADate(e.Value);
78
+ e.LocalizedValue = date.ToString("yyMM", culture);
79
+ }
80
+ }
81
+
82
+ private DataTable Dammy()
83
+ {
84
+ var dt = new DataTable();
85
+ dt.Columns.Add("AREA");
86
+ dt.Columns.Add("GENDER");
87
+ dt.Columns.Add("AGE");
88
+ dt.Columns.Add("MONTH");
89
+ dt.Columns.Add("DISEASE");
90
+ dt.Columns.Add("MED_1");
91
+ dt.Columns.Add("MED_2");
92
+
93
+ var r = new Random();
94
+ for(var i = 0; i < 48; i++)
95
+ {
96
+ var month = $"{25 + (i + 3) / 12}{(i + 3) % 12 + 1:00}";
97
+ var med_1 = r.Next(450_000, 550_000);
98
+ dt.Rows.Add("", "", "", month, "", med_1, "");
99
+ }
100
+
101
+ return dt;
102
+ }
103
+ }
104
+ }
105
+ ```
106
+
107
107
  ![アプリ画像](1adf35792e000183d21712a5296e807e.png)