Пример #1
0
        /// Please read this links before reading code:
        /// http://www.jdconley.com/blog/archive/2007/11/28/linq-to-sql-surprise-performance-hit.aspx
        /// http://blog.linqexchange.com/index.php/how-to-use-compiled-queries-in-linq-to-sql-for-high-demand-asp-net-websites/

        /// <summary>
        /// Main search function
        /// </summary>
        /// <param name="usi">Insert UserSearchInfo object</param>
        /// <param name="pagelimit">Insert resultlimit</param>
        /// <param name="pageindex">Insert index</param>
        /// <param name="langId">Insert langid for what langauge you want the result in</param>
        /// <param name="fromLastSeconds"></param>
        /// <returns>return SearchObject object</returns>
        private List <SearchObject> SearchMatchs(UserSearchInfo usi,
                                                 int pagelimit,
                                                 int pageindex,
                                                 int langId,
                                                 int fromLastSeconds)
        {
            Searchwar_netEntities db = new Searchwar_netEntities();

            List <Guid> lastIds = new List <Guid>();

            if (_context.Session["searchresult"] != null)
            {
                lastIds = (List <Guid>)_context.Session["searchresult"];
            }

            SearchColumns parameters = new SearchColumns
            {
                Usi             = usi,
                LangId          = langId,
                PageIndex       = pageindex,
                PageLimit       = pagelimit,
                FromLastSeconds = fromLastSeconds,
                DateTimeNow     = TimeZoneManager.DateTimeNow,
                LastIds         = lastIds
            };

            List <SearchObject> matchsFound = SearchResults(db, parameters).Skip(parameters.PageIndex == 0 ? (parameters.PageIndex * parameters.PageLimit) : 0).Take(
                parameters.PageLimit).ToList <SearchObject>();

            return(matchsFound);
        }
Пример #2
0
 public EntityFrameworkSystemConfigurationRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("Name");
     SearchColumns.Add("Value");
     DisplayColumnForCombobox = "Name";
 }
Пример #3
0
        /// <summary>
        /// Create search condition to get data in grid
        /// </summary>
        /// <param name="queryInfo"></param>
        /// <returns></returns>
        public virtual string SearchStringForGetData(IQueryInfo queryInfo)
        {
            var searchString = string.Empty;

            if (!string.IsNullOrEmpty(queryInfo.SearchString))
            {
                var searchConditionList = new List <string>();
                queryInfo.SearchString = queryInfo.SearchString.Replace(' ', '+');
                queryInfo.SearchString = Encoding.UTF8.GetString(Convert.FromBase64String(queryInfo.SearchString));
                queryInfo.ParseParameters(queryInfo.SearchString);
                if (!string.IsNullOrEmpty(queryInfo.SearchTerms))
                {
                    var keyword         = queryInfo.SearchTerms;
                    var searchCondition = new StringBuilder();

                    searchCondition.Append("(");
                    searchCondition.Append(String.Join(" OR ", SearchColumns.Select(column => string.Format(" {0}.Contains(\"{1}\")", column, keyword)).ToArray()));

                    searchCondition.Append(")");
                    searchConditionList.Add(searchCondition.ToString());
                    searchString = String.Join(" OR ", searchConditionList.ToArray <string>());
                }
            }
            return(string.IsNullOrEmpty(searchString) ? " 1 = 1" : searchString);
        }
Пример #4
0
 public EntityFrameworkHoldingRequestRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("LocationFrom");
     SearchColumns.Add("LocationTo");
     SearchColumns.Add("Description");
 }
Пример #5
0
 public EntityFrameworkRequestRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("RequestNo");
     SearchColumns.Add("CourierSearch");
     SearchColumns.Add("LocationFromName");
     SearchColumns.Add("LocationToName");
 }
Пример #6
0
        public EntityFrameworkLocationRepository(ITenantPersistenceService persistenceService)
            : base(persistenceService)
        {
            SearchColumns.Add("Name");
            SearchColumns.Add("FullAddressSearch");

            DisplayColumnForCombobox = "Name";
        }
