private void grdStatuses_ReadControls(TRptCalculator ACalc, TReportActionEnum AReportAction)
        {
            String DocumentTypeList = "";

            foreach (DataRow Row in FCommitmentStatusTable.Rows)
            {
                if ((Row["Selection"].GetType() == Type.GetType("System.Boolean")) &&
                    ((bool)Row["Selection"]))
                {
                    DocumentTypeList = DocumentTypeList + (String)Row[PmCommitmentStatusTable.GetCodeDBName()] + ',';
                }
            }

            if (DocumentTypeList.Length > 0)
            {
                // Remove the last comma
                DocumentTypeList = DocumentTypeList.Remove(DocumentTypeList.Length - 1, 1);
                ACalc.AddParameter("param_commitmentstatuses", DocumentTypeList);
            }
            else if ((AReportAction == TReportActionEnum.raGenerate) &&
                     (chkSelectedStatus.Checked) &&
                     (!chkNoSelectedStatus.Checked))
            {
                // at least one commitment status must be checked
                TVerificationResult VerificationResult = new TVerificationResult("Select at least one commitment status.",
                                                                                 "No commitment status selected!",
                                                                                 TResultSeverity.Resv_Critical);
                FPetraUtilsObject.AddVerificationResult(VerificationResult);
            }
        }
        private void grdCommitmentStatusChoices_ReadControls(TRptCalculator ACalc, TReportActionEnum AReportAction)
        {
            // TODO
            //   The reason that the status choices listbox is not
            //   filled in with saved data is that Parameter.Save()
            //   and Parameter.Load() do not use
            //   TVariant.EncodeToString() and
            //   TVariant.DecodeFromString() when storing a saved set
            //   of parameters. Composites survive fine over the
            //   remoting interface, though. I (binki) am allowed to
            //   change the behavior of TParameterList.Save() and
            //   TParameterList.Load() _if_ I change the
            //   XmlReports/Settings/.../standard.xml files to support
            //   DecodeFromString().
            TVariant param_grdCommitmentStatusChoices = new TVariant();

            foreach (DataRow ARow in FCommitmentStatusTable.Rows)
            {
                if ((bool)ARow["Selection"])
                {
                    param_grdCommitmentStatusChoices.Add(new TVariant((String)ARow[PmCommitmentStatusTable.GetCodeDBName()]), "", false);
                }
            }

            ACalc.AddParameter("param_commitment_status_choices", param_grdCommitmentStatusChoices);
        }
        private void grdStatuses_SetControls(TParameterList AParameters)
        {
            String SelectedStatuses = AParameters.Get("param_commitmentstatuses").ToString();

            foreach (DataRow Row in FCommitmentStatusTable.Rows)
            {
                String CurrentStatus = (String)Row[PmCommitmentStatusTable.GetCodeDBName()];

                Row["Selection"] = SelectedStatuses.Contains(CurrentStatus);
            }
        }
        private void grdCommitmentStatusChoices_SetControls(TParameterList AParameters)
        {
            HashSet <String> AValues = new HashSet <String>();

            foreach (TVariant choice in AParameters.Get("param_commitment_status_choices").ToComposite())
            {
                AValues.Add(choice.ToString());
            }

            foreach (DataRow ARow in FCommitmentStatusTable.Rows)
            {
                ARow["Selection"] = AValues.Contains((String)ARow[PmCommitmentStatusTable.GetCodeDBName()]);
            }
        }
        private void grdStatuses_InitialiseData(TFrmPetraReportingUtils APetraUtilsObject)
        {
            // Get list of commitment statuses
            FCommitmentStatusTable = TDataCache.TMPersonnel.GetCacheablePersonnelTable(
                TCacheablePersonTablesEnum.CommitmentStatusList);

            FCommitmentStatusTable.Columns.Add("Selection", System.Type.GetType("System.Boolean"));

            grdStatuses.Columns.Clear();

            grdStatuses.AddCheckBoxColumn("", FCommitmentStatusTable.Columns["Selection"]);
            grdStatuses.AddTextColumn("Status", FCommitmentStatusTable.Columns[PmCommitmentStatusTable.GetCodeDBName()]);
            grdStatuses.AddTextColumn("Description", FCommitmentStatusTable.Columns[PmCommitmentStatusTable.GetDescDBName()]);

            FCommitmentStatusTable.DefaultView.AllowNew    = false;
            FCommitmentStatusTable.DefaultView.AllowDelete = false;

            grdStatuses.DataSource = new DevAge.ComponentModel.BoundDataView(FCommitmentStatusTable.DefaultView);
            grdStatuses.AutoSizeCells();

            chkSelectedStatusChanged(null, null);
        }
        private void grdCommitmentStatusChoices_InitialiseData(TFrmPetraReportingUtils FPetraUtilsObject)
        {
            #region Copied from csharp/ICT/Petra/Client/MReporting/Gui/MPersonnel/StartOfCommitmentReport.ManualCode.cs

            // TODO
            //   The following block of code should be generalized
            //   along with the similar code from
            //   StartOfCommitmentReport.ManualCode.cs.
            FCommitmentStatusTable = TDataCache.TMPersonnel.GetCacheablePersonnelTable(
                TCacheablePersonTablesEnum.CommitmentStatusList);

            FCommitmentStatusTable.Columns.Add("Selection", System.Type.GetType("System.Boolean"));

            grdCommitmentStatusChoices.Columns.Clear();

            grdCommitmentStatusChoices.AddCheckBoxColumn("", FCommitmentStatusTable.Columns["Selection"], false);
            grdCommitmentStatusChoices.AddTextColumn("Type", FCommitmentStatusTable.Columns[PmCommitmentStatusTable.GetCodeDBName()]);
            grdCommitmentStatusChoices.AddTextColumn("Description", FCommitmentStatusTable.Columns[PmCommitmentStatusTable.GetDescDBName()]);

            FCommitmentStatusTable.DefaultView.AllowNew    = false;
            FCommitmentStatusTable.DefaultView.AllowDelete = false;

            grdCommitmentStatusChoices.DataSource = new DevAge.ComponentModel.BoundDataView(FCommitmentStatusTable.DefaultView);
            grdCommitmentStatusChoices.AutoResizeGrid();
            #endregion
        }