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