En esta oportunidad quiero mostrarles como podemos filtrar los registros de un datagridview en visual basic .net. Este ejemplo está basado en este anterior, pero la diferencia radica en que en lugar de pasarle como datasource al datagridview una tabla, le pasamos un dataview.
Un DataView no es más que una vista de la tabla que nosotros le asignamos y en esta vista podemos realizar varias tareas como la que veremos en este ejemplo: filtrar las filas de la tabla utilizando la propiedad RowFilter.
Este ejemplo es breve y muy sencillo; necesitamos un formulario (Form1), un cuadro de texto (TextBox1) y un datagridview (DataGridView1). A continuación les paso el código completo del formulario
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Private dv As New DataView
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cnn As New SqlConnection("Data Source=MyServidor;Initial Catalog=MiBaseDeDatos;Integrated Security=SSPI;")
Dim da As New SqlDataAdapter("SELECT * FROM Products", cnn)
Dim ds As New DataSet
da.Fill(ds)
dv.Table = ds.Tables(0)
DataGridView1.DataSource = dv
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
dv.RowFilter = String.Format("ProductName Like '%{0}%'", TextBox1.Text)
End Sub
End Class
Noten que el dataview (dv) se instanció a nivel de formulario y no dentro del evento Load para luego poder acceder a el desde el evento textChange del textbox.
En este caso el filtro solo afecta la columna ProductName, pero seguro ustedes pueden mejorarlo para adaptarlo a sus necesidades.
El resultado debería verse como en la siguiente imagen.

Información Bitacoras.com…
Valora en Bitacoras.com: En esta oportunidad quiero mostrarles como podemos filtrar los registros de un datagridview. Este ejemplo está basado en este anterior, pero la diferencia radica en que en lugar de pasarle como datasource al datagridview una ….
Thank you!
pero haciendolo de la manera tradiciona uso menos codigo XD
No estoy seguro de cual es la forma tradicional para ti, pero en este ejemplo muestro el uso del DataView. La “Gran Ventaja” de usar un DataView como datasource en lugar de un DataTable es que no tengo que volver a llamar los datos y llenar el DataTable con un nuevo WHERE, simplemente seteo la propiedad RowFilter del DataView y sin hacer nada los datos ya estarán filtrados.
Dịch code ra làm gì vậy trời, đọc cứ mụ mị cả lên.
¿que diferencia existe con el codigo siguiente?
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Me.DatosalumnosTableAdapter.FillBynombre(ColegioDataSet1.datosalumnos, “%” & TextBox1.Text & “%”)
End Sub
lo he realizado de esta manera y me pregunto si s la correcta.
gracias
Hola quise correr tu codigo en vb 2008 y me da el siguiente error
dv.Tables = ds.Tables(0)
La propiedad tables es Readyonly
dv.rowfilter
Rowfilter no es un miembro de System.Data.Dataset
Me podrias ayudar a resolverlo
fijate en la definición del objeto dv, creo que pusiste “Dim dv as new dataset” en lugar de “Dim dv as new DataView”
Como haria esta conexion si utilizo access en lugar de Mysql
El DataView que estamos utilizando para filtrar los registros, filtra los registros de una tabla de un DataSet independientemente de si el origen de esos datos fué Access o SQL. Por lo tanto, se haría igual. Lo único que tenés que cambiar es la conexión y las intrucciones que llenan el DataSet.
Te recomiendo el siguiente post: http://www.solovb.net/index.php/2009/02/03/conectarse-con-base-de-microsoft-access-y-llenar-datagridview/
ya lo hice pero me esta fallando la ultima parte donde utilizamos el textbox
Damian:
SQL y Access son muy parecidos a la hora de usar sentencias SQL, pero no son iguales.
SQL utiliza como comodín para las búsquedas con Like un signo porcentual (%) mientras que Access usa un asterisco (*).
Reemplaza la instrucción: dv.RowFilter = String.Format(“ProductName Like ‘%{0}%’”, TextBox1.Text)
Por esta: dv.RowFilter = String.Format(“ProductName Like ‘*{0}*’”, TextBox1.Text)
Eliseo le agradesco me ayude, y va a decir que como lo molesto, yo trabaje anteriormente con vb 6.0 y pues esto era muy sencillo ahi, ahora con vb 2008 es otra cosa en fin. tengo otro problema
dv.Table = ds.Tables(0)
en esta parte del codigo cuando lo corro me da un error “No se controlo NullreferenceException”
Exelente sitio…
tengo una duda… para que cosa utilizas {0} ??? que valores toma ???
msgbox(String.Format(“el primer argunto es {0}, y el segundo es {1}“, “este”, “este otro”)) dará como resultado “el primer argumento es este y el esgundo este otro”.
String.Format me permite reemplazar parte de un string con los valores de los argumentos que le paso. y en el stringo solo debo agregar los indicadores (con base cero) entre llave para indicar donde irá insertado cada parametro.
Hola, ya pude corregir mi error estaba en que habia colocado
Private dv As DataView
y lo cambie por como lo tienes tu
Private dv As New DataView
Aunque sigo sin poder hacer la consulta al parecer el codigo para que haga el filtrado al final no esta bien, estoy buscando otra manera de hacerlo cuando me corra posteo como lo hice
Ya consegui que me funcionara cambie en codigo que tu me habias posteado por:
esto
dv.RowFilter = String.Format(“Descripcion Like ‘” & txtdescripcion.Text & “%’”)
y me funciona de maravilla
Muchas gracias Eliseo
Es 2005 o 2008 donde lo corriste?
Gracias por la aclaración….
utilice la manera que tiene damian ya que no entendía lo que te pregunte mas arriba, pero ahora me queda MUY claro… (con tu método, queda mas profesional
)
saludos…!!!
Hola, el problema era que cuando haces consultas en SQL con string’s, tenes que tener la comillar simple, que ese es el simbolo de String para SQL. Hay que tene mucho cuidado con eso
Hola que tal me parece excelente la web y pues he aprendido en un ratito que he estado aqui. una pregunta con respecto al rowfilter
supongamos que yo lo que quiero es buscar el articulo pero por medio del id del articulo podria hacerlo asi?
dv.RowFilter = “productid like’%” & TextBox1.Text & “%’”
o estaria mal. si me podrian explicar se los agradecere.
Saludos.
Está bien, pero no se aplicaría al Id dado que el Id siempre es único por lo que tendrias que usar un igual (=) en lugar del operador Like.
Suerte
He aplicado los ejemplos y resultan excelentes pero si tengo en el combobox una lista donde hay 5 productos pero tambien existe otra opcion donde dice “todas” como hago para mostrar todos los productos. Este es el codigo del combobox:
Private Sub cmb_servicios_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_servicios.SelectedIndexChanged
If Me.cmb_servicios.SelectedIndex = 1 Then
‘si selecciona todos trae todos los registros
‘
‘???????????????
Else
Me.dv.RowFilter = String.Format(“cob_servicio like ‘%{0}%’”, Me.cmb_servicios.Text)
End If
End Sub
No se puede abrir la base de datos “bdcompras” solicitada por el inicio de sesión. Error de inicio de sesión.
Error de inicio de sesión del usuario ‘HOME-12A1B1A2BD\XP’.
este error me muestra…que sera?
Gracias.
Hola genios de la sintaxis:
LdvProducto.RowFilter = String.Format(“colNombreComun Like ‘” & txtNombreComunBuscar.Text & “%’”)
Tengo el siguiente error No se puede encontrar la columna [colNombreComun]
no entiendo colNombreComun es el nombre de la columna porque probe con el nombre del campo de la tabla por favor urgente
Amigos quisiera que me den una ayuda.
Quisiera filtrar un Gridview mientras se escribe en un TextBox….
en visual.net C#.
Thanks…
me salvaste la vida
Hola Amigos
Alguien tiene alguna idea de filtrar dos DataView, o sea,
Tengo dos DataView
dv1 y dv2
filtrar el dv1 usando los datos del dv2, sera posible realizar esta tarea?
Saludos de cordiales, tengan un buen dia.
Dany, quizá ya has solucionado el problema pero puedes hacer una especie de formulario maestro, es decir tu dv1 te pasará un un dato que podras ponerlo en un textbox o label, y luego utilizas en el dv2 como parámetro de filtro el ejemplo sobre filtro aqui.
gracias por el codigo execelente aportacion
Muy buena la publicacion
el manejo del dataview lo habia estado buscando para varias cosas y no podia llenarlo, ademas es un muy buen uso el que has mostrado aca
espero que sigas publicando cosas como esta
saludos
HOLA, HE PROBADO EL CODIGO Y FUNCIONA A LA PERFECCION, EN ESTE SITIO “http://www.solovb.net/index.php/2009/02/05/conectarse-a-una-base-de-datos-de-sql-server-y-llenar-un-datagridview-sin-escribir-codigo/” PUBLICASTE LA MANERA DE LLENAR AUTOMATICAMENTE EL DataGridView y mostrarlo tanto como en forma de tabla como de formulario, necesito saber como realizar el filtro tanto a el datagridview como al formulario que sale cuando arrastras la tabla, ya que cuanto realizo la busqueda solo me cambia la posicion en el datagridview y no es los cuadros de texto.
POR FAVOR ESPERO TU RESPUESTA
Que tal colega, tocayo, me interesaría saber si soluciono su problema.
oye, amigo deberías dejar que todos pudieran publicar sus programas, yo tengo varios hechos en visual basic 2008, y creo que les ayudaría a muchos.
hola tengo un problema con el datagridview,lo que necesito hacer es que al seleccionar una fecha inicial y una fecha final por medio de dos datetimepicker y darle click a un boton se filtren los datos, pero esa fecha inicial y fecha final son parte de mis campos es decir, tengo nombre, fehc inicial, fecha final, entre otros datos, espero puedan ayudarme, uso sql y visual 2008
Hola.. lily. .ya pudistes resolver tu problema? estoy igual q tu.. tengo ya algo de tiempo tratando de encontrar la manera de filtrar por fechas.. si lo logras solucionar por favor me dices como.. Gracias
hola amigos espero q me puedan ayudar
rivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
tengo el siguiente orror estoy filtando en un datagrid o datagridview es parecido pero el error es el mismo no estiendo la sintaxis de la cosulta es
Call conectar()
Call mostrar(“select (t1.itemname+’-'+t1.salunitmsr) as Descripcion,sum(t0.quantity) As Cantidad,t0.batchnum AS Lote ,t0.expdate AS [Fecha de Vencimiento] from oibt t0 inner join oitm t1 on t0.itemcode=t1.itemcode where t1.itemcode >= ’1010001′ and t1.itemcode =’01′ and t0.whscode <='03' and t0.quantity !=0 group by (t1.itemname+'-'+t1.salunitmsr),t0.batchnum,t0.expdate order by 1 ")
Me.DataGrid1.SetDataBinding(datos, "x")
vista1.Table = datos.Tables("x")
Call destruir_cone()
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Call conectar()
vista1.RowFilter = String.Format("t1.itemname like '{0}%'", Me.TextBox1.Text)
Me.DataGrid1.DataSource = vista1
Me.DataGrid1.Update()
Call destruir_cone()
End Sub
pero en texbox hago el filtro como lo postearon arriba y el error que sale es no se puede encontar la columna t1.itemname
Gracias, de Corazon de Digo Muchas Gracias, Pasa por Aqui Por Una Consulta, Pero Encontre Esta que es mejor.
Desde Guatemala
Hay un detalle que hace que empiece a filtrar hasta que se escribe la segunda letra…
Disculpa .. alguna ayuda para..
Agregar, Modificar y eliminar registros desde el mismo datagridview ????
hola
Me.dv.RowFilter = String.Format(“id_ciudad like ‘%{0}%’”, Me.id_ciudad.Text)..
si digito letras en mi txt me cuelga el programa… como hago para q no suceda, se supone q el id_ciudad son numeros!!!help
podrías tratar los datos tipeados en el textbox para que solo se acepten numeros y así evitas el problema.
Te dejo un link con el ejemplo: http://www.solovb.net/index.php/2009/01/25/textbox-solo-numeros-validacion/
suerte.
GRACIAS MEN
ME HA SERVIDO MUCHO
Que tal con la misma duda que le tocayo, la verdad les agradeceria que me pudieran orientar ya busque varios metodos distintos y ninguno me funcion de antemano gracias!
Muchas graciass.. me sirvio mucho la verdad.. 100%
Hola e utilizado el codigo en visual basic 2008 y me sale el siguiente error en la fila
Da.Fill.(ds)
{“Error relacionado con la red o específico de la instancia mientras se establecía una conexión con el servidor SQL Server. No se encontró el servidor o éste no estaba accesible. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para admitir conexiones remotas. (provider: Proveedor de canalizaciones con nombre, error: 40 – No se pudo abrir una conexión con SQL Server)”}
¿a que se pude deber?
Se que el post tiene algo de tiempo, mas sin embargo acabo de utilizar el codigo para un filtrado y me arroja un error….” No se controlo FormatException Index (zero based) must be greater than or equal to zero and less than the size of the argument list.”… espero puedas ayudarme de antemano gracias!!!
Mchas Gracias man.!! me sirvio lo andaba buscando.
Buenas tardes como estan.
que hace exactamente este trozo de codigo
Tables(0)
y si tengo verias tablas que colocaria para filtrar.
un dataset (ds) puede tener varias tablas cargadas, en el ejemplo solo tiene una. Aunque solo tenga una hay que especificar a que tabla del dataset nos referimos, por eso indicamos que usaremos la primer tabla Tables(0).
Suerte.
Gracias =)
hola
he probado el codigo y genera el siguiente error en el textbox
No se puede realizar la operación ‘Like’ en System.Int32 y System.String.
me ayuda por favor
Hola EURABU como estas poniendo esta parte del codigo String.Format(“NombreTela Like ‘%{0}%’”, txtNombreCodigo.Text); puede ser el valor que hayas ingresado. checa
como lo hago que en lugar de letras busque por numeros?????
Excelente aporte… pero tengo una duda que va relacionado con este post.
¿Como le hago para filtrar fechas usando un control DATETIMEPICKER si mi formato es DD/MM/YYYY hora ?????
ya tengo la solucion…
dv.RowFilter = “fecha>=’” & cmb_fecha.Text & “‘”
muchas gracias XD
el codigo funciona perfecto para texto en el textbox, como es el ejemplo, pero al momento de poner un filtro numerico ya sea en el ejemplo por ProductId se cae?? alguien logro hacer el filtro numerico?
Gracias por el aporte, funcionó de maravilla!
Solo una cosa, me podrías decir como filtrar pero usando 2 datos d la tabla, osea además de product name filtrar por ejemplo CategoryID.
Gracias!
leyendo por aqui y por alla logre hacer el filtro
Dim filter As String = “Convert(Numero, ‘System.String’) Like ‘%” & txt_o.Text & “%’”
dv.RowFilter = filter
gracias Eliseo te pasaste por el ejemplo y la simplicidad