I'd recommend pulling ALL of the data from the database, then bind it to the datagridview as a datasouce...then to get the filtering you can set the DataTable.DefaultView.RowFilter property. You give it a string that is basically the WHERE portion of an SQL statement. This will make it quicker as you don't have to rehit the database everytime you want to filter data.
Here is the MSDN on it.[
^]