お世話になっております。
三日前に解決済みにした質問なのですが、リンク内容
ウォッチで確認して値はしっかり入っているのに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 }
dataGridView1.DataSource = innnerjoin; の innnerjoin が参照しているものがどうなっているか調べましたか?
+ 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>}
中身はこうなっていました。
デバッガは使えますか? 画像は貼れますか?
ちょっとコードを眺めてみましたが、そもそも、質問のコードではコンパイラも通らないですよね?
修正いたしました。
コンパイルが通らない>>所々変えてしまったせいで動かないコードになっている可能性がございます。気になる点あったでしょうか?
デバッガの画像を拝見しましたが、それと質問に書かれたコードは違います。上にも書きましたが、質問に書いたコードはコンパイラも通らないはず。そいういうのは質問として絶対ダメです。
値とオラクルのパスを消したときにもしかするとなにかしてしまったのかもしれません。
申し訳ございません。値変更前の状態になっております。
質問のコードを書き換えたようですが、依然として画像とは違います。質問のコードは on o.Barcode equals c.Barcode ですが、画像は on o.自社コード equals c.Barcode となってます。そういうの、ホントに質問としてダメですよ。
閲覧者・回答者はスレッドに書いてあること以外は知る由もないです。なのに、言ってることと実際にやってることが違うのは非常にマズイと思いませんか?
申し訳ありません。見落としておりました。
そういうことになるので実際のコードを書き直してアップするのはやめましょう。書き直すなら書き直したコードを Visual Studio で動かして、そのコードをそのままコピペして結果を書くようにしてください。デバッグ画像なども書き直したコードを実行したものを貼ってください。
承知いたしました
デバッガで見た時 innerjoin を展開して中身を見ることはできますか? 期待通りの結果が得られてますか?
datagridview1.datasorse=innnerjoinの箇所を訂正した結果なぜか改善されました。。なぜか理解はできておりませんが。。
回答2件
あなたの回答
tips
プレビュー