Esta seria una forma correcto de filtrar en un datagridview debes usar el DataView
Ejm:
Código vb.net:
Ver originalDim Dv as new Dataview
Dim Con as new SqlConnection
Dim Com as new SqlCommand
Dim Adp as new SqlDataAdapter
Dim Ds as new DataSet
Dim SQL as String 'Cadena para el Filtrado
' En el load de tu formulario
Private Sub frm_filtroprueba(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
try
Con = new SqlConnecion(cadena de conexion)
if Con.State = 0 then Con.Open()
Com = new SqlCommand
With Com
.Connection = Con
.CommandType = CommandType.Text
.CommandText = "Select * From TuTabla"
end With
Adp = new SqlDataAdapter(Com)
Adp.fill(ds,"x")
datagridview1.DataSource = ds.tables("x") ' Rellenamos la grilla con la tabla
Dv.Table = ds.tables("x") ' Enlazamos el dataview con la tabla devuelta
catch ex as exception
end try
End Sub
' en una caja de texto en el evento TextChanged
' este evento permite filtrar cada vez que ingreses o quites caracteres en la caja de texto
Private Sub Txt_Filtro_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txt_Filtro.TextChanged
try
SQL = "Nombre like '%"+Txt_Filtro.Text.Trim+"%'"
Dv.RowFilter = SQL
datagridview1.DataSource = Dv
datagridview1.Update()
cath ex as exception
end try
End Sub
Nota: el codigo es solo de ejemplo tu lo puedes aplicar en programacion de 3 capas y el filtro lo puedes cambiar por el nombre de columna que quieras a la ves de agregarle varias columnas a filtrar
Ejm:
SQL = "Nombre like '%"+Txt_Filtro.Text.Trim+"%' and Apellido like '%"+Txt_Filtro.Text.Trim+"%'"
o
SQL = "Nombre = '"+Txt_Filtro.Text.Trim+"'"