Пример #7
0
        protected void HandleValidSubmitSearch()
        {
            string user_name = nameof(customSearch.user_name);

            SearchColumns.Remove(user_name);
            if (!customSearch.user_name.isNOEOW())
            {
                SearchColumns.Add(user_name, customSearch.user_name);
            }
            OnSearch = true;
        }
Пример #8
0
 public EntityFrameworkUserRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("UserName");
     SearchColumns.Add("Role");
     SearchColumns.Add("FullNameSearch");
     SearchColumns.Add("HomePhone");
     SearchColumns.Add("MobilePhone");
     SearchColumns.Add("Email");
     DisplayColumnForCombobox = "FirstName";
     Includes.Add("UserRole");
 }
Пример #9
0
        private void UpdateUrl(int page)
        {
            bool isSearch = SearchColumns != null && SearchColumns.Count > 0;

            if (page == 1 && _NavigationManager.Uri.IndexOf("?") < 1 && !isSearch)
            {
                return;
            }
            string sortOrder = _UrlManager.GetQueryParm("sortOrder");
            string sortBy    = _UrlManager.GetQueryParm("sortby");

            _UrlManager.Reset();
            if (_UrlManager.Uri.isNOEOW())
            {
                _UrlManager.Uri = PageName;// _UrlManager.GetNavigate(_NavigationManager.Uri);
            }
            //Console.WriteLine($"Cleaned URL => {_NavigationManager.Uri}");
            //_UrlManager.RemoveParm("pageSize");
            _UrlManager.AddQueryParm("page", page.ToString(), true);
            if ((!sortOrder.isNOEOW() && !sortBy.isNOEOW()) && new[] { "asc", "desc" }.Contains(sortOrder))
            {
                _UrlManager.AddQueryParm("sortOrder", sortOrder);
                _UrlManager.AddQueryParm("sortby", sortBy);
            }

            if (isSearch && !isFirstRender && !_NavigationManager.Uri.isNOEOW())
            {
                foreach (string k in SearchColumns)
                {
                    if (k != "page" && k != "pageSize")
                    {
                        string v = SearchColumns[k];
                        if (k.isNOEOW() || v.isNOEOW())
                        {
                            continue;
                        }
                        _UrlManager.AddQueryParm(k, v);
                        v = null;
                    }
                }
            }
            else if (SearchColumns != null)
            {
                SearchColumns.Clear();
            }
            var uri = _UrlManager.GetNavigate(_NavigationManager.Uri);

            //var old = _UrlManager.GetNavigate(_NavigationManager.Uri);
            //Console.WriteLine($"Old => {_NavigationManager.Uri}");
            //Console.WriteLine($"New => {uri}");
            _NavigationManager.NavigateTo($"{uri}");
        }
Пример #10
0
        public static async System.Threading.Tasks.Task <SearchColumns> GetSearchColumnsFromTempworksAsync(int id)
        {
            using (HttpClient client = new HttpClient())
            {
                // Call asynchronous network methods in a try/catch block to handle exceptions
                client.DefaultRequestHeaders.Add("x-tw-token", APIKey);
                var result = await client.GetAsync("https://api.ontempworks.com/Search/" + id.ToString() + "/Columns");

                SearchColumns cols = await result.Content.ReadFromJsonAsync <SearchColumns>();

                return(cols);
            }
        }
