protected void FillGrid()
    {
        string searchSurname = "";

        if (Request.QueryString["surname_search"] != null && Request.QueryString["surname_search"].Length > 0)
        {
            searchSurname         = Request.QueryString["surname_search"];
            txtSearchSurname.Text = Request.QueryString["surname_search"];
        }
        bool searchSurnameOnlyStartsWith = true;

        if (Request.QueryString["surname_starts_with"] != null && Request.QueryString["surname_starts_with"].Length > 0)
        {
            searchSurnameOnlyStartsWith           = Request.QueryString["surname_starts_with"] == "0" ? false : true;
            chkSurnameSearchOnlyStartWith.Checked = searchSurnameOnlyStartsWith;
        }
        else
        {
            chkSurnameSearchOnlyStartWith.Checked = searchSurnameOnlyStartsWith;
        }

        string searchProviderNbr = "";

        if (Request.QueryString["provider_nbr_search"] != null && Request.QueryString["provider_nbr_search"].Length > 0)
        {
            searchProviderNbr         = Request.QueryString["provider_nbr_search"];
            txtSearchProviderNbr.Text = Request.QueryString["provider_nbr_search"];
        }
        bool searchProviderNbrOnlyStartsWith = true;

        if (Request.QueryString["provider_nbr_starts_with"] != null && Request.QueryString["provider_nbr_starts_with"].Length > 0)
        {
            searchProviderNbrOnlyStartsWith           = Request.QueryString["provider_nbr_starts_with"] == "0" ? false : true;
            chkProviderNbrSearchOnlyStartWith.Checked = searchProviderNbrOnlyStartsWith;
        }
        else
        {
            chkProviderNbrSearchOnlyStartWith.Checked = searchProviderNbrOnlyStartsWith;
        }

        string searchPhoneNbr = "";

        if (Request.QueryString["phone_nbr_search"] != null && Request.QueryString["phone_nbr_search"].Length > 0)
        {
            searchPhoneNbr         = Request.QueryString["phone_nbr_search"];
            txtSearchPhoneNbr.Text = Request.QueryString["phone_nbr_search"];
        }
        bool searchPhoneNbrOnlyStartsWith = true;

        if (Request.QueryString["phone_nbr_starts_with"] != null && Request.QueryString["phone_nbr_starts_with"].Length > 0)
        {
            searchPhoneNbrOnlyStartsWith           = Request.QueryString["phone_nbr_starts_with"] == "0" ? false : true;
            chkPhoneNbrSearchOnlyStartWith.Checked = searchPhoneNbrOnlyStartsWith;
        }
        else
        {
            chkPhoneNbrSearchOnlyStartWith.Checked = searchPhoneNbrOnlyStartsWith;
        }

        DataTable dt = RegisterReferrerDB.GetDataTable(0, -1, chkShowDeleted.Checked, new int[] { 191 }, searchSurname, searchSurnameOnlyStartsWith, "", "", searchProviderNbr, searchProviderNbrOnlyStartsWith, searchPhoneNbr, searchPhoneNbrOnlyStartsWith);

        Hashtable regRefHash = PatientReferrerDB.GetHashtableByRegRef(true, false, false);

        dt.Columns.Add("count", typeof(int));
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            int regRefID = Convert.ToInt32(dt.Rows[i]["register_referrer_id"]);
            dt.Rows[i]["count"] = regRefHash[regRefID] == null ? 0 : ((PatientReferrer[])regRefHash[regRefID]).Length;
        }


        // add suburb_name

        Hashtable entityIDsHash = new Hashtable();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            entityIDsHash[Convert.ToInt32(dt.Rows[i]["organisation_entity_id"])] = 1;
        }

        int[] entityIDs = new int[entityIDsHash.Keys.Count];
        entityIDsHash.Keys.CopyTo(entityIDs, 0);

        Hashtable emailHash = PatientsContactCacheDB.GetBullkAddress(entityIDs, -1);

        dt.Columns.Add("suburb_name", typeof(string));
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            int    entityID   = Convert.ToInt32(dt.Rows[i]["organisation_entity_id"]);
            string suburbName = GetSuburb(emailHash, entityID);
            dt.Rows[i]["suburb_name"] = suburbName == null ? "" : suburbName;
        }


        Session["referrerinfolist_data"] = dt;

        if (dt.Rows.Count > 0)
        {
            if (IsPostBack && Session["referrerinfolist_sortexpression"] != null && Session["referrerinfolist_sortexpression"].ToString().Length > 0)
            {
                DataView dataView = new DataView(dt);
                dataView.Sort          = Session["referrerinfolist_sortexpression"].ToString();
                GrdReferrer.DataSource = dataView;
            }
            else
            {
                GrdReferrer.DataSource = dt;
            }


            try
            {
                GrdReferrer.DataBind();
                GrdReferrer.PagerSettings.FirstPageText = "1";
                GrdReferrer.PagerSettings.LastPageText  = GrdReferrer.PageCount.ToString();
                GrdReferrer.DataBind();
            }
            catch (Exception ex)
            {
                HideTableAndSetErrorMessage("", ex.ToString());
            }
        }
        else
        {
            dt.Rows.Add(dt.NewRow());
            GrdReferrer.DataSource = dt;
            GrdReferrer.DataBind();

            int TotalColumns = GrdReferrer.Rows[0].Cells.Count;
            GrdReferrer.Rows[0].Cells.Clear();
            GrdReferrer.Rows[0].Cells.Add(new TableCell());
            GrdReferrer.Rows[0].Cells[0].ColumnSpan = TotalColumns;
            GrdReferrer.Rows[0].Cells[0].Text       = "No Record Found";
        }
    }