Filtrar y buscar datos de un DataGridView

Problema: Tengo un DataGridView lleno con datos obtenidos de un DataTable, el cual está enlazado al mismo, y necesito que se muestren solo una cantidad determinada de esos registros, como cuando se utiliza el filtro en Microsoft Excel, sin necesariamente borrar dichos datos.
Solución: Utilizar el BindingSource.

Una de las mejores formas de filtrar datos que ya están cargados en un DataGridView es usando el BindingSource, sirve para mostrar una cantidad definida de registros o para reducir la cantidad de datos a procesar, todo depende de cómo se lo utilice. Para un buen ejemplo del su utilización, se puede encontrar aquí: Filtar un control DataGridView

Por mi parte, resumiré las partes importantes, intentando explicar lo más relevante.

Creé un Procedimiento en el cual tengo un DataGridView con datos enlazados y un TextBox en donde el usuario escribirá lo que se desea filtrar, por ejemplo, el nombre de una ciudad.

Private Sub Aplicar_Filtro()
        'Nota: Recordar que se debe asignar el BindingSource al DataGridView antes de realizar este procedimiento por medio del DataSource

        ' verificar que el DataSource no esté vacío  
        If BindingSource.DataSource Is Nothing Then
            ' si no hay registros cambiar el color del TextBox
            TextBox1.BackColor = Color.Red
            Exit Sub
        End If

        Try
            Dim filtro As String = String.Empty
            'la variable filtro debería contener algo así: "[Ciudad] like '%CANADA%'"
            filtro = "[Ciudad] like '%" & TextBox1.Text.Trim & "%'"
            ' asignar el criterio a la propiedad Filter del BindingSource  
            BindingSource.Filter = filtro
            
            'El filtro funciona parecido a una sentencia select del SQL en la parte del where
            'El filtro en realidad es: campo_del_datagridview = variable_a_buscar

            If BindingSource.Count = 0 Then
                ' si no hay registros cambiar el color del TextBox
                TextBox1.BackColor = Color.Red
            Else
                TextBox1.BackColor = Color.White
            End If
        Catch ex As Exception 'Errores
            MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
        End Try
End Sub

Luego, este procedimiento es llamado desde el TextBox, para que se actualice cada vez que el usuario escriba algo.

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Aplicar_Filtro()
End Sub