Пример #11
0
        public async Task <IActionResult> GetAllSearchColumns()
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                try
                {
                    SearchColumns rets = await TempWorksAPI.GetSearchColumnsFromTempworksAsync(1);

                    foreach (SearchColumn col in rets.data)
                    {
                        DataLayer.TempWorks.SetSearchColumProc(con, col);
                    }

                    rets = await TempWorksAPI.GetSearchColumnsFromTempworksAsync(2);

                    foreach (SearchColumn col in rets.data)
                    {
                        DataLayer.TempWorks.SetSearchColumProc(con, col);
                    }

                    rets = await TempWorksAPI.GetSearchColumnsFromTempworksAsync(3);

                    foreach (SearchColumn col in rets.data)
                    {
                        DataLayer.TempWorks.SetSearchColumProc(con, col);
                    }

                    rets = await TempWorksAPI.GetSearchColumnsFromTempworksAsync(8);

                    foreach (SearchColumn col in rets.data)
                    {
                        DataLayer.TempWorks.SetSearchColumProc(con, col);
                    }

                    rets = await TempWorksAPI.GetSearchColumnsFromTempworksAsync(14);

                    foreach (SearchColumn col in rets.data)
                    {
                        DataLayer.TempWorks.SetSearchColumProc(con, col);
                    }
                }
                catch (Exception ex)
                {
                    _context.SaveErrorProc(con, "Error in employees", ex.Message);

                    return(BadRequest(ex.Message));
                }
            }
            return(Ok("Success"));
        }
Пример #12
0
        public EntityFrameworkFranchiseeTenantRepository(ITenantPersistenceService persistenceService)
            : base(persistenceService)
        {
            var deploymentMode = ConfigurationManager.AppSettings["DeploymentMode"];

            if (deploymentMode == "camino")
            {
                persistenceService.CreateWorkspace(new Tenant
                {
                    Name = ConstantValue.ConnectionStringAdminDb
                });
            }
            SearchColumns.Add("Name");
            DisplayColumnForCombobox = "Name";
        }
 protected void LocationChanged(object sender, LocationChangedEventArgs e)
 {
     if (setStateChange && this.isNoQueryString())
     {
         setStateChange = false;
         SearchColumns.Clear();
         customSearch.user_name = null;
         StateHasChanged();
     }
     else
     {
         setStateChange = true;
     }
     OnSearch = false;
 }
Пример #14
0
 void LocationChanged(object sender, LocationChangedEventArgs e)
 {
     if (_NavigationManager.Uri.isNOEOW() || _NavigationManager.Uri.IndexOf("?") < 1 || PageName.IndexOf("&") < 1)
     {
         _UrlManager.Uri = e.Location;
         if (_UrlManager.GetQueryParm("page").isNOEOW())
         {
             CurrentPage = 1;
         }
         SearchColumns.Clear();
     }
     if (!PageName.isNOEOW() && _UrlManager.GetAbsolutePath(_NavigationManager.Uri) == _UrlManager.GetAbsolutePath(PageName))
     {
         Task.Run(async() => await LoadData(e.Location));
     }
 }
Пример #15
0
        private void SetCollumns()
        {
            if (VisbleColumns.Count == 0)
            {
                ViewResult.FormatGrid(Query.Fields, ColumnsParameters);
            }
            else
            {
                var columns = Query.Fields.Where(p => VisbleColumns.Any(v => v == p.Name));
                var col     = new TableAdapterFieldCollection();
                col.AddRange(columns);
                ViewResult.FormatGrid(col);
            }

            ViewResult.FocusedColumn = SearchColumns.IsEmpty()
                ? ViewResult.Columns[0]
                : ViewResult.Columns[SearchColumns.First().Name];

            ViewResult.SetColors();
            ViewResult.FormatConditions.Clear();

            foreach (var item in Conditions)
            {
                var col = ViewResult.Columns[item.ColumnName];

                if (col == null)
                {
                    continue;
                }

                var scon = new DevExpress.XtraGrid.StyleFormatCondition(
                    item.FormatConditionEnum,
                    col,
                    null,
                    item.val1,
                    item.val2,
                    item.applyToRow);

                scon.Appearance.BackColor = item.BackColor;
                scon.Appearance.ForeColor = item.ForeColor;
                ViewResult.FormatConditions.Add(scon);
            }
        }
Пример #16
0
 public EntityFrameworkTemplateRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("Title");
     DisplayColumnForCombobox = "Title";
 }
Пример #17
0
 public EntityFrameworkCountryOrRegionRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("Name");
     DisplayColumnForCombobox = "Name";
 }
