Example #1
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to change up order of a row in sys_ReportPara
        ///    </Description>
        ///    <Inputs>
        ///        ReportID, ParaName
        ///    </Inputs>
        ///    <Outputs>
        ///      changes
        ///    </Outputs>
        ///    <Returns>
        ///       bool
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///       Created: 05-Jan-2005
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public bool MoveUp(string pstrReportID, string pstrParaName)
        {
            bool             blnResult      = false;
            sys_ReportParaDS dsReportPara   = new sys_ReportParaDS();
            sys_ReportParaVO voPreviousPara = new sys_ReportParaVO();
            // get current para order
            sys_ReportParaVO voCurrentPara = (sys_ReportParaVO)dsReportPara.GetObjectVO(pstrReportID, pstrParaName);

            // if current parameter reached the top of order - 1, then cannot move
            if (voCurrentPara.ParaOrder <= 1)
            {
                blnResult = false;
            }
            else
            {
                // get next para order
                int intNextOrder = dsReportPara.GetNextOrder(pstrReportID, voCurrentPara.ParaOrder, MoveDirection.Up);
                // change order
                voPreviousPara.ParaOrder = voCurrentPara.ParaOrder;
                voCurrentPara.ParaOrder  = intNextOrder;

                // update two rows in database
                dsReportPara.Update(voPreviousPara);
                dsReportPara.Update(voCurrentPara);
                // return value
                blnResult = true;
            }
            return(blnResult);
        }
Example #2
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to change down order of a row in sys_ReportPara
        ///    </Description>
        ///    <Inputs>
        ///        ReportID, ParaName
        ///    </Inputs>
        ///    <Outputs>
        ///      changes
        ///    </Outputs>
        ///    <Returns>
        ///       bool
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///       Created: 05-Jan-2005
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public bool MoveDown(string pstrReportID, string pstrParaName)
        {
            bool             blnResult    = false;
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();
            sys_ReportParaVO voNextPara   = new sys_ReportParaVO();
            // get current para order
            sys_ReportParaVO voCurrentPara = (sys_ReportParaVO)dsReportPara.GetObjectVO(pstrReportID, pstrParaName);
            // get max order
            int intMaxOrder = dsReportPara.GetMaxOrder(pstrReportID);

            // if current parameter reached the bottom, then cannot move down
            if (voCurrentPara.ParaOrder == intMaxOrder)
            {
                blnResult = false;
            }
            else
            {
                // get next para order
                int intNextOrder = dsReportPara.GetNextOrder(pstrReportID, voCurrentPara.ParaOrder, MoveDirection.Down);
                // change order
                voNextPara.ParaOrder    = voCurrentPara.ParaOrder;
                voCurrentPara.ParaOrder = intNextOrder;

                // update two rows in database
                dsReportPara.Update(voNextPara);
                dsReportPara.Update(voCurrentPara);
                // return value
                blnResult = true;
            }
            return(blnResult);
        }
Example #3
0
        /// <summary>
        /// Switch two params order
        /// </summary>
        /// <param name="pobjSourceParameter">Source Parameter</param>
        /// <param name="pobjDestParameter">Destination Parameter</param>

        public void SwitchParameters(object pobjSourceParameter, object pobjDestParameter)
        {
            sys_ReportParaDS dsReportParameter = new sys_ReportParaDS();

            dsReportParameter.Update(pobjSourceParameter);
            dsReportParameter.Update(pobjDestParameter);
        }
