■他にやること
・あいまい無の場合のパターン確認
・オリジナル関数(数字を#に置き換える)
private void button1_Click_1(object sender, EventArgs e) { //strSQL = strSQL_SEL + selTN; DataTable dtNouki = new DataTable();//全ての項目テーブル DataTable dtZaiko = new DataTable();//検索対象(NAME ALL) Console.WriteLine("実行..."); //全ての項目テーブル strSQL = "select * from NOUKI"; Console.WriteLine(strSQL); dtNouki = OraTableSelect(strSQL); //検索対象(NAME ALL) strSQL = "select * from ZAIKO"; Console.WriteLine(strSQL); dtZaiko = OraTableSelect(strSQL); //word列追加する dtNouki.Columns.Add("X"); dtNouki.Columns.Add("word"); dtNouki.Columns.Add("aimai"); dtNouki.Columns.Add("hantei"); dtNouki.Columns.Add("LOT"); dtNouki.Columns.Add("SNOUKI"); dtNouki.Columns.Add("BIKOU"); int noukiCnt = dtNouki.Rows.Count; string strWord; string strWordBF; string strAimai; string strLot; string str; string target = "-"; int tgtidx; int X=0; int buf=0; //検索ワード作成→★WordCreate for (int m = 0; m < noukiCnt; m++) { str = dtNouki.Rows[m]["NOUZUBAN"].ToString(); tgtidx = str.IndexOf(target); if (tgtidx == -1) { dtNouki.Rows[m]["word"] = str.Substring(tgtidx, -6); } else { dtNouki.Rows[m]["word"] = str.Substring(tgtidx, str.Length - tgtidx); } } dtNouki.Rows[0]["X"] = 0; //--- 検索部分 ---- for (int count = 0; count < dtNouki.Rows.Count; count++) { //行数がXを超えたらループ抜け if (dtNouki.Rows.Count <= X) { break; } strWord = dtNouki.Rows[X]["word"].ToString(); dtNouki.Rows[X]["X"] = X; //1つ前の行と図番確認用 if (X == 0) { strWordBF = dtNouki.Rows[0]["word"].ToString(); } else if (X > 0 && buf == 0) { strWordBF = dtNouki.Rows[X - 1]["word"].ToString(); } else { strWordBF = dtNouki.Rows[X - buf]["word"].ToString(); buf = 0;//bufをリセット } //対象図番(納期) string tgtZUBAN = dtNouki.Rows[X]["NOUZUBAN"].ToString(); //あいまいデータ var aimai = dtZaiko.AsEnumerable().Where(i => i["ZAIZUBAN"].ToString().Contains(strWord)); //完全一致データ var kanzen = dtZaiko.AsEnumerable().Where(i => i["ZAIZUBAN"].ToString().Contains(tgtZUBAN)); //デフォルト:完全一致方式 var temp = kanzen; //あいまい検索スイッチ int aimaiSW = 1; if (aimaiSW == 1) { temp = aimai; } if (temp.Any()) { DataTable dt = temp.CopyToDataTable(); int rowCNT = dt.Rows.Count; //1件目 strAimai = dt.Rows[0]["ZAIZUBAN"].ToString(); dtNouki.Rows[X]["aimai"] = strAimai; //★for(j=0 J++){AdddtZaioko(,j)} dtNouki.Rows[X + ar]["aimai"] = strAimai; //2件目以降 if (rowCNT >= 2 && strWord != strWordBF) { dtNouki.Rows[X]["hantei"] = "複数ロット"; int Y = X;//行を追加する前の行数を保持 for (int ar = 1; ar < rowCNT; ar++) { strAimai = dt.Rows[ar]["ZAIZUBAN"].ToString(); //あいまいword if (strAimai == tgtZUBAN)//一致確認 { dtNouki.Rows[X + ar]["hantei"] = dtNouki.Rows[X + ar]["hantei"] + " 対象図番"; } DataRow addrw = dtNouki.NewRow(); dtNouki.Rows.InsertAt(addrw, X + ar);//行追加(対象行,開始位置) //★for(j=0 J++){AdddtZaioko(,j)} dtNouki.Rows[X + ar]["aimai"] = strAimai; } X = Y + rowCNT;//次の行位置 buf = rowCNT; } //rowCNTが1件のみ場合の後処理 else { dtNouki.Rows[X]["hantei"] = "単一ロット"; if (strAimai == tgtZUBAN)//一致確認 { dtNouki.Rows[X]["hantei"] = dtNouki.Rows[X]["hantei"] + " 対象図番"; } X++; } } else//部分一致もない場合 { dtNouki.Rows[X]["hantei"] = "なし"; X++; } } dataGridView1.DataSource = dtNouki;//テーブル表示 }