Пример #18
0
        private void FillResult()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                var query = new TableQuery(Query);

                if (!String.IsNullOrEmpty(SearchBy))
                {
                    var where = new WhereCollection();
                    foreach (var item in SearchColumns)
                    {
                        QueryParam param;

                        if (item.DbTypeIsNumeric())
                        {
                            int intConvert;

                            if (!int.TryParse(SearchBy, out intConvert))
                            {
                                continue;
                            }

                            param = new QueryParam(item, intConvert);
                        }
                        else
                        {
                            param = new QueryParam(item, eCondition.ecLike, SearchBy);
                        }

                        param.Relationship = eRelationship.erOr;
                        where.Add(param);

                        query.OrderBy.Add(new OrderBy(param));
                    }
                    query.Wheres.Add(where);
                }

                var command = new SqlServerScriptWizard(query).GetSelectStatment();
                grdResult.DataSource = Connection.Instance.SqlServerQuery(command.Item1, command.Item2);
                ViewResult.BestFitColumns();

                ViewResult.ClearSorting();

                if (!SearchColumns.IsEmpty())
                {
                    ViewResult.FocusedColumn           = ViewResult.Columns[SearchColumns.First().Name];
                    ViewResult.FocusedColumn.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;

                    if (Record != null)
                    {
                        var fieldValue = Record[ViewResult.FocusedColumn.FieldName].ToString();
                        ViewResult.StartIncrementalSearch(fieldValue);
                    }
                }
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
Пример #19
0
        /// <summary>
        /// Retrieves all the entities that match with the
        /// page request and query conditions specified
        /// and includes the column select collection
        /// during the selection
        /// </summary>
        /// <param name="pagination">Page request</param>
        /// <param name="columns">Column selection collection</param>
        /// <param name="conditions">Query conditions to apply</param>
        /// <returns>ComplexResponse of Paginated collection</returns>
        public async Task <ModelResponse <PaginatedCollection <T> > > GetRecords(Pagination pagination, string[] columns = null, List <QueryCondition <T> > conditions = null)
        {
            //Verify pagination instance
            if (pagination == null)
            {
                return(new ModelResponse <PaginatedCollection <T> >(false, @"The specified pagination instance is not valid."));
            }
            //Initialize select columns
            if (columns.IsNotValid())
            {
                columns = Columns;
            }
            //Verify integrity Columns (All the supplied columns must exists inside the current entity)
            if (!columns.ToList().TrueForAll(Columns.Contains))
            {
                return(new ModelResponse <PaginatedCollection <T> >(false, @"The supplied columns does not exist in the current entity."));
            }
            //Inicialize query conditions
            if (conditions.IsNotValid())
            {
                conditions = new List <QueryCondition <T> >();
            }
            else
            {
                //Validate query conditions integrity (All the supplied property-column query condition reference must exists inside the current entity)
                if (!conditions.Select(c => c.Property).ToList().TrueForAll(Columns.Contains))
                {
                    return(new ModelResponse <PaginatedCollection <T> >(false, @"The supplied columns does not exist in the current entity."));
                }
            }
            ModelResponse <PaginatedCollection <T> > response;

            try
            {
                //Build count query using the given parameters
                StringBuilder sqlCount = new StringBuilder($@"Select Cast(count(*) as BigInt) as Total From [dbo].[{TableName}] ");
                //Conditions to apply to
                List <string> defaultConditions = new List <string>();
                //Parameter list to pass
                List <SqlParameter> parameterList = new List <SqlParameter>();
                //Include or not deleted records
                if (!pagination.IncludeAll)
                {
                    defaultConditions.Add(@"[Deleted] Is Null");
                }
                //Include keyword search inside searchable columns
                if (!pagination.KeyWords.IsNotValid() && !SearchColumns.IsNotValid())
                {
                    defaultConditions.Add($@"[{string.Join(@"] Like '%' + @SearchKeyWord + '%' Or [", SearchColumns)}] Like '%' + @SearchKeyWord + '%'");
                    parameterList.Add(new SqlParameter(@"@SearchKeyWord", pagination.KeyWords));
                }
                //Include date range start
                if (!pagination.Start.IsNotValid())
                {
                    defaultConditions.Add(@"[Created] >= @StartAt");
                    parameterList.Add(new SqlParameter(@"@StartAt", pagination.Start));
                }
                //Include date range end
                if (!pagination.End.IsNotValid())
                {
                    defaultConditions.Add(@"[Created] <= @EndAt");
                    parameterList.Add(new SqlParameter(@"@EntAt", pagination.End));
                }
                //Adds any conditions if applies
                if (defaultConditions.Any())
                {
                    sqlCount.Append($@"Where ({string.Join(@") And (", defaultConditions)}) ");
                }
                //Command instance
                SqlServerCommand command = new SqlServerCommand(ConnectionString);
                //Get the user supplied conditions
                string userSqlConditions = conditions.ToSqlQuery(out SqlParameter[] userParameters);
                //Add the supplied user conditions
                if (!userSqlConditions.IsNotValid())
                {
                    //Add 'where' clausule if there is not any default condition
                    if (!defaultConditions.Any())
                    {
                        sqlCount.Append(@"Where ");
                    }
                    sqlCount
                    .Append(@"And ")
                    .Append(userSqlConditions);
                    parameterList.AddRange(userParameters);
                }
                sqlCount.Append(@";");
                //Params added
                SqlParameter[] parameters = parameterList.ToArray();
                //Count results
                ModelResponse <List <ResultTable> > resultCount = await command.Query(sqlCount.ToString(), parameters);

                if (resultCount.Correct)
                {
                    //Get the total records
                    long total = resultCount.Model
                                 .First()
                                 .GetFirstResult <long>(@"Total");
                    //The sql select query result is succeded but it has not returned any record
                    if (total.Equals(0))
                    {
                        return(new ModelResponse <PaginatedCollection <T> >(false, @"The sql select query result is succeded but it has not returned any record."));
                    }
                    //Calculate the pagination size by the given total records
                    pagination.Calculate(total);
                    //Sql select instance
                    StringBuilder sqlSelect = new StringBuilder($@"Select [{string.Join(@"], [", columns)}] From [dbo].[{TableName}] ");
                    //Apply the same conditions as the count sql
                    if (defaultConditions.Any())
                    {
                        sqlSelect.Append($@"Where ({string.Join(@") And (", defaultConditions)})");
                    }
                    //Add the supplied user conditions
                    if (!userSqlConditions.IsNotValid())
                    {
                        //Add 'where' clausule if there is not any default condition
                        if (!defaultConditions.Any())
                        {
                            sqlSelect.Append(@"Where ");
                        }
                        sqlSelect
                        .Append(@" And ")
                        .Append(userSqlConditions);
                    }
                    //Skip and take records ordered by ascending id
                    sqlSelect
                    .Append($@"Order By [Id] Asc ")
                    .Append($@"Offset {pagination.RequestedIndex * pagination.PageSize} Rows ")
                    .Append($@"Fetch Next {pagination.PageSize} Rows Only;");
                    //Page result
                    ModelResponse <List <ResultTable> > resultPage = await command.Query(sqlSelect.ToString(), parameters);

                    if (resultPage.Correct)
                    {
                        //Create the page reference
                        PaginatedCollection <T> page = new PaginatedCollection <T>(pagination, resultPage.Model.First().ToEntities <T>());
                        //Create response
                        response = new ModelResponse <PaginatedCollection <T> >(page);
                    }
                    else
                    {
                        //The sql select query result is succeded but it has not returned any record
                        response = new ModelResponse <PaginatedCollection <T> >(false, resultPage.Message);
                    }
                }
                else
                {
                    //The sql count query result is succeded but it has not returned any record
                    response = new ModelResponse <PaginatedCollection <T> >(false, resultCount.Message);
                }
            }
            catch (Exception ex)
            {
                response = new ModelResponse <PaginatedCollection <T> >(ex);
            }
            return(response);
        }
Пример #20
0
 protected override async Task OnInitializedAsync()
 {
     customSearch.user_name = SearchColumns.Get(nameof(customSearch.user_name));
     await base.OnInitializedAsync();
 }
Пример #21
0
 public EntityFrameworkFranchiseeModuleRepository(ITenantPersistenceService persistenceService)
     : base(persistenceService)
 {
     SearchColumns.Add("Name");
     DisplayColumnForCombobox = "Name";
 }
 public bool IsSearchable()
 {
     return(SearchColumns != null && SearchColumns.Any());
 }
Пример #23
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            ClientResourceManager.RegisterScript(Page, "~/desktopmodules/activeforums/scripts/jquery-forumSelector.js");

            try
            {
                if (Request.QueryString["GroupId"] != null && SimulateIsNumeric.IsNumeric(Request.QueryString["GroupId"]))
                {
                    SocialGroupId = Convert.ToInt32(Request.QueryString["GroupId"]);
                }

                btnSearch.Click  += btnSearch_Click;
                btnSearch2.Click += btnSearch_Click;

                if (Page.IsPostBack)
                {
                    return;
                }

                // Bind the intial values for the forum

                // Options

                litInputError.Text = GetSharedResource("[RESX:SearchInputError]");

                litOptions.Text = GetSharedResource("[RESX:SearchOptions]");

                lblSearch.Text = GetSharedResource("[RESX:SearchKeywords]");
                txtSearch.Text = SearchText;

                ListItem selectedItem = drpSearchColumns.Items.FindByValue(SearchColumns.ToString());
                if (selectedItem != null)
                {
                    selectedItem.Selected = true;
                }

                selectedItem = drpSearchType.Items.FindByValue(SearchType.ToString());
                if (selectedItem != null)
                {
                    selectedItem.Selected = true;
                }

                lblUserName.Text = GetSharedResource("[RESX:SearchByUser]");
                txtUserName.Text = AuthorUsername;

                lblTags.Text = GetSharedResource("[RESX:SearchByTag]");
                txtTags.Text = Tags;


                // Additional Options

                litAdditionalOptions.Text = GetSharedResource("[RESX:SearchOptionsAdditional]");

                lblForums.Text = GetSharedResource("[RESX:SearchInForums]");
                BindForumList();

                lblSearchDays.Text = GetSharedResource("[RESX:SearchTimeFrame]");
                BindSearchRange();

                lblResultType.Text = GetSharedResource("[RESX:SearchResultType]");
                selectedItem       = drpResultType.Items.FindByValue(ResultType.ToString());
                if (selectedItem != null)
                {
                    selectedItem.Selected = true;
                }

                lblSortType.Text = GetSharedResource("[RESX:SearchSort]");
                selectedItem     = drpSort.Items.FindByValue(Sort.ToString());
                if (selectedItem != null)
                {
                    selectedItem.Selected = true;
                }

                // Buttons

                btnSearch.Text  = GetSharedResource("[RESX:Search]");
                btnSearch2.Text = GetSharedResource("[RESX:Search]");

                btnReset.InnerText  = GetSharedResource("[RESX:Reset]");
                btnReset2.InnerText = GetSharedResource("[RESX:Reset]");

                // Update Meta Data
                var basePage = BasePage;
                Environment.UpdateMeta(ref basePage, "[VALUE] - " + GetSharedResource("[RESX:SearchAdvanced]"), "[VALUE]", "[VALUE]");
            }
            catch (Exception ex)
            {
                Controls.Clear();
                RenderMessage("[RESX:ERROR]", "[RESX:ERROR:Search]", ex.Message, ex);
            }
        }
Пример #24
0
 protected override async Task OnInitializedAsync()
 {
     //_header.setTitle("Menu data");
     customSearch.user_name = SearchColumns.Get(nameof(customSearch.user_name));
     await base.OnInitializedAsync();
 }
Пример #25
0
        protected override void HighlightSearchText(Graphics paint, DataColumnBase column, CellStyleInfo style,
                                                    Rectangle bounds, string cellValue, RowColumnIndex rowColumnIndex)
        {
            if (AllowHighlightSearchText && !string.IsNullOrEmpty(SearchText))
            {
                if (column != null && (SearchColumns.Count > 0 && !SearchColumns.Contains(column.GridColumn.MappingName)))
                {
                    return;
                }

                var      searchText     = SearchText;
                string[] metaCharacters = { "\\", "^", "$", "{", "}", "[", "]", "(", ")", ".", "*", "+", "?", "|", "<", ">", "-", "&" };
                if (metaCharacters.Any(searchText.Contains))
                {
                    for (int i = 0; i < metaCharacters.Length; i++)
                    {
                        if (searchText.Contains(metaCharacters[i]))
                        {
                            searchText = searchText.Replace(metaCharacters[i], @"\" + metaCharacters[i]);
                        }
                    }
                }

                searchText = "^(" + searchText + ")$";

                //Gets the list of indexes that match with the search text.
                List <int> matchList = Regex.Matches(cellValue, searchText, this.AllowCaseSensitiveSearch ? RegexOptions.None : RegexOptions.IgnoreCase)
                                       .Cast <Match>()
                                       .Select(s => s.Index).ToList();



                if (matchList.Count > 0 && bounds.Width > 0)
                {
                    StringFormat format = new StringFormat(StringFormat.GenericDefault);

                    List <CharacterRange[]> characterRangeList = new List <CharacterRange[]>();

                    //Used 32 as CharacterRangeLength to avoid System.OverFlowExcepion
                    //in StringFormat.SetMeasurableCharacterRanges which occurs if the CharacterRange length is more than 32.
                    int characterRangeLength = 32;
                    int count      = matchList.Count / characterRangeLength;
                    int range      = matchList.Count % characterRangeLength;
                    int startIndex = 0;

                    if (count > 0)
                    {
                        for (int index = 0; index < count; index++)
                        {
                            CharacterRange[] characterRange = new CharacterRange[characterRangeLength];

                            for (int i = 0; i < characterRangeLength; i++)
                            {
                                characterRange[i] = new CharacterRange(matchList[startIndex], SearchText.Length);
                                startIndex++;
                            }

                            characterRangeList.Add(characterRange);
                            characterRange = null;
                        }
                    }

                    if (range > 0)
                    {
                        CharacterRange[] characterRange = new CharacterRange[range];
                        for (int i = 0; i < range; i++)
                        {
                            characterRange[i] = new CharacterRange(matchList[startIndex], SearchText.Length);
                            startIndex++;
                        }

                        characterRangeList.Add(characterRange);
                        characterRange = null;
                    }

                    //VerticalAlignment
                    format.LineAlignment = ConvertToStringAlignment(style.VerticalAlignment);

                    //HorizontalAlignment
                    format.Alignment = ConvertToStringAlignment(style.HorizontalAlignment);

                    if (!column.GridColumn.AllowTextWrapping)
                    {
                        format.FormatFlags = StringFormatFlags.NoWrap;
                        format.Trimming    = column.GridColumn.TextTrimming;
                    }

                    if (DataGrid.RightToLeft == RightToLeft.Yes)
                    {
                        format.FormatFlags = StringFormatFlags.DirectionRightToLeft;
                    }

                    foreach (var characterRange in characterRangeList)
                    {
                        //Set the range of characters to be measured.
                        format.SetMeasurableCharacterRanges(characterRange);

                        //Gets the regions of the measurable characters applied to the string format for the given text with in the text bounds.
                        Region[] regions = paint.MeasureCharacterRanges(cellValue, style.GetFont(), bounds, format);

                        RectangleF[] fillRectangle = new RectangleF[regions.Length];
                        for (int i = 0; i < regions.Length; i++)
                        {
                            fillRectangle[i] = regions[i].GetBounds(paint);
                        }

                        var highlightColor = SearchColor;
                        if (this.CurrentRowColumnIndex == rowColumnIndex)
                        {
                            highlightColor = SearchHighlightColor;
                        }

                        // Highlights the search text based on the
                        using (Brush brush = new SolidBrush(highlightColor))
                            paint.FillRectangles(brush, fillRectangle);
                    }

                    characterRangeList.Clear();
                    characterRangeList = null;
                    matchList.Clear();
                    matchList = null;
                }
            }
        }