private void button1_Click_1(object sender, EventArgs e) { //strSQL = strSQL_SEL + selTN; DataTable dtN = new DataTable();//全ての項目テーブル DataTable dtZ = new DataTable();//検索対象(NAME ALL) Console.WriteLine("実行..."); //全ての項目テーブル strSQL = "select * from NOUKI"; Console.WriteLine(strSQL); dtN = OraTableSelect(strSQL); //検索対象(NAME ALL) strSQL = "select * from ZAIKO"; Console.WriteLine(strSQL); dtZ = OraTableSelect(strSQL); //word列追加する dtN.Columns.Add("word"); dtN.Columns.Add("aimai"); dtN.Columns.Add("hantei"); dtN.Columns.Add("LOT"); dtN.Columns.Add("SNOUKI"); dtN.Columns.Add("BIKOU"); int NCnt = dtN.Rows.Count; string strWord; string strAimai; string strLot; string str; string target = "-"; int tgtidx; int X=0; //検索ワード作成 for (int m = 0; m < NCnt; m++) { str = dtN.Rows[m]["SZUBAN"].ToString(); tgtidx = str.IndexOf(target); if (tgtidx == -1) { dtN.Rows[m]["word"] = str.Substring(tgtidx, -6); } else { dtN.Rows[m]["word"] = str.Substring(tgtidx, str.Length - tgtidx); } } for (int count = 0; count < NCnt; count++) { //完全一致検索 string tgtZUBAN = dtN.Rows[X]["NZUBAN"].ToString(); var kanzen = dtZ.AsEnumerable().Where(i => i["ZZUBAN"].ToString().Contains(tgtZUBAN)); if (kanzen.Any())//完全一致がある場合 { DataTable dtKanzen = kanzen.CopyToDataTable(); int kznCNT = dtKanzen.Rows.Count; dtN.Rows[X]["aimai"] = dtN.Rows[0]["ZZUBAN"]; dtN.Rows[X]["LOT"] = dtKanzen.Rows[0]["LOT"].ToString(); dtN.Rows[X]["SNOUKI"] = dtKanzen.Rows[0]["SNOUKI"].ToString(); dtN.Rows[X]["BIKOU"] = dtKanzen.Rows[0]["BIKOU"].ToString(); //完全一致が1件のみ(単一ロット) if (kznCNT == 1) { dtN.Rows[X]["hantei"] = "完全一致、単一ロット"; dtN.Rows[X]["aimai"] = dtKanzen.Rows[0]["ZZUBAN"].ToString(); X++; } //完全一致が2件以上(複数ロット) else if (kznCNT >= 2) { int Y = X;//行を追加する前の行数を保持 dtN.Rows[X]["hantei"] = "完全一致、複数ロット"; dtN.Rows[X]["aimai"] = dtKanzen.Rows[0]["ZZUBAN"].ToString(); //★dtaddz(); for (int ar = 1; ar <= kznCNT - 1; ar++) { DataRow addrw = dtN.NewRow(); dtN.Rows.InsertAt(addrw, X + ar);//行追加(対象行,開始位置) //★dtaddz(); } X = Y + kznCNT;//次の行位置 } //else //{ // X++; //} //あいまい検索 strWord = dtN.Rows[X]["word"].ToString(); var tmpAimai = dtZ.AsEnumerable().Where(i => i["ZZUBAN"].ToString().Contains(strWord)); if (tmpAimai.Any()) { DataTable dttmp = tmpAimai.CopyToDataTable(); //完全一致を取り除いたデータを抽出 var aimai = dttmp.AsEnumerable().Where(x => !x["ZZUBAN"].ToString().Contains(tgtZUBAN)); DataTable dtAimai = aimai.CopyToDataTable(); int aimaiCNT = dtAimai.Rows.Count; if (aimaiCNT >= 2) { dtN.Rows[X]["hantei"] = "あり"; int Y = X;//行を追加する前の行数を保持 strAimai = dtAimai.Rows[0]["ZZUBAN"].ToString(); dtN.Rows[X]["aimai"] = strAimai; dtN.Rows[X]["LOT"] = dtAimai.Rows[0]["LOT"].ToString(); dtN.Rows[X]["SNOUKI"] = dtAimai.Rows[0]["SNOUKI"].ToString(); dtN.Rows[X]["BIKOU"] = dtAimai.Rows[0]["BIKOU"].ToString(); for (int ar = 1; ar <= aimaiCNT - 1; ar++) { strAimai = dtAimai.Rows[ar]["ZZUBAN"].ToString(); //あいまいword DataRow addrw = dtN.NewRow(); dtN.Rows.InsertAt(addrw, X + ar);//行追加(対象行,開始位置) dtN.Rows[X + ar]["aimai"] = strAimai; dtN.Rows[X + ar]["LOT"] = dtAimai.Rows[ar]["LOT"].ToString(); dtN.Rows[X + ar]["SNOUKI"] = dtAimai.Rows[ar]["SNOUKI"].ToString(); dtN.Rows[X + ar]["BIKOU"] = dtAimai.Rows[ar]["BIKOU"].ToString(); } X = Y + aimaiCNT;//次の行位置 } else { X++; } } else//あいまい一致なし { dtN.Rows[X]["hantei"] = "なし"; X++; } } //完全一致なし else { dtN.Rows[X]["hantei"] = "完全一致なし"; X++; } } dataGridView1.DataSource = dtN;