Используйте отфильтрованный DataView, а затем установите BindingSource вашего DataGridView на Filtered DataView. Если пользователь очищает условие фильтра, просто верните BindingSource к исходному виду по умолчанию. Я рекомендую вам сохранить вид перед сортировкой, чтобы вы могли легко вернуться к исходному виду данных. Я использую это сейчас для быстрой сортировки, и это прекрасно работает. Замените имена столбцов вашими. Вы должны иметь возможность изменить представление данных из исходного DataGridView и применить фильтр без повторного связывания. Просто привяжите свой DataGridView к DataView в начале, затем извлеките DataView (т.е. DataSource) и измените. Я не уверен, используете ли вы BindingNavigator или нет. Удачи.
Dim myDataTable As DataTable = myDataSet.Tables(0)
Dim myDataView As New DataView(myDataTable)
myDataView.RowFilter = "CompanyName LIKE '%" & ddlAlpha.SelectedItem.Text & "%'"
myDataView.Sort = "ContactName"
dataGridView1.DataSource = myDataView
dataGridView1.DataBind()