Here is one technique that implements a find from scratch. In this sample, a GridDataBoundGrid with 20000 rows can return all occurrences of a string in less than 100 msecs on my system. It does so by copying the column to an arraylist, and using ArrayList.IndexOf to do the searching. Now th this simple implementation, this requires a full word match. But you can use a ListBox and ListBox.FindString to do 'startswith' searching.