unote 書けば書くほどに

20230319

//データ連結
            for (int X = 0; X < dtNouki.Rows.Count; X++)
            {
                strWord = dtNouki.Rows[X]["word"].ToString();
                dtNouki.Rows[X]["X"] = X;

                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;
                var temp = aimai;

                if (temp.Any())
                {
                    DataTable dt = temp.CopyToDataTable();
                    int rowCNT = dt.Rows.Count;

                    string imazu = dtNouki.Rows[X]["NOUZUBAN"].ToString();//現在の対象図番
                    string atozu = "";//次の対象図番
                    int sameCNT = 1;

                    if (X < dtNouki.Rows.Count - 1)
                    {
                        atozu = dtNouki.Rows[X + 1]["NOUZUBAN"].ToString();

                        for (int cnt = 1; imazu == atozu; cnt++)//同じ図番が続けばsameCNTをインクリメント
                        {
                            sameCNT++;
                            atozu = dtNouki.Rows[X + sameCNT]["NOUZUBAN"].ToString();
                        }
                    }

                    int dif = rowCNT - sameCNT;//同じ図番が続く行数とdtの行数の差分

                    if (sameCNT < rowCNT) //dtの行数が多ければ追加
                    {
                        for (int ar = 1; ar <= dif; ar++)
                        {
                            DataRow addar = dtNouki.NewRow();
                            dtNouki.Rows.InsertAt(addar, X + ar);
                        }
                        X = X + dif;
                    }
                    else { dif = 0; }

                    if (dif > 0) { X = X - dif; }//記入する位置に最初に戻す

                    //在庫データ追加
                    for (int ar = 0; ar <= rowCNT - 1; ar++)
                    {
                        if (ar != 0) { X = X + 1; }

                        dtNouki.Rows[X]["X"] = X;
                        dtNouki.Rows[X]["aimai"] = dt.Rows[ar]["ZAIZUBAN"].ToString();//strAimai
                        
                        if (tgtZUBAN == dt.Rows[ar]["ZAIZUBAN"].ToString())
                        {
                            dtNouki.Rows[X]["hantei"] = "完全一致";
                        }
                        else
                        {
                            dtNouki.Rows[X]["hantei"] = "部分一致";
                        }

                        dtNouki.Rows[X]["LOT"] = dt.Rows[ar]["LOT"].ToString();
                        dtNouki.Rows[X]["SNOUKI"] = dt.Rows[ar]["SNOUKI"].ToString();
                        dtNouki.Rows[X]["BIKOU"] = dt.Rows[ar]["BIKOU"].ToString();

                        //同じなら削除
                        if (X > 0 && dtNouki.Rows[X]["aimai"].ToString() == dtNouki.Rows[X - 1]["aimai"].ToString())
                        {
                            dtNouki.Rows[X]["aimai"] = "";

                            if (X > 0 && dtNouki.Rows[X]["hantei"].ToString() == dtNouki.Rows[X - 1]["hantei"].ToString())
                            {
                                dtNouki.Rows[X]["hantei"] = "";
                            }
                        }
                    }

                    if (dif > 0)
                    {
                        dif = dif - (rowCNT - 1);
                        X = X + dif;
                    }
                    else 
                    { 
                        X = X + sameCNT - 1;
                    }
                }

                else//部分一致なし
                {
                    dtNouki.Rows[X]["hantei"] = "なし";
                    X++;
                }
            }
                dataGridView1.DataSource = dtNouki;//テーブル表示