public void UpdatePsDm_Tables()
        {
            PsDmDict _PsDmDict = new PsDmDict();
            Dictionary <string, List <int> > row_ids = new Dictionary <string, List <int> >();//key: ps EbSid

            this.GetPsQueryAndParams(_PsDmDict, row_ids);
            _PsDmDict.ExecuteQuery(this.ebForm);
            _PsDmDict.AttachPsDmTable(this.ebForm, this._FormData, this.drPsList, row_ids);
        }
        private void GetPsQueryAndParams(PsDmDict _PsDmDict, Dictionary <string, List <int> > row_ids)
        {
            string       psqry;
            int          p_i = 0;
            EbDataReader dataReader;

            if (this.ebForm.EbConnectionFactory == null)
            {
                throw new FormException("Something went wrong", (int)HttpStatusCode.InternalServerError, "ConnectionFactory is null", "PsDmHelper -> GetPsQueryAndParams");
            }

            foreach (EbControl psCtrl in this.drPsList)
            {
                row_ids.Add(psCtrl.EbSid, new List <int>());
                List <Param>   ParamsList = (psCtrl as IEbDataReaderControl).ParamsList;
                IEbPowerSelect ipsCtrl    = psCtrl as IEbPowerSelect;
                if (ParamsList == null)
                {
                    Console.WriteLine($"ParamsList in PowerSelect {psCtrl.Name} is null. Trying to UpdateParamsMeta...");
                    ipsCtrl.UpdateParamsMeta(service, service.Redis);
                    ParamsList = (psCtrl as IEbDataReaderControl).ParamsList;
                    if (ParamsList == null)
                    {
                        throw new FormException($"Invalid ParamsList in '{psCtrl.Label ?? psCtrl.Name}'. Contact Admin", (int)HttpStatusCode.InternalServerError, "Save object in dev side", "EbWebForm");
                    }
                }
                TableSchema _pstable = this.ebForm.FormSchema.Tables.Find(e => e.TableName == ipsCtrl.TableName);
                if (_pstable == null)
                {
                    throw new FormException("Something went wrong", (int)HttpStatusCode.InternalServerError, "_pstable is null", "EbWebForm");
                }
                SingleTable psTable = this._FormData.MultipleTables.ContainsKey(_pstable.TableName) ? this._FormData.MultipleTables[_pstable.TableName] : null;
                if (psTable == null)
                {
                    Console.WriteLine("[INFO] PS_Table is null.");
                }
                string vm_vals = string.Empty;

                (psqry, dataReader) = ipsCtrl.GetSqlAndDr(this.service);
                IDatabase DataDB = dataReader.GetDatastore(this.ebForm.EbConnectionFactory);

                if (psCtrl is EbDGPowerSelectColumn dgpsCtrl && dgpsCtrl.StrictSelect && psTable?.Count > 0)// separate query
                {
                    _PsDmDict.TryAdd(DataDB, psCtrl);
                    foreach (SingleRow Row in psTable)
                    {
                        if (Row[psCtrl.Name] != null)
                        {
                            string     temp = this.AddPsParams(psCtrl, DataDB, _PsDmDict.GetPList(DataDB), Row, ref p_i, psqry);
                            List <int> nums = Convert.ToString(Row[psCtrl.Name]).Split(",").Select(e => { return(int.TryParse(e, out int ie) ? ie : 0); }).ToList();
                            _PsDmDict.AppendQuery(DataDB, GetPsDmSelectQuery(temp, ipsCtrl, nums));
                            p_i++;
                            row_ids[psCtrl.EbSid].Add(Row.RowId);
                        }
                    }
                }