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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

2239閲覧

値がDataGridViewに反映されません

AEGIL

総合スコア7

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/11/13 10:09

編集2020/11/14 14:58

お世話になっております。
三日前に解決済みにした質問なのですが、リンク内容
ウォッチで確認して値はしっかり入っているのにdatagridview1に表示されません。
どうしても原因が見つからなかったので確認していただきたいです。

c#

1 public partial class Form1 : Form 2 { 3 4 public Form1() 5 { 6 InitializeComponent(); 7 } 8 //csv用 9 public class CsvDT 10 { 11 public string Barcode{get;set;} 12 } 13 //Oracle用 14 public class OracleDT 15 { 16 public string AA { get; set; } 17 public string BB { get; set; } 18   19 public string Barcode { get; set; } 20 } 21 //結合用 22 public class ResultDT 23 { 24 public string A { get; set; } 25 public string B { get; set; } 26 27 } 28 private void Form1_Load(object sender, EventArgs e){ } 29 //CSV読み込み 30 protected List<CsvDT> createCsvList() 31 { 32 List<CsvDT> csvDTs = new List<CsvDT>(); 33 string csvFilePath = textBox1.Text; 34 Encoding encoding = Encoding.GetEncoding("Shift_JIS"); 35 using(TextFieldParser parser = new TextFieldParser(csvFilePath, encoding)) 36 { 37 parser.TextFieldType = FieldType.Delimited; 38 parser.Delimiters = new string[] { "," }; 39 40 while(!parser.EndOfData) 41 { 42 string[] fields = parser.ReadFields(); 43 CsvDT csvDT = new CsvDT() 44 { 45 Barcode = fields[4] 46 }; 47 csvDTs.Add(csvDT); 48 } 49 } 50 return csvDTs; 51 } 52 //Oracle読み込み 53 protected List<OracleDT> createOracleList() 54 { 55 List<OracleDT> oracleDTs = new List<OracleDT>(); 56 string DataSource = "oraclepass"; 57 string sql = select * from Table 58 using (OracleConnection conn = new OracleConnection(DataSource)) 59 { 60 conn.Open(); 61 using (OracleCommand cmd = new OracleCommand(sql, conn)) 62 { 63 using (OracleDataReader reader = cmd.ExecuteReader()) 64 { 65 if(reader !=null) 66 { 67 while(reader.Read()) 68 { 69 OracleDT recode = new OracleDT(); 70 recode.A = reader.IsDBNull(0) ? 71 null : reader.GetString(0); 72 recode.B = reader.IsDBNull(1) ? 73 null : reader.GetString(1); 74 75 oracleDTs.Add(recode); 76 } 77 } 78 } 79 } 80 } 81 return oracleDTs; 82 } 83 //innerjoinで結合をする箇所 84 protected void Read_Click(object sender, EventArgs e) 85 { 86 List<OracleDT> oracleDTs = createOracleList(); 87 List<CsvDT> csvDTs = createCsvList(); 88 89 var innnerjoin = from o in oracleDTs 90 join c in csvDTs 91 on o.Barcode equals c.Barcode 92 select new ResultDT 93 { 94 A = o.AA, 95 B = o.BB, 96 97 }; 98 dataGridView1.DataSource = innnerjoin; 99 100 } 101 //File取得 102 private void button1_Click(object sender, EventArgs e) 103 { 104 105 openFileDialog1.ShowDialog(); 106 textBox1.Text = openFileDialog1.FileName; 107 } 108 //起動時にoracleのみ走らせる。 109 private void Form1_Shown(object sender, EventArgs e) 110 { 111 createOracleList(); 112 } 113 114 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 115 { 116 117 } 118 }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/11/13 12:44 編集

dataGridView1.DataSource = innnerjoin; の innnerjoin が参照しているものがどうなっているか調べましたか?
AEGIL

2020/11/13 10:38

+ innnerjoin {System.Linq.Enumerable.<JoinIterator>d__38<Sample.Form1.OracleDT, Sample.Form1.CsvDT, string, Sample.Form1.ResultDT>} System.Collections.Generic.IEnumerable<Sample.Form1.ResultDT> {System.Linq.Enumerable.<JoinIterator>d__38<Sample.Form1.OracleDT, Sample.Form1.CsvDT, string, Sample.Form1.ResultDT>} 中身はこうなっていました。
退会済みユーザー

退会済みユーザー

2020/11/13 12:44

デバッガは使えますか? 画像は貼れますか?
退会済みユーザー

退会済みユーザー

2020/11/13 22:23

ちょっとコードを眺めてみましたが、そもそも、質問のコードではコンパイラも通らないですよね?
AEGIL

2020/11/13 23:42

修正いたしました。 コンパイルが通らない>>所々変えてしまったせいで動かないコードになっている可能性がございます。気になる点あったでしょうか?
退会済みユーザー

退会済みユーザー

2020/11/13 23:45

デバッガの画像を拝見しましたが、それと質問に書かれたコードは違います。上にも書きましたが、質問に書いたコードはコンパイラも通らないはず。そいういうのは質問として絶対ダメです。
AEGIL

2020/11/14 00:03

値とオラクルのパスを消したときにもしかするとなにかしてしまったのかもしれません。
AEGIL

2020/11/14 00:09

申し訳ございません。値変更前の状態になっております。
退会済みユーザー

退会済みユーザー

2020/11/14 00:43

質問のコードを書き換えたようですが、依然として画像とは違います。質問のコードは on o.Barcode equals c.Barcode ですが、画像は on o.自社コード equals c.Barcode となってます。そういうの、ホントに質問としてダメですよ。 閲覧者・回答者はスレッドに書いてあること以外は知る由もないです。なのに、言ってることと実際にやってることが違うのは非常にマズイと思いませんか?
AEGIL

2020/11/14 00:48

申し訳ありません。見落としておりました。
退会済みユーザー

退会済みユーザー

2020/11/14 00:57 編集

そういうことになるので実際のコードを書き直してアップするのはやめましょう。書き直すなら書き直したコードを Visual Studio で動かして、そのコードをそのままコピペして結果を書くようにしてください。デバッグ画像なども書き直したコードを実行したものを貼ってください。
AEGIL

2020/11/14 00:58

承知いたしました
退会済みユーザー

退会済みユーザー

2020/11/14 01:05

デバッガで見た時 innerjoin を展開して中身を見ることはできますか? 期待通りの結果が得られてますか?
AEGIL

2020/11/14 01:16

datagridview1.datasorse=innnerjoinの箇所を訂正した結果なぜか改善されました。。なぜか理解はできておりませんが。。
guest

回答2

0

ロード中に連打したことで二度とうこうされてしまった

投稿2020/11/14 01:10

編集2020/11/14 01:12
AEGIL

総合スコア7

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

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

0

自己解決

dataGridView1.DataSource =innnerjoinの箇所を下記のコードに直したら改善いたしました

c#

1BindingSource source = new BindingSource(); 2 source.DataSource=innnerjoin; 3 dataGridView1.DataSource = source;

投稿2020/11/14 01:08

AEGIL

総合スコア7

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

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

退会済みユーザー

退会済みユーザー

2020/11/14 02:10

DataGridView の DataSource として innnerjoin オブジェクトの型 IEnumerable<T> がサポートされてないから、直接代入すると表示されなかったということのようですね。 innnerjoin.ToList() で List<T> 型に変換すれば解決するはずですが、質問者さんがやったように IEnumerable をサポートしている BindingSource を間に挟む方が正解と思います。
AEGIL

2020/11/14 03:51

ご返答頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問