Example #4
0
        //**************************************************************************
        ///    <Description>
        ///       This method not implements yet
        ///    </Description>
        ///    <Inputs>
        ///
        ///    </Inputs>
        ///    <Outputs>
        ///
        ///    </Outputs>
        ///    <Returns>
        ///
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///		Created: 28-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public void Delete(object pObjectVO)
        {
            sys_ReportVO voReport = (sys_ReportVO)pObjectVO;

            sys_ReportAndGroupDS dsReportAndGroup = new sys_ReportAndGroupDS();

            // delete data in sys_ReportAndGroup
            dsReportAndGroup.DeleteByReportID(voReport.ReportID);

            // delete data in sys_ReportDrillDown where master id is selected report id
            sys_ReportDrillDownDS dsDrillDown = new sys_ReportDrillDownDS();

            dsDrillDown.Delete(voReport.ReportID);

            // delete data in sys_ReportFields
            sys_ReportFieldsDS dsReportFields = new sys_ReportFieldsDS();

            dsReportFields.Delete(voReport.ReportID);

            // delete data in sys_ReportPara
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            dsReportPara.Delete(voReport.ReportID);

            // retrieve history of this report
            sys_ReportHistoryVO     voReportHistory = new sys_ReportHistoryVO();
            sys_ReportHistoryDS     dsReportHistory = new sys_ReportHistoryDS();
            sys_ReportHistoryParaDS dsHistoryPara   = new sys_ReportHistoryParaDS();
            ArrayList arrHistory = new ArrayList();

            arrHistory = dsReportHistory.ListByReport(voReport.ReportID);
            // delete all data in sys_ReportHistoryPara related to each history
            if (arrHistory.Count > 0)
            {
                for (int i = 0; i < arrHistory.Count - 1; i++)
                {
                    voReportHistory = (sys_ReportHistoryVO)arrHistory[i];
                    dsHistoryPara.Delete(voReportHistory.HistoryID);
                }
            }
            // delete data in sys_ReportHistory
            dsReportHistory.DeleteByReportID(voReport.ReportID);

            // delete data in sys_Report
            sys_ReportDS dsReport = new sys_ReportDS();

            dsReport.Delete(voReport.ReportID);
        }
Example #5
0
        //**************************************************************************
        ///    <Description>
        ///       This method checks business rule and call Add() method of DS class
        ///    </Description>
        ///    <Inputs>
        ///       Value object
        ///    </Inputs>
        ///    <Outputs>
        ///      N/A
        ///    </Outputs>
        ///    <Returns>
        ///      void
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///     13-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public void Add(object pobjObjectVO)
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            templateDS.Add(pobjObjectVO);
        }
Example #6
0
        //**************************************************************************
        ///    <Description>
        ///      This method uses to get all para of specified report
        ///    </Description>
        ///    <Inputs>
        ///      ReportID
        ///    </Inputs>
        ///    <Outputs>
        ///		List of parameter
        ///    </Outputs>
        ///    <Returns>
        ///       ArrayList
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///      05-Jan-2005
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public ArrayList ListByReport(string pstrReportID)
        {
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            return(dsReportPara.GetObjectVOs(pstrReportID));
        }
Example #7
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to update a DataSet
        ///    </Description>
        ///    <Inputs>
        ///        DataSet
        ///    </Inputs>
        ///    <Outputs>
        ///      N/A
        ///    </Outputs>
        ///    <Returns>
        ///       void
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///       13-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public void UpdateDataSet(DataSet pData)
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            templateDS.UpdateDataSet(pData);
        }
Example #8
0
        //**************************************************************************
        ///    <Description>
        ///      This method uses to get all data
        ///    </Description>
        ///    <Inputs>
        ///
        ///    </Inputs>
        ///    <Outputs>
        ///
        ///    </Outputs>
        ///    <Returns>
        ///       DataSet
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public DataSet List()
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            return(templateDS.List());
        }
Example #9
0
        public DataSet ExecuteSqlClause(string pstrSqlClause, string pstrWhereClause)
        {
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            return(dsReportPara.ExecuteSqlClause(pstrSqlClause, pstrWhereClause));
        }
Example #10
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to update data
        ///    </Description>
        ///    <Inputs>
        ///       pobjObjecVO
        ///    </Inputs>
        ///    <Outputs>
        ///
        ///    </Outputs>
        ///    <Returns>
        ///       void
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///    13-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public void Update(object pobjObjecVO)
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            templateDS.Update(pobjObjecVO);
        }
Example #11
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to get data
        ///    </Description>
        ///    <Inputs>
        ///       pintID
        ///    </Inputs>
        ///    <Outputs>
        ///      Value object
        ///    </Outputs>
        ///    <Returns>
        ///       object
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///     13-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public object GetObjectVO(string pstrReportID, string pstrParaName)
        {
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            return(dsReportPara.GetObjectVO(pstrReportID, pstrParaName));
        }
Example #12
0
        //**************************************************************************
        ///    <Description>
        ///       This method checks business rule and call Delete() method of DS class
        ///    </Description>
        ///    <Inputs>
        ///        pintID
        ///    </Inputs>
        ///    <Outputs>
        ///     Delete a record  from Database
        ///    </Outputs>
        ///    <Returns>
        ///       void
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///    13-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public void Delete(int pintID)
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            templateDS.Delete(pintID);
        }
Example #13
0
        //**************************************************************************
        ///    <Description>
        ///       This method not implements yet
        ///    </Description>
        ///    <Inputs>
        ///
        ///    </Inputs>
        ///    <Outputs>
        ///
        ///    </Outputs>
        ///    <Returns>
        ///
        ///    </Returns>
        ///    <Authors>
        ///       HungLa
        ///    </Authors>
        ///    <History>
        ///    13-Dec-2004
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************



        public void Delete(object pObjectVO)
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            templateDS.Delete(((sys_ReportParaVO)pObjectVO).ReportID, ((sys_ReportParaVO)pObjectVO).ParaName);
        }
