private void UC_PlcDataState_Load(object sender, EventArgs e)
        {
            //다른 쓰레드에서 윈폼 컨트롤 사용가능 (비동기 작업에서 사용)
            //Control.CheckForIllegalCrossThreadCalls = false;

            if (!Directory.Exists(MyApp.RootRef))
            {
                Directory.CreateDirectory(MyApp.RootRef);
            }
            if (File.Exists(_PLCRefPath))
            {
                try
                {
                    int    iArrcnt = 0;
                    string Connstr = MyApp.RootMDB(_PLCRefPath);
                    using (OleDbConnection connDB = new OleDbConnection(Connstr))
                    {
                        connDB.Open();
                        foreach (string tbName in Share.GetMDBTable(connDB))
                        {
                            string sql = $"Select *from {tbName} " + "Order by PlcName ASC,BlockNum ASC,IndexNo ASC";

                            Array.Resize(ref tabPage, iArrcnt + 1);
                            Array.Resize(ref Uc_dgv, iArrcnt + 1);

                            tabPage[iArrcnt] = new TabPage();
                            AddTabpage(tbName, iArrcnt);

                            Uc_dgv[iArrcnt] = new UC_DGV();
                            AddDGV(iArrcnt);

                            using (DataSet dsData = new DataSet())
                            {
                                OleDbDataAdapter oledbAdapter = new OleDbDataAdapter(sql, connDB);
                                oledbAdapter.Fill(dsData);

                                //.DoubleBuffered(True)
                                Stopwatch Tchk = new Stopwatch();
                                Tchk.Start();

                                Uc_dgv[iArrcnt].DGVPlc.DataSource = dsData.Tables[0];
                                DataGridViewTextBoxColumn addrCol = new DataGridViewTextBoxColumn();

                                addrCol.Name       = "PLCVal";
                                addrCol.HeaderText = "PLCVal";

                                Uc_dgv[iArrcnt].DGVPlc.Columns.Add(addrCol);

                                Tchk.Stop();
                                Debug.Print(Tchk.Elapsed.ToString());

                                //DetailsView.Dispose();
                                oledbAdapter.Dispose();
                                oledbAdapter = null;

                                for (int i = 0; i < Uc_dgv[iArrcnt].DGVPlc.Columns.Count; i++)
                                {
                                    Uc_dgv[iArrcnt].DGVPlc.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                                }
                            }
                            Uc_dgv[iArrcnt].DGVPlc.DoubleBuffered();
                            iArrcnt++;
                        }
                        connDB.Close();
                        connDB.Dispose();
                    }
                }
                catch (Exception ex)
                {
                    StackTrace trace      = new StackTrace(ex, true);
                    StackFrame stackFrame = trace.GetFrame(trace.FrameCount - 1);
                    int        lineNumber = stackFrame.GetFileLineNumber();

                    I_Sub.ErrorLog(($"({lineNumber}) : {ex.ToString()}"));
                }
            }
        }
        private void BindingPLCRefFile()
        {
            string sql;

            if (File.Exists(gs_PLCRefPath))
            {
                connDB = new OleDbConnection(Connstr);
                connDB.Open();
                int iArrcnt = 0;
                foreach (string tbName in Share.GetMDBTable(connDB))
                {
                    sql = $"Select *from {tbName} " + "Order by PlcName ASC,BlockNum ASC,IndexNo ASC";
                    try
                    {
                        Array.Resize(ref tabPage, iArrcnt + 1);
                        Array.Resize(ref Uc_dgv, iArrcnt + 1);
                        Array.Resize(ref oledbAdapter, iArrcnt + 1);

                        tabPage[iArrcnt] = new TabPage();
                        AddTabpage(tbName, iArrcnt);

                        Uc_dgv[iArrcnt] = new UC_DGV();
                        AddDGV(iArrcnt);

                        oledbAdapter[iArrcnt] = new OleDbDataAdapter(sql, connDB);
                        oledbAdapter[iArrcnt].Fill(dsData, tbName);

                        //dsData.(strFolerPath & "\PLCAddress.mdb")
                        DataTableCollection tables      = dsData.Tables;
                        DataView            DetailsView = new DataView(tables[tbName]);

                        //DataGridView1.AutoGenerateColumns = False
                        Uc_dgv[iArrcnt].DGVPlc.DataSource = DetailsView;
                        iArrcnt++;
                    }
                    catch (Exception ex)
                    {
                        StackTrace trace      = new StackTrace(ex, true);
                        StackFrame stackFrame = trace.GetFrame(trace.FrameCount - 1);
                        int        lineNumber = stackFrame.GetFileLineNumber();

                        frm.ErrorLog(($"({lineNumber}) : {ex.ToString()}"));
                    }
                }
            }
        }