質問編集履歴

2

誤字

2018/06/27 06:11

投稿

xlostdjx
xlostdjx

スコア39

test CHANGED
File without changes
test CHANGED
@@ -14,169 +14,159 @@
14
14
 
15
15
 
16
16
 
17
- /// <summary>
17
+ /// <summary>
18
18
 
19
- /// 検索ボタン押下時
19
+ /// CSV出力ボタン押下時
20
20
 
21
- /// </summary>
21
+ /// </summary>
22
22
 
23
- public void SearchBtn_Click(object sender, EventArgs e)
23
+ private void CSV_Output_Click(object sender, EventArgs e)
24
24
 
25
25
  {
26
26
 
27
- // DataTableを作成
27
+ // SaveFileDialogを作成する
28
28
 
29
- DataTable DT = new DataTable();
29
+ SaveFileDialog result = new SaveFileDialog();
30
30
 
31
+ result.Title = "ファイルを保存する";
32
+
33
+ // 初期表示時のディレクトリを指定
34
+
35
+ result.InitialDirectory = @"C:\Users\Admin\Downloads";
36
+
37
+ // ファイル名を指定し取得する
38
+
39
+ result.FileName = @"ForOutput.csv";
40
+
41
+ // 選択できるファイルの種類を指定する
42
+
43
+ result.Filter = "CSV (カンマ区切り)|*.csv";
44
+
45
+ // ファイル出力(保存)ダイアログ表示 
46
+
31
- OracleConnection Connect = new OracleConnection();
47
+ DialogResult FileOutput = result.ShowDialog();
32
48
 
33
49
 
34
50
 
35
- // 接続文字列設定
51
+ // //「保存」ボタンが押された時処理
36
52
 
37
- string ConnectionString = ConfigurationManager.ConnectionStrings["OracleDB"].ConnectionString;
38
-
39
- Connect.ConnectionString = ConnectionString;
53
+ if (FileOutput == DialogResult.OK)
40
-
41
- try
42
54
 
43
55
  {
44
56
 
45
- // DB接続する
57
+ //指定されたファイルのパスを取得する
46
58
 
47
- Connect.Open();
59
+ string fileName = result.FileName;
48
60
 
49
- // 一覧取得用SQL文を作成
61
+ }
50
62
 
51
- StringBuilder SQL = new StringBuilder();
63
+ else if (FileOutput == DialogResult.Cancel)
52
64
 
53
- // inner join 指定した2つのカラムに基づく同じデータを合わせる。
65
+ {
54
66
 
55
- // ORDER BY 指定しカラムソート順でグループ枠で並び替える。
67
+ //「キャンセル」ボタンまは「×」ボタンが選択された時処理
56
68
 
57
- // WHERE 条件を指定して検索する
69
+ return;
58
70
 
59
- SQL.AppendLine("SELECT");
71
+ }
60
72
 
61
- SQL.AppendLine(" TS.tana_cd,");
62
73
 
63
- SQL.AppendLine(" MT.tana_nm,");
64
74
 
65
- SQL.AppendLine(" TS.item_cd,");
75
+ // 保存用のファイルを開く ( ファイルパス )( ファイル名 ) (文字コード指定)
66
76
 
67
- SQL.AppendLine(" MI.item_nm,");
77
+ using (StreamWriter writer = new StreamWriter(result.FileName, false, Encoding.GetEncoding("shift_jis")))
68
78
 
69
- SQL.AppendLine(" TS.in_out_date,");
79
+ {
70
80
 
71
- SQL.AppendLine(" TS.in_out_type,");
81
+ //DataGridViewの列を取得
72
82
 
73
- SQL.AppendLine(" TS.in_out_quantity,");
83
+ int rowCount = DataGrid.Rows.Count;
74
84
 
75
- SQL.AppendLine(" TS.QUANTITY,");
76
-
77
- SQL.AppendLine(" MI.unit_name,");
78
-
79
- SQL.AppendLine("TS.memo");
80
-
81
- SQL.AppendLine("FROM t_stock TS");
82
-
83
- SQL.AppendLine(" inner join m_tana MT");
84
-
85
- SQL.AppendLine(" on TS.tana_cd = MT.tana_cd");
86
-
87
- SQL.AppendLine(" inner join m_item MI");
88
-
89
- SQL.AppendLine(" on TS.item_cd = MI.item_cd");
90
-
91
- SQL.AppendLine("WHERE");
92
-
93
- SQL.AppendLine("0 = 0");
94
-
95
- //ここ!!
96
-
97
- SQL.AppendLine(" and TS.in_out_date BETWEEN " + "'" + InOutFromDate.Value.ToString("yyyy/MM/dd") + "'");
98
-
99
- SQL.AppendLine(" and" + "'" + InOutToDate.Value.ToString("yyyy/MM/dd") + "'");
100
-
101
- if (string.IsNullOrEmpty(RackCode.Text) == false)
85
+ if (DataGrid.AllowUserToAddRows == true)
102
86
 
103
87
  {
104
88
 
89
+ // 最後の新規入力用の1行分を差し引く
90
+
105
- SQL.AppendLine("and TS.tana_cd = " + "'" + RackCode.Text + "'");
91
+ rowCount = rowCount - 1;
106
92
 
107
93
  }
108
94
 
95
+
96
+
97
+ // リストの初期化
98
+
99
+ List<String> strList;
100
+
101
+ strList = new List<String>();
102
+
103
+
104
+
105
+ // ヘッダ部の出力
106
+
107
+ // Columns.Count カルム数ループ
108
+
109
- if (string.IsNullOrEmpty(ItemCode.Text) == false)
109
+ for (int j = 0; j < DataGrid.Columns.Count; j++)
110
110
 
111
111
  {
112
112
 
113
+ // カラムのヘッダのテキストをリストに追加
114
+
113
- SQL.AppendLine(" and TS.item_cd = " + "'" + ItemCode.Text + "'");
115
+ strList.Add(DataGrid.Columns[j].HeaderCell.Value.ToString());
114
116
 
115
117
  }
116
118
 
119
+ // 配列へ変換
120
+
121
+ String[] strArray = strList.ToArray();
122
+
123
+ // CSV 形式に変換 // カンマ区切り
124
+
125
+ String strCsvData = String.Join(",", strArray);
126
+
127
+ //ヘッダを出力
128
+
129
+ writer.WriteLine(strCsvData);
130
+
131
+
132
+
133
+ // データ部の出力
134
+
135
+ // rowCount 行数文ループ
136
+
117
- if (InOutType.SelectedIndex != 0)
137
+ for (int i = 0; i < rowCount; i++)
118
138
 
119
139
  {
120
140
 
141
+ // リストの初期化
142
+
143
+ strList = new List<String>();
144
+
145
+ // Columns.Count カルムの数だけループする
146
+
147
+ for (int j = 0; j < DataGrid.Columns.Count; j++)
148
+
149
+ {
150
+
151
+ // 列と行のテキストをリストに追加
152
+
153
+ strList.Add(DataGrid[j, i].Value.ToString());
154
+
155
+ }
156
+
157
+ // 配列へ変換
158
+
159
+ String[] stgArray = strList.ToArray();
160
+
161
+ // CSV 形式に変換 // カンマ区切り
162
+
121
- SQL.AppendLine(" and TS.in_out_type = " + "'" + InOutType.SelectedIndex + "'");
163
+ String stgCsvData = String.Join(",", stgArray);
164
+
165
+ //列と行を出力
166
+
167
+ writer.WriteLine(stgCsvData);
122
168
 
123
169
  }
124
-
125
- SQL.AppendLine("ORDER BY");
126
-
127
- SQL.AppendLine(" TS.tana_cd,");
128
-
129
- SQL.AppendLine(" TS.item_cd,");
130
-
131
- SQL.AppendLine(" TS.in_out_date,");
132
-
133
- SQL.AppendLine(" TS.in_out_type");
134
-
135
- // テーブルソースからデータを取得する
136
-
137
- var DA = new OracleDataAdapter(SQL.ToString(), Connect);
138
-
139
- // SQL文の結果をDaTaTableに格納する
140
-
141
- DA.Fill(DT);
142
-
143
- // DataGridViewにDataTableをセット
144
-
145
- DataGrid.DataSource = DT;
146
-
147
- // DB接続解除
148
-
149
- Connect.Close();
150
-
151
-
152
-
153
- // DataGridの行数の取得
154
-
155
- int LineCount = (DataGrid.BindingContext[DataGrid.DataSource, DataGrid.DataMember].Count);
156
-
157
- // 3桁区切り制御
158
-
159
- string Delimitern = String.Format("{0:#,##0} ", LineCount);
160
-
161
-
162
-
163
- // データ件数に表示
164
-
165
- DataCount.Text = Delimitern;
166
-
167
- }
168
-
169
- // Exception(Oracle Ver.) アプリの実行中に起きるエラーを表す
170
-
171
- catch (OracleException ex)
172
-
173
- {
174
-
175
- // エラーが起きたときにエラーメッセージとスタックトレースを表示させる。(覚えておく)
176
-
177
- string trace = Environment.StackTrace;
178
-
179
- MessageBox.Show("エラーが起きました!" + trace);
180
170
 
181
171
  }
182
172
 

1

編集

2018/06/27 06:11

投稿

xlostdjx
xlostdjx

スコア39

test CHANGED
File without changes
test CHANGED
@@ -158,13 +158,7 @@
158
158
 
159
159
  string Delimitern = String.Format("{0:#,##0} ", LineCount);
160
160
 
161
-
162
-
163
-
164
-
165
- MessageBox.Show(String.Format("{0:yyyy/MM/dd}",InOutFromDate));
161
+
166
-
167
-
168
162
 
169
163
  // データ件数に表示
170
164
 
@@ -189,3 +183,13 @@
189
183
  }
190
184
 
191
185
  ```
186
+
187
+
188
+
189
+ 出力データ
190
+
191
+ ![イメージ説明](4a710d45ab89f12b082bfbfe98b77c04.png)
192
+
193
+ CSVファイル
194
+
195
+ ![イメージ説明](c0217db73e54dc8c1806867895424b29.png)