Example #14
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to make a copy of specified report to another group,
        ///       also copy all data relative to report (sys_ReportAndGroup, sys_ReportDrillDown,
        ///       sys_ReportFields, sys_ReportPara).
        ///    </Description>
        ///    <Inputs>
        ///        Source ReportID, Destination GroupID
        ///    </Inputs>
        ///    <Outputs>
        ///      New report id
        ///    </Outputs>
        ///    <Returns>
        ///       new report id
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///       03-Jan-2005
        ///       11-Jan-2005
        ///    </History>
        ///    <Notes>
        ///		Return newly report id
        ///    </Notes>
        //**************************************************************************

        public object CopyReport(string pstrReportID, string pstrGroupID, out int ointReportOrder)
        {
            const string METHOD_NAME          = THIS + ".CopyReport()";
            const int    REPORT_ID_MAX_LENGTH = 20;
            const string CODE_DATE_FORMAT     = "yyyyMMddHHmmssfff";
            UtilsBO      boUtils  = new UtilsBO();
            sys_ReportDS dsReport = new sys_ReportDS();
            sys_ReportVO voReport;

            // use to add new report to selected group
            sys_ReportAndGroupVO voReportAndGroup = new sys_ReportAndGroupVO();
            sys_ReportAndGroupDS dsReportAndGroup = new sys_ReportAndGroupDS();

            // use to copy report para
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            // use to copy report fields
            sys_ReportFieldsDS dsReportFields = new sys_ReportFieldsDS();

            // use to copy drill down report
            sys_ReportDrillDownDS dsReportDrillDown = new sys_ReportDrillDownDS();

            // get the data of selected object
            voReport = (sys_ReportVO)(dsReport.GetObjectVO(pstrReportID));

            #region Copy report
            // make a copy report
            sys_ReportVO voCopiedReport = new sys_ReportVO();
            voCopiedReport = voReport;
            // get database server date time
            DateTime dtmDB = boUtils.GetDBDate();
            // report ID = yyyyMMddHHmmssfff
            voCopiedReport.ReportID = dtmDB.ToString(CODE_DATE_FORMAT);
            if (voCopiedReport.ReportID.Length > REPORT_ID_MAX_LENGTH)
            {
                throw new PCSBOException(ErrorCode.MESSAGE_VALUE_TOO_LONG, METHOD_NAME, new Exception());
            }
            voCopiedReport.ReportName = Constants.COPY_OF + voCopiedReport.ReportName;
            // save new report to database
            dsReport.Add(voCopiedReport);
            #endregion

            #region Add new report to group
            voReportAndGroup.GroupID  = pstrGroupID;
            voReportAndGroup.ReportID = voCopiedReport.ReportID;
            // increase report order by one in group.
            voReportAndGroup.ReportOrder = dsReportAndGroup.GetMaxReportOrder(pstrGroupID) + 1;
            // save data
            dsReportAndGroup.Add(voReportAndGroup);
            ointReportOrder = voReportAndGroup.ReportOrder;
            #endregion

            #region Copy all data relative from old report to new report

            #region ReportPara
            // get all parameter(s)
            sys_ReportParaVO voReportPara;
            ArrayList        arrParas = dsReportPara.GetObjectVOs(pstrReportID);
            // make a copy of each parameter
            if (arrParas.Count > 0)
            {
                for (int i = 0; i < arrParas.Count; i++)
                {
                    voReportPara = (sys_ReportParaVO)(arrParas[i]);
                    // assign new report id
                    voReportPara.ReportID = voCopiedReport.ReportID;
                    // save new para
                    dsReportPara.Add(voReportPara);
                }
            }
            #endregion

            #region ReportFields
            // get all report fields
            sys_ReportFieldsVO voReportFields;
            ArrayList          arrFields = dsReportFields.GetObjectVOs(pstrReportID);
            // make a copy of each field
            if (arrFields.Count > 0)
            {
                for (int i = 0; i < arrFields.Count; i++)
                {
                    voReportFields = (sys_ReportFieldsVO)arrFields[i];
                    // assign new report id
                    voReportFields.ReportID = voCopiedReport.ReportID;
                    // save new field
                    dsReportFields.Add(voReportFields);
                }
            }
            #endregion

            #region ReportDrillDown
            // get all drill down report
            sys_ReportDrillDownVO voReportDrillDown;
            ArrayList             arrDrillDown = dsReportDrillDown.GetObjectVOs(pstrReportID);
            // make a copy each drill down report
            if (arrDrillDown.Count > 0)
            {
                for (int i = 0; i < arrDrillDown.Count; i++)
                {
                    voReportDrillDown = (sys_ReportDrillDownVO)arrDrillDown[i];
                    // assign new report id
                    voReportDrillDown.MasterReportID = voCopiedReport.ReportID;
                    // save new drill down
                    dsReportDrillDown.Add(voReportDrillDown);
                }
            }
            #endregion

            #endregion

            return(voCopiedReport);
        }
Example #15
0
        public DataSet GetDataFromTable(string pstrField, string pstrTableName, string[] pstrFilterFields)
        {
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            return(dsReportPara.GetDataFromTable(pstrField, pstrTableName, pstrFilterFields));
        }
Example #16
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to get max para order of specified report
        ///    </Description>
        ///    <Inputs>
        ///        ReportID
        ///    </Inputs>
        ///    <Outputs>
        ///      Max order
        ///    </Outputs>
        ///    <Returns>
        ///       int
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///       Created: 09-Jan-2005
        ///    </History>
        ///    <Notes>
        ///		  Change output from ArrayList to DataSet
        ///    </Notes>
        //**************************************************************************

        public int GetMaxParaOrder(string pstrReportID)
        {
            sys_ReportParaDS dsReportPara = new sys_ReportParaDS();

            return(dsReportPara.GetMaxOrder(pstrReportID));
        }
Example #17
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to update data
        ///    </Description>
        ///    <Inputs>
        ///       pobjObjecVO, Old para name
        ///    </Inputs>
        ///    <Outputs>
        ///
        ///    </Outputs>
        ///    <Returns>
        ///       void
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///		09-Jan-2005
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************

        public void Update(object pobjObjecVO, string pstrParaName)
        {
            sys_ReportParaDS templateDS = new sys_ReportParaDS();

            templateDS.Update(pobjObjecVO, pstrParaName);
        }
Example #18
0
        //**************************************************************************
        ///    <Description>
        ///       This method uses to get data for C1TrueDBGrid
        ///    </Description>
        ///    <Inputs>
        ///        MasterID, DetailID
        ///    </Inputs>
        ///    <Outputs>
        ///       DataTable
        ///    </Outputs>
        ///    <Returns>
        ///       DataTable
        ///    </Returns>
        ///    <Authors>
        ///       DungLA
        ///    </Authors>
        ///    <History>
        ///       06-Jan-2005
        ///       12/Oct/2005 Thachnn: fix bug injection
        ///    </History>
        ///    <Notes>
        ///    </Notes>
        //**************************************************************************
        public DataTable GetDataForTrueDBGrid(string pstrMasterID, string pstrDetailID, out bool oblnIsEdit)
        {
            const string METHOD_NAME = THIS + ".GetDataForTrueDBGrid()";

            string strSql = string.Empty;
            // create new table with 4 columns to store data and return to caller
            DataTable dtblSource = new DataTable(sys_ReportDrillDownTable.TABLE_NAME);

            dtblSource.Columns.Add(sys_ReportDrillDownTable.MASTERPARA_FLD);
            dtblSource.Columns.Add(sys_ReportDrillDownTable.DETAILPARA_FLD);
            dtblSource.Columns.Add(sys_ReportParaTable.DATATYPE_FLD);
            dtblSource.Columns.Add(sys_ReportDrillDownTable.FROMCOLUMN_FLD);
            dtblSource.Columns.Add(sys_ReportDrillDownTable.PARAORDER_FLD);
            // set data type for FromColumn column
            dtblSource.Columns[sys_ReportDrillDownTable.FROMCOLUMN_FLD].DataType = typeof(bool);
            // set default value for FromColumn
            dtblSource.Columns[sys_ReportDrillDownTable.FROMCOLUMN_FLD].DefaultValue = false;

            DataSet         dstSource = new DataSet();
            OleDbConnection oconPCS   = null;
            OleDbCommand    ocmdPCS   = null;

            #region Existed record in sys_ReportDrillDown table

            // first we check for existing record in sys_ReportDrillDown table
            strSql = "SELECT " + sys_ReportDrillDownTable.MASTERREPORTID_FLD + ","
                     + sys_ReportDrillDownTable.DETAILREPORTID_FLD + ","
                     + sys_ReportDrillDownTable.MASTERPARA_FLD + ","
                     + sys_ReportDrillDownTable.DETAILPARA_FLD + ","
                     + sys_ReportDrillDownTable.FROMCOLUMN_FLD + ","
                     + sys_ReportDrillDownTable.PARAORDER_FLD
                     + " FROM " + sys_ReportDrillDownTable.TABLE_NAME
                     + " WHERE " + sys_ReportDrillDownTable.MASTERREPORTID_FLD + "= ? "           //+ pstrMasterID + "'"
                     + " AND " + sys_ReportDrillDownTable.DETAILREPORTID_FLD + "= ? ";            // + pstrDetailID + "'";
            try
            {
                // if already existed, then get current data
                Utils utils = new Utils();
                oconPCS = new OleDbConnection(Utils.Instance.OleDbConnectionString);

                ocmdPCS = new OleDbCommand(strSql, oconPCS);
                ocmdPCS.Parameters.Add(new OleDbParameter(sys_ReportDrillDownTable.MASTERREPORTID_FLD, OleDbType.VarWChar));
                ocmdPCS.Parameters[sys_ReportDrillDownTable.MASTERREPORTID_FLD].Value = pstrMasterID;
                ocmdPCS.Parameters.Add(new OleDbParameter(sys_ReportDrillDownTable.DETAILREPORTID_FLD, OleDbType.VarWChar));
                ocmdPCS.Parameters[sys_ReportDrillDownTable.DETAILREPORTID_FLD].Value = pstrDetailID;
                ocmdPCS.Connection.Open();

                OleDbDataReader odrdPCS = ocmdPCS.ExecuteReader();
                if (odrdPCS.HasRows)
                {
                    while (odrdPCS.Read())
                    {
                        DataRow drow = dtblSource.NewRow();
                        drow[sys_ReportDrillDownTable.MASTERPARA_FLD] = odrdPCS[sys_ReportDrillDownTable.MASTERPARA_FLD];
                        drow[sys_ReportDrillDownTable.DETAILPARA_FLD] = odrdPCS[sys_ReportDrillDownTable.DETAILPARA_FLD];
                        drow[sys_ReportDrillDownTable.FROMCOLUMN_FLD] = odrdPCS[sys_ReportDrillDownTable.FROMCOLUMN_FLD];
                        drow[sys_ReportDrillDownTable.PARAORDER_FLD]  = odrdPCS[sys_ReportDrillDownTable.PARAORDER_FLD];
                        dtblSource.Rows.Add(drow);
                    }
                    sys_ReportParaDS dsSysReportPara = new sys_ReportParaDS();
                    foreach (DataRow drow in dtblSource.Rows)
                    {
                        drow[sys_ReportParaTable.DATATYPE_FLD] = dsSysReportPara.GetDataType(pstrDetailID, drow[sys_ReportDrillDownTable.DETAILPARA_FLD].ToString().Trim());
                    }
                    // return
                    oblnIsEdit = true;
                    return(dtblSource);
                }
            }
            catch (OleDbException ex)
            {
                throw new PCSDBException(ErrorCode.ERROR_DB, METHOD_NAME, ex);
            }
            catch (Exception ex)
            {
                throw new PCSDBException(ErrorCode.OTHER_ERROR, METHOD_NAME, ex);
            }
            finally
            {
                if (oconPCS != null)
                {
                    if (oconPCS.State != ConnectionState.Closed)
                    {
                        oconPCS.Close();
                    }
                }
            }

            #endregion

            oblnIsEdit = false;
            #region Not existed, make new data and return to user

            /// TODO: Bro.DungLA. Thachnn says: I feel bug here, when creating strSql, but I don't know why and how to fix.
            /// The old code is really fusion with continuing plus and plus SQL string.
            /// Please comeback to this point when there are any errors.
            try
            {
                Utils utils = new Utils();
                oconPCS.ConnectionString = Utils.Instance.OleDbConnectionString;

                string strSqlOrder = " ORDER BY " + sys_ReportParaTable.PARAORDER_FLD + " ASC";


                string strSqlMaster = "SELECT "
                                      + sys_ReportParaTable.PARAORDER_FLD + ","
                                      + sys_ReportParaTable.PARANAME_FLD + ","
                                      + sys_ReportParaTable.DATATYPE_FLD
                                      + " FROM " + sys_ReportParaTable.TABLE_NAME
                                      + " WHERE " + sys_ReportParaTable.REPORTID_FLD + "= ? " + strSqlOrder;

                OleDbCommand ocmdMaster = new OleDbCommand(strSqlMaster, oconPCS);
                ocmdMaster.Parameters.Add(new OleDbParameter(sys_ReportParaTable.REPORTID_FLD, OleDbType.VarWChar));
                ocmdMaster.Parameters[sys_ReportParaTable.REPORTID_FLD].Value = pstrMasterID;
                // fill master para into dataset with new table
                OleDbDataAdapter odadMaster = new OleDbDataAdapter(ocmdMaster);
                odadMaster.Fill(dstSource, sys_ReportDrillDownTable.MASTERPARA_FLD);


                string strSqlDetail = "SELECT "
                                      + sys_ReportParaTable.PARAORDER_FLD + ","
                                      + sys_ReportParaTable.PARANAME_FLD + ","
                                      + sys_ReportParaTable.DATATYPE_FLD
                                      + " FROM " + sys_ReportParaTable.TABLE_NAME
                                      + " WHERE " + sys_ReportParaTable.REPORTID_FLD + "= ? " + strSqlOrder;

                OleDbCommand ocmdDetail = new OleDbCommand(strSqlDetail, oconPCS);
                ocmdDetail.Parameters.Add(new OleDbParameter(sys_ReportParaTable.REPORTID_FLD, OleDbType.VarWChar));
                ocmdDetail.Parameters[sys_ReportParaTable.REPORTID_FLD].Value = pstrDetailID;

                // fill detail para into dataset with new table
                OleDbDataAdapter odadDetail = new OleDbDataAdapter(ocmdDetail);
                odadDetail.Fill(dstSource, sys_ReportDrillDownTable.DETAILPARA_FLD);

                // get all rows
                DataRowCollection MasterRows = dstSource.Tables[sys_ReportDrillDownTable.MASTERPARA_FLD].Rows;
                DataRowCollection DetailRows = dstSource.Tables[sys_ReportDrillDownTable.DETAILPARA_FLD].Rows;

                // if number of master para is bigger than number of detail para
                // then the detail para is basic for filling parameter values
                if (MasterRows.Count > DetailRows.Count)
                {
                    for (int i = 0; i < MasterRows.Count; i++)
                    {
                        DataRow drow = dtblSource.NewRow();
                        drow[sys_ReportDrillDownTable.MASTERPARA_FLD] = MasterRows[i][sys_ReportParaTable.PARANAME_FLD];
                        drow[sys_ReportDrillDownTable.PARAORDER_FLD]  = i + 1;
                        if (i < DetailRows.Count)
                        {
                            drow[sys_ReportDrillDownTable.DETAILPARA_FLD] = DetailRows[i][sys_ReportParaTable.PARANAME_FLD];
                            drow[sys_ReportParaTable.DATATYPE_FLD]        = DetailRows[i][sys_ReportParaTable.DATATYPE_FLD];
                        }
                        else
                        {
                            break;
                        }
                        dtblSource.Rows.Add(drow);
                    }
                }
                // if number of detail para is bigger than number of master para
                // then the master para is basic for filling parameter values
                else
                {
                    for (int i = 0; i < DetailRows.Count; i++)
                    {
                        DataRow drow = dtblSource.NewRow();
                        drow[sys_ReportDrillDownTable.DETAILPARA_FLD] = DetailRows[i][sys_ReportParaTable.PARANAME_FLD];
                        drow[sys_ReportDrillDownTable.PARAORDER_FLD]  = i + 1;
                        if (i < MasterRows.Count)
                        {
                            drow[sys_ReportDrillDownTable.MASTERPARA_FLD] = MasterRows[i][sys_ReportParaTable.PARANAME_FLD];
                            drow[sys_ReportParaTable.DATATYPE_FLD]        = MasterRows[i][sys_ReportParaTable.DATATYPE_FLD];
                        }
                        else
                        {
                            drow[sys_ReportDrillDownTable.MASTERPARA_FLD] = null;
                            drow[sys_ReportParaTable.DATATYPE_FLD]        = DetailRows[i][sys_ReportParaTable.DATATYPE_FLD];
                        }
                        dtblSource.Rows.Add(drow);
                    }
                }
                oblnIsEdit = true;
                return(dtblSource);
            }
            catch (OleDbException ex)
            {
                throw new PCSDBException(ErrorCode.ERROR_DB, METHOD_NAME, ex);
            }

            catch (Exception ex)
            {
                throw new PCSDBException(ErrorCode.OTHER_ERROR, METHOD_NAME, ex);
            }

            finally
            {
                if (oconPCS != null)
                {
                    if (oconPCS.State != ConnectionState.Closed)
                    {
                        oconPCS.Close();
                    }
                }
            }

            #endregion
        }