Background:
C1FlexGrid has FlexGridSearchPanel component that lets end-user search for texts in grid and highlights them. However, since it’s a UI component its useful if the developer has his own UI/code to search text and just wants to highlight the searched text in grid.
Steps to Complete:
In C1FlexGrid to highlight text searched through custom code, we should handle its OwnerDrawCell event.
private void C1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e) { if(!e.Measuring && e.Row > 0 && e.Col > 0 && _searchFilter.Condition1.Parameter!=null) { if(e.Text.Contains(searchedText)) { e.DrawCell(DrawCellFlags.Border); using (var backBrush = new SolidBrush(e.Style.BackColor)) e.Graphics.FillRectangle(backBrush, e.Bounds); var text = c1FlexGrid1[e.Row, e.Col].ToString(); var lastPart = text.Substring(searchedText.Length); var point = new PointF(e.Bounds.X, e.Bounds.Y); e.Graphics.DrawString(searchedText, e.Style.Font, Brushes.Red, point); var rect = e.Graphics.MeasureString(text, e.Style.Font); point.X += rect.Width - e.Graphics.MeasureString(lastPart, e.Style.Font).Width; using (var foreBrush = new SolidBrush(e.Style.ForeColor)) e.Graphics.DrawString(lastPart, e.Style.Font, foreBrush, point); e.Handled = true; } } }