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

質問編集履歴

2

誤字

2018/06/27 06:11

投稿

xlostdjx
xlostdjx

スコア39

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

1

編集

2018/06/27 06:11

投稿

xlostdjx
xlostdjx

スコア39

title CHANGED
File without changes
body CHANGED
@@ -78,10 +78,7 @@
78
78
  int LineCount = (DataGrid.BindingContext[DataGrid.DataSource, DataGrid.DataMember].Count);
79
79
  // 3桁区切り制御
80
80
  string Delimitern = String.Format("{0:#,##0} ", LineCount);
81
-
82
-
83
- MessageBox.Show(String.Format("{0:yyyy/MM/dd}",InOutFromDate));
81
+
84
-
85
82
  // データ件数に表示
86
83
  DataCount.Text = Delimitern;
87
84
  }
@@ -93,4 +90,9 @@
93
90
  MessageBox.Show("エラーが起きました!" + trace);
94
91
  }
95
92
  }
96
- ```
93
+ ```
94
+
95
+ 出力データ
96
+ ![イメージ説明](4a710d45ab89f12b082bfbfe98b77c04.png)
97
+ CSVファイル
98
+ ![イメージ説明](c0217db73e54dc8c1806867895424b29.png)