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

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

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

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

C#

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

Q&A

解決済

3回答

877閲覧

クラスの中に他のクラスのデータをもってきたい。

xlostdjx

総合スコア39

CSV

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

C#

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

0グッド

0クリップ

投稿2018/06/28 01:33

編集2018/06/28 02:55

実現したいこと。
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); } } } }

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

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

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

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

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

papinianus

2018/06/28 01:42

何を持ってきたいのですか?おそれいりますが、そもそもなぜクラスをわけることにしたのかの経緯を伺ってもよろしいですか?(connectionDBという名前なのにDBにコネクションしないのはやめたほうがいいと思います)
xlostdjx

2018/06/28 02:58 編集

編集したのでご確認お願いします。 クラスを分けるのは見やすく(読みやすく)するためです。 connectionDBという名前の指摘もあとで修正します。
guest

回答3

0

回答ではないですが。
あとからこの質問を見た人向けに注意喚起のためにコメントします。

C#

1if (string.IsNullOrEmpty(RackCode.Text) == false) 2{ 3 SQL.AppendLine("and TS.tana_cd = " + "'" + RackCode.Text + "'"); 4} 5if (string.IsNullOrEmpty(ItemCode.Text) == false) 6{ 7 SQL.AppendLine(" and TS.item_cd = " + "'" + ItemCode.Text + "'"); 8} 9if (InOutType.SelectedIndex != 0) 10{ 11 SQL.AppendLine(" and TS.in_out_type = " + "'" + InOutType.SelectedIndex + "'"); 12}

質問文のソースコードはSQLインジェクションが発生するコードです。
SqlParameter クラスを使用してくださいな。

投稿2018/06/28 05:22

編集2018/06/28 05:24
umyu

総合スコア5846

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

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

0

ベストアンサー

C#

1 public partial class StockListForm : Form 2 { 3 public StockListForm() 4 { 5 InitializeComponent(); 6 } 7 8 OutputFile ofile = new OutputFile(); 9 10 /// <summary> 11 /// CSV出力ボタン押下時 12 /// </summary> 13 public void CSV_Output_Click(object sender, EventArgs e) 14 { 15 //string filename = System.String.Empty; 16 17 ofile.なんやらかんやら 18 } 19

当然のことながら、使用するクラス、変数、関数はpublicをつけるように


C#

1 public partial class StockListForm : Form 2 { 3 public StockListForm() 4 { 5 InitializeComponent(); 6 7 ofile.dtgrid = datagridview1; 8 } 9 10 11 OutputFile ofile = new OutputFile(); 12 13---------------------------------------------------- 14 15 public class OutputFile 16 { 17 public dtgrid:DataGridView; 18 19 20 /// <summary> 21 /// CSV出力 22 /// </summary> 23 public void CSV_OutputData(SaveFileDialog result) 24 { 25 26 //ここにDataGridViewのデータを持っていきたい 27 dtgrid.なんやかや

DataGridViewそのものを渡さなくても、なんかデータ格納用のクラスを作って渡してもOK

投稿2018/06/28 01:46

編集2018/06/28 03:23
y_waiwai

総合スコア87719

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

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

xlostdjx

2018/06/28 03:04

少し詳しく編集を加えたのでご確認お願いします。
xlostdjx

2018/06/28 04:31

ofile.dtgrid = datagridview1; が理解できないのですが、 実装してもエラーがでます。
y_waiwai

2018/06/28 04:33

それはFormにおいてるDataGridViewの名前です。 あなたの環境に合うように修正しましょう
xlostdjx

2018/06/28 04:43

opfile.data = DataGrid; 自作でしてもエラーがでます。 opfileにdataの定義が含まれていないとなるのですが、、
y_waiwai

2018/06/28 04:54

回答の追記のソースをよく見てください public class OutputFile { public dtgrid:DataGridView; これを追記してください
guest

0

前提として、CSV_Output()は、StockList.csのButton1_onclick()とかで呼び出すという風に理解しています。

こういう構造が正しいかはともかく

csharp

1//public void CSV_Output() //←この部分を↓ 2public void CSV_Output(DataGrid DG)

csharp

1//ここの関数 public void CSV_OutputData(SaveFileDialog result) //←この部分を↓ 2public void CSV_OutputData(SaveFileDialog result, DataGrid DG)

としておいて、CSV_Outputの下のほうの
CSV_OutputData(result);CSV_OutputData(result, DG);にするともっていけるとは思います。
(StockList.csでCSV_Output();となっているところは、CSV_Output(Datagrid);とかにする必要があります)

--余談
読み易く、とのことですが、どういう観点で読み易いのでしょうか。「持ってくる」ということをすれば(それができたとして)、持ってこられたものの内容(Datagrid)、それがどこからどういう姿で持ってこられているかなどは、StockList側にあるわけで、別人があるいは時間をおいてから読み易いのかな?と感じました。

投稿2018/06/28 05:00

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問