I made the mistake of using the SelectionChange event on a textbox while implementing some filtering on a DataGrid. What happened, when using SelectionChanged, was that each time the textbox received focus I was executing the filter. Even initially when there was nothing to filter. My logic was checking if the contents of the textbox contained a value or not. However, because the datagrid needed to be reset when the user removed all the filter criteria, I still needed to execute the filter when there was nothing in the filter textbox.
if (textBox1.Text != "")
{
//Filter using the entered criteria
}
else
{
//Reset the filter to null
//Repopulate the datagrid with unfiltered data
}
The else logic was being executed each time the textbox received focus.
The simple solution was to change the event I used to execute the filter from SelectionChange to TextChanged.
The TextChanged event only fires when the value in the filter textbox is modified. It does not fire when the control receives focus.
It’s important to give some time and thought to performance and usability from a user perspective. The ListCollectionView.Filter() method is very fast and there was only a 2 second delay initially with about +6000 rows and 30 columns.
However, I recognized the fact that the logic was doing something that it didn’t need to do. Therefore, I searched and implemented a solution that reduced the resource requirement and increased the performance of the system.
I suggest you do the same with your implementations and programs.