前提
リンク内容
こちらの質問の内容について追加で疑問点が出たのでスレッドを再度上げさせていただきます。
質問内容
下記のコード
{1}ResultDT内に結合後のデータ格納用のクラス
{2}ResultDTはOracleDTとCsvDTをinnnerjoinで結合しています。
string[] names = innnerjoin.Select(r => r.名前).Distinct().ToArray();以降の文で
結合結果の内容編集する(名前が連続したとき枝番を作成するというもの)
処理をしているのですが、現状のコードだとDataGridViewにinnnerjoinを入れてしまっているので
DataGridViewに表示しようとした際に編集前のデータが出力されてしまいます。
データの受け渡しの流れが理解できていないのでどうしたらDataGridViewに編集後の値が反映された状態でResultDT内のすべての要素を含んだ表を表示することができるのでしょうか?
c#
1public class OracleDT 2 { 3 //格納先 4 public string name{ get; set; } 5 public int count{ get; set; } 6 public string code{ get; set; } 7 } 8 public class CsvDT 9 { 10 //格納先 11 public string name{ get; set; } 12 public int count{ get; set; } 13 public string code{ get; set; } 14 } 15 public class ResultDT 16 { 17 //格納先 18 public int NO{ get; set; } 19 public string 名前{ get; set; } 20 public int 枝番号{ get; set; } 21 public string 商品{get;set;} 22 public string 商品備考{get;set;}//空の列なので値は入れない 23 } 24prrotected void Button(object sender ) 25 List<OracleDT> oracleDTs = createOracleList(); 26 List<CsvDT> csvDTs = createCsvList(); 27 28 var innnerjoin = from c in csvDTs 29 join o in oracleDTs 30 on c.code equals o.code 31 select new ResultDT 32 { 33 NO= i++, 34 名前 = c.Name, 35 枝番号 = 1, 36 商品 = o.SName 37 } 38 39 string[] names = innnerjoin.Select(r => r.名前).Distinct().ToArray(); 40 foreach (string name in names) 41 { 42 List<ResultDT> resultsN = innnerjoin.Where(r => r.名前 == name).ToList(); 43 int i = 1; 44 foreach (ResultDT result in resultsN) 45 { 46 result.枝番号 = i++; 47 console.writeline(result.枝番号); 48 } 49 } 50 //ソース作成 51 BindingSource source = new BindingSource(); 52 //ソースにinnnerjoin内のデータ挿入 53 source.DataSource=innnerjoin; 54 //DataGridViewにデータを挿入 55 dataGridView1.DataSource = source;
追記
上記のコード実行時に表示されるDataGridViewの内容
source.DataSource=innnerjoin;
No,名前,枝番,商品,商品備考 1,satou,1,コーラ, 2,satou,1,ソーダ, 3,kagaya,1,リンゴ, 4,gotou,1,コーラ, 5,gotou,1,スイカ, 6,gotou,1,メロン,
実現したいDataGridViewの内容
No,名前,枝番,商品,商品備考 1,satou,1,コーラ, 2,satou,2,ソーダ, 3,kagaya,1,リンゴ, 4,gotou,1,コーラ, 5,gotou,2,スイカ, 6,gotou,3,メロン,
動いているが枝番号が反映されていない
string[] names = innnerjoin.Select(r => r.名前).Distinct().ToArray();//2 枝番の編集箇所 foreach (string name in names)//name=satou names=名前列全件データ { List<ResultDT> resultsN = innnerjoin.Where(r => r.名前 == name).ToList(); int i = 1; foreach (ResultDT result in resultsN) { result.枝番号 = i++; console.writeline(result.枝番号); } }
一緒になっている箇所
>>枝番号を書き換える前の innnerjoin のことですか? var innnerjoin = from c in csvDTs//1 枝番変更前 join o in oracleDTs on c.code equals o.code //ソース作成 BindingSource source = new BindingSource(); //ソースにinnnerjoin内のデータ挿入 source.DataSource=innnerjoin; //3 ここで1を呼び出している? //DataGridViewにデータを挿入 dataGridView1.DataSource = source;
訂正前の文
下記のコードだと
public class ResultDT>innnerjoin=oracleDTs+csvDTsということだと思っていて
var innerjoin=... select new ResultDT{}内にデータがあるときその上に属してるResultDT内のstring {get; set;}に値が入り select new ResultDT{}内に該当するものがないときResultDT内のstring {get; set;}は空データの列になる解釈でした。
ResultDTという箱(public class ResultDT)にDataを入れるための小さい箱(public string {get; set;})があるとしてinnnerjoinはResultDT内の小さい箱の名前と一致するデータを各要素(小さい箱)にいれているイメージでした。なので小さい箱はあってもinnerjoinでデータを渡していない場合は小さい箱は用意されているが値が入っていないのでDataGridViewで表示した際に空の列が作成される想定をしていたのですが現状の書き方(DataGridView=innnerjoin)だと
string[] names = innnerjoin.Select...の編集内容はDatagridViewでは繁栄されずに
select new ResultDTで入れた値のみが出ている状況になります。
DataGridViewに編集後のデータを入れるにあたってどうしたらいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー