質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

5504閲覧

CSV出力ボタン押下時にDataTableをセットしたDataGridViewをCSVファイルに書き込みたい

xlostdjx

総合スコア39

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/06/21 02:38

前提・実現したいこと

Visual Studio2015 の Windows Forms アプリ

CSV出力ボタン押下時にDataTableをセットしたDatagridviewをCSVファイルに書き込み、保存したのですが、
今の現状はエラーはありません。

ですがダイアログ表示した時に下記の画像のように開くと同時に、ファイル名とファイルの種類を設定したいのですがうまくいきません。

また下記の画像のようにしてからDatagridviewのデータをCSVファイルに書き込みたいと思っています。
お知恵をお借りしたいですどうぞよろしくお願いいたします。

!イメージ説明明](d23057f2de605231dcd842ce027a7c9e.png)

該当のソースコード

C#

1 2 /// <summary> 3 /// 検索ボタン押下時 4 /// </summary> 5 public void SearchBtn_Click(object sender, EventArgs e) 6 { 7 //接続文字列の設定 8 string ConnectionString = ConfigurationManager.ConnectionStrings["OracleDB"].ConnectionString; 9 Connect.ConnectionString = ConnectionString; 10 try 11 { 12 // DB接続する 13 Connect.Open(); 14 //一覧取得用SQL文を作成 15 StringBuilder SQL = new StringBuilder(); 16 //inner join 指定した2つのカラムに基づく同じデータを合わせる。 17 //ORDER BY 指定したカラムのソート順でグループ枠で並び替える。 18 SQL.AppendLine("SELECT"); 19 SQL.AppendLine(" TS.tana_cd,"); 20 SQL.AppendLine(" MT.tana_nm,"); 21 SQL.AppendLine(" TS.item_cd,"); 22 SQL.AppendLine(" MI.item_nm,"); 23 SQL.AppendLine(" TS.in_out_date,"); 24 SQL.AppendLine(" TS.in_out_type,"); 25 SQL.AppendLine(" TS.in_out_quantity,"); 26 SQL.AppendLine(" TS.QUANTITY,"); 27 SQL.AppendLine(" MI.unit_name,"); 28 SQL.AppendLine(" TS.memo"); 29 SQL.AppendLine("FROM t_stock TS"); 30 SQL.AppendLine(" inner join m_tana MT"); 31 SQL.AppendLine(" on TS.tana_cd = MT.tana_cd"); 32 SQL.AppendLine(" inner join m_item MI"); 33 SQL.AppendLine(" on TS.item_cd = MI.item_cd"); 34 SQL.AppendLine("ORDER BY"); 35 SQL.AppendLine(" TS.tana_cd,"); 36 SQL.AppendLine(" TS.item_cd,"); 37 SQL.AppendLine(" TS.in_out_date,"); 38 SQL.AppendLine(" TS.in_out_type"); 39 40 //テーブルソースからデータを取得する 41 var DA = new OracleDataAdapter(SQL.ToString(), Connect); 42 //SQL文の結果をDaTaTableに格納する 43 DA.Fill(DT); 44 //DataGridViewにDataTableをセット 45 DataGrid.DataSource = DT; 46 //DB接続解除 47 Connect.Close(); 48 } 49 catch (OracleException ex) //Exception(Oracle Ver.) アプリの実行中に起きるエラーを表す 50 { 51 //エラーが起きたときにメッセージを表示させる。 52 MessageBox.Show("エラーが起きました!"); 53 } 54 } 55 56 /// <summary> 57 /// CSV出力ボタン押下時 58 /// </summary> 59 private void CSV_Output_Click(object sender, EventArgs e) 60 { 61 //ファイル出力(保存)ダイアログ表示  62 SaveFileDialog result = new SaveFileDialog(); 63 DialogResult FileOutput = result.ShowDialog(); 64 65 66 //dataGridViewからデータ取得(Loop処理) 67 // 保存用のファイルを開く ( ファイルパス )( ファイル名 ) 68 using (StreamWriter writer = new StreamWriter(@"C:\Users\Admin\Downloads\ForOutput.csv", false, Encoding.GetEncoding("shift_jis"))) 69 { 70 71 int rowCount = DataGrid.Rows.Count; 72 // ユーザによる行追加が許可されている場合は、最後の新規入力用の 73 // 1行分を差し引く 74 if (DataGrid.AllowUserToAddRows == true) 75 { 76 rowCount = rowCount - 1; 77 } 78 79 // 行 80 for (int i = 0; i < rowCount; i++) 81 { 82 // リストの初期化 83 List<String> strList = new List<String>(); 84 85 // 列 86 for (int j = 0; j < DataGrid.Columns.Count; j++) 87 { 88 strList.Add(DataGrid[j, i].Value.ToString()); 89 } 90 String[] strArray = strList.ToArray(); // 配列へ変換 91 92 // CSV 形式に変換 93 String strCsvData = String.Join(",", strArray); 94 95 writer.WriteLine(strCsvData); 96 97 98 } 99 } 100 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

StreamWriter作成時に固定文字列ではなくSaveFileDialogで選択されたファイル名を使ってください。
また、SaveFileDialogにてキャンセルされた時を考慮すべきです。
C#プチリファレンス SaveFileDialog(保存ダイアログ)

投稿2018/06/21 02:49

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xlostdjx

2018/06/21 04:26

具体的に 固定文字列ではなくSaveFileDialogで選択されたファイル名を使ってくださいと ありますが どれにあたるのでしょうか?? SaveFileDialogで選択されたファイル名はFileOutputであっていますか??
YAmaGNZ

2018/06/21 04:32

ご自身でファイルを作成する時にどこでファイル名を指定しているか理解されていないのですか? また、リンク先もご覧になられていないようですね
xlostdjx

2018/06/21 05:10 編集

すみませんリンク先が見えていなかったです。 先程リンクを拝見しました。 SaveFileDialog作成はすることができました。 SaveFileDialogにてキャンセルされた時を考慮すべきです。とありますが具体的にはどういう方向にしてらいいのでしょうか?? returnなどで抜けさせたりするのでしょうか??
YAmaGNZ

2018/06/21 05:10

キャンセルされた場合、csvファイルを作成しないという動作が一般的だと思います。 キャンセルされたかの判定はリンク先に書いてありますので、参照してください。
xlostdjx

2018/06/21 05:44

最後に質問なのですが、 CSVファイルに出力は完了してのですが、Datagridviewに表記されているものと違うのですがなにが足りないのでしょうか?? 例 A列の数字は三桁カンマ区切りされるようにしていて それをCSVファイルに出力すると反映されていない。また (例) 2 = 在庫 と指定しているものも 表記が反映されていないのです。 どうすればいいでしょうか?
YAmaGNZ

2018/06/21 05:54

CellFormattingイベントで表示の変更を行っていて、表示されている値を取得したいのであれば、ValueプロパティではなくFormattedValueプロパティで値を取得してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問