private void SetupGrid()
        {
            // create a new table
            FCriteriaData.Columns.Add(PBankTable.GetPartnerKeyDBName(), Type.GetType("System.Int64"));
            FCriteriaData.Columns.Add(BankTDSPBankTable.GetSiteKeyDBName(), Type.GetType("System.Int64"));
            FCriteriaData.Columns.Add(BankTDSPBankTable.GetLocationKeyDBName(), Type.GetType("System.Int32"));
            FCriteriaData.Columns.Add(PBankTable.GetBranchNameDBName(), Type.GetType("System.String"));
            FCriteriaData.Columns.Add(PBankTable.GetBranchCodeDBName(), Type.GetType("System.String"));
            FCriteriaData.Columns.Add(PBankTable.GetBicDBName(), Type.GetType("System.String"));
            FCriteriaData.Columns.Add(BankTDSPBankTable.GetCityDBName(), Type.GetType("System.String"));
            FCriteriaData.Columns.Add(BankTDSPBankTable.GetCountryCodeDBName(), Type.GetType("System.String"));
            FCriteriaData.Columns.Add(BankTDSPBankTable.GetStatusCodeDBName(), Type.GetType("System.String"));

            FCriteriaData.PrimaryKey = new DataColumn[] {
                FCriteriaData.Columns[PBankTable.GetPartnerKeyDBName()],
                FCriteriaData.Columns[BankTDSPBankTable.GetSiteKeyDBName()], FCriteriaData.Columns[BankTDSPBankTable.GetLocationKeyDBName()]
            };
            FCriteriaData.DefaultView.AllowNew = false;

            // add columns to the grid
            grdDetails.Columns.Clear();
            grdDetails.AddTextColumn("Partner Key", FCriteriaData.Columns[PBankTable.GetPartnerKeyDBName()], 80);
            grdDetails.AddTextColumn("Bank Name", FCriteriaData.Columns[PBankTable.GetBranchNameDBName()]);
            grdDetails.AddTextColumn("Bank/Branch Code", FCriteriaData.Columns[PBankTable.GetBranchCodeDBName()], 120);
            grdDetails.AddTextColumn("BIC/SWIFT Code", FCriteriaData.Columns[PBankTable.GetBicDBName()], 110);
            grdDetails.AddTextColumn("Status", FCriteriaData.Columns[BankTDSPBankTable.GetStatusCodeDBName()], 70);
            grdDetails.AddTextColumn("City", FCriteriaData.Columns[PLocationTable.GetCityDBName()], 80);
            grdDetails.AddTextColumn("Country", FCriteriaData.Columns[PLocationTable.GetCountryCodeDBName()], 60);

            grdDetails.DoubleClickCell           += new TDoubleClickCellEventHandler(grdDetails_DoubleClickCell);
            grdDetails.EnterKeyPressed           += new TKeyPressedEventHandler(grdDetails_EnterKey);
            grdDetails.Selection.FocusRowEntered += new SourceGrid.RowEventHandler(this.FocusedRowChanged);
        }
        // A new row is selected in the grid
        private void FocusedRowChanged(System.Object sender, EventArgs e)
        {
            if (grdDetails.SelectedDataRows.Length == 1)
            {
                DataRowView RowDataRowView = (DataRowView)grdDetails.SelectedDataRows[0];

                if (RowDataRowView.Row[BankTDSPBankTable.GetStatusCodeDBName()].ToString() !=
                    SharedTypes.StdPartnerStatusCodeEnumToString(TStdPartnerStatusCode.spscACTIVE))
                {
                    chkShowInactive.Enabled = false;
                }
                else
                {
                    chkShowInactive.Enabled = true;
                }

                // Update property with a new selected bank's partner key
                FBankPartnerKey = Convert.ToInt64(RowDataRowView.Row[BankTDSPBankTable.GetPartnerKeyDBName()]);

                btnAccept.Enabled = true;
                btnEdit.Enabled   = true;
            }
        }
        private void Filter(System.Object sender, EventArgs e)
        {
            // Apply filter to the grid

            DataView MyDataView = FCriteriaData.DefaultView;

            String Filter = "";

            if (!string.IsNullOrEmpty(txtBranchName.Text))
            {
                Filter += FCriteriaData.Columns[PBankTable.GetBranchNameDBName()] + " LIKE '" + txtBranchName.Text + "%'";
            }

            if (!string.IsNullOrEmpty(txtBranchCode.Text))
            {
                if (Filter != "")
                {
                    Filter += " AND ";
                }

                Filter += FCriteriaData.Columns[PBankTable.GetBranchCodeDBName()] + " LIKE '" + txtBranchCode.Text + "%'";
            }

            if (!string.IsNullOrEmpty(txtBicCode.Text))
            {
                if (Filter != "")
                {
                    Filter += " AND ";
                }

                Filter += FCriteriaData.Columns[PBankTable.GetBicDBName()] + " LIKE '" + txtBicCode.Text + "%'";
            }

            if (!string.IsNullOrEmpty(txtCity.Text))
            {
                if (Filter != "")
                {
                    Filter += " AND ";
                }

                Filter += FCriteriaData.Columns[PLocationTable.GetCityDBName()] + " LIKE '" + txtCity.Text + "%'";
            }

            if (!string.IsNullOrEmpty(txtCountry.Text))
            {
                if (Filter != "")
                {
                    Filter += " AND ";
                }

                Filter += FCriteriaData.Columns[PLocationTable.GetCountryCodeDBName()] + " LIKE '" + txtCountry.Text + "%'";
            }

            if (!chkShowInactive.Checked)
            {
                if (Filter != "")
                {
                    Filter += " AND ";
                }

                Filter += FCriteriaData.Columns[BankTDSPBankTable.GetStatusCodeDBName()] + " = '" +
                          SharedTypes.StdPartnerStatusCodeEnumToString(TStdPartnerStatusCode.spscACTIVE) + "'";
            }

            MyDataView.RowFilter  = Filter;
            grdDetails.DataSource = new DevAge.ComponentModel.BoundDataView(MyDataView);

            UpdateRecordNumberDisplay();
            SelectRowInGrid();
            FocusedRowChanged(this, null);
        }
        // automatically select the currently selected Bank (if it exists)
        private void SelectRowInGrid()
        {
            int RowPos = 1;

            // if no bank is selected then no row should be selected
            if ((grdDetails.Rows.Count <= 1) || (FBankPartnerKey == 0))
            {
                // select the first row in the grid
                if (grdDetails.Rows.Count > 1)
                {
                    grdDetails.SelectRowWithoutFocus(1);
                }
                else
                {
                    btnAccept.Enabled = false;
                    btnEdit.Enabled   = false;
                }

                return;
            }

            BankTDSPBankRow BankRow = null;

            // Multiple rows could have the same partner keys but different locations.
            // We just want the first row.
            foreach (BankTDSPBankRow Row in FMainDS.PBank.Rows)
            {
                if (Row.PartnerKey == FBankPartnerKey)
                {
                    BankRow = Row;
                    break;
                }
            }

            // if current bank is 'inactive' then make sure chkShowInactive is checked (unchecked by default)
            if ((BankRow != null) &&
                (BankRow.StatusCode != SharedTypes.StdPartnerStatusCodeEnumToString(TStdPartnerStatusCode.spscACTIVE)) &&
                (chkShowInactive.Checked == false))
            {
                chkShowInactive.Checked = true;
            }

            if (BankRow == null)
            {
                grdDetails.SelectRowWithoutFocus(1);
            }
            else
            {
                // look through each row in the grid
                foreach (DataRowView RowView in FCriteriaData.DefaultView)
                {
                    // if current grid row is the row we are looking for the select it
                    if (Convert.ToInt64(RowView[PBankTable.GetPartnerKeyDBName()]) == FBankPartnerKey)
                    {
                        grdDetails.SelectRowWithoutFocus(RowPos);

                        btnAccept.Enabled = true;
                        btnEdit.Enabled   = true;

                        return;
                    }

                    // account for grid rows being filtered by being inactive
                    if (chkShowInactive.Checked ||
                        (!chkShowInactive.Checked &&
                         (RowView[BankTDSPBankTable.GetStatusCodeDBName()].ToString() ==
                          SharedTypes.StdPartnerStatusCodeEnumToString(TStdPartnerStatusCode.spscACTIVE))))
                    {
                        RowPos++;
                    }
                }
            }
        }
        /// <summary>
        /// Load data into grid
        /// </summary>
        /// <param name="AFirstTime">True if being run for the first time</param>
        public void LoadDataGrid(bool AFirstTime)
        {
            // Only call data from server if the dataset is actually empty.
            // (A filled dataset is passed to this screen from the 'Finance Details' tab and 'Find By Bank Details'.)
            if ((FMainDS == null) || (FMainDS.PBank.Rows.Count == 0))
            {
                FMainDS = new BankTDS();
                FMainDS.Merge(TRemote.MPartner.Partner.WebConnectors.GetPBankRecords());
            }

            FCriteriaData.Clear();

            if (AFirstTime)
            {
                // setup the grid on first run
                SetupGrid();
            }

            // create a new row for each bank record
            foreach (BankTDSPBankRow BankRow in FMainDS.PBank.Rows)
            {
                if (BankRow.PartnerKey >= 0)
                {
                    DataRow NewBankRow = FCriteriaData.NewRow();
                    NewBankRow[PBankTable.GetPartnerKeyDBName()]         = BankRow.PartnerKey;
                    NewBankRow[BankTDSPBankTable.GetCityDBName()]        = BankRow.City;
                    NewBankRow[BankTDSPBankTable.GetCountryCodeDBName()] = BankRow.CountryCode;
                    NewBankRow[PBankTable.GetBranchNameDBName()]         = BankRow.BranchName;

                    if (BankRow.BranchCode.StartsWith(SharedConstants.INACTIVE_VALUE_WITH_QUALIFIERS + " "))
                    {
                        NewBankRow[PBankTable.GetBranchCodeDBName()] = BankRow.BranchCode.Substring(11);
                    }
                    else if (BankRow.BranchCode.StartsWith(SharedConstants.INACTIVE_VALUE_WITH_QUALIFIERS))
                    {
                        NewBankRow[PBankTable.GetBranchCodeDBName()] = BankRow.BranchCode.Substring(10);
                    }
                    else
                    {
                        NewBankRow[PBankTable.GetBranchCodeDBName()] = BankRow.BranchCode;
                    }

                    NewBankRow[BankTDSPBankTable.GetSiteKeyDBName()]     = BankRow.SiteKey;
                    NewBankRow[BankTDSPBankTable.GetLocationKeyDBName()] = BankRow.LocationKey;

                    NewBankRow[PBankTable.GetBicDBName()] = BankRow.Bic;
                    NewBankRow[BankTDSPBankTable.GetStatusCodeDBName()] = BankRow.StatusCode;
                    FCriteriaData.Rows.Add(NewBankRow);
                }
            }

            // sort order for grid
            DataView MyDataView = FCriteriaData.DefaultView;

            MyDataView.Sort       = "p_branch_name_c ASC";
            grdDetails.DataSource = new DevAge.ComponentModel.BoundDataView(MyDataView);

            SelectRowInGrid();
            FinishButtonPanelSetup();
            Filter(this, null);
        }