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;
}
}
}
Ruchir Agarwal