Visual Basic.NET - Busqueda en un Datagrid

 
Vista:

Busqueda en un Datagrid

Publicado por Sigifredo Chavez (25 intervenciones) el 09/02/2005 18:09:03
hola, tengo un problema con el datagrid, mi datagrid contienes una lista de productos y quiero que al buscar un producto x, la fila que contiene dicho productos sea la que quede activa en la cuadricula del datagrid, he intentado varias cosas, pero ninguna me funciona, agracedecia ampliamente si alguien me puede ayudar con esta duda que tengo

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Busqueda en un Datagrid

Publicado por Edgar (1501 intervenciones) el 10/02/2005 16:22:20
Hola

Ya intentaste con el metodo Select del Grid, a este metodo le pasas como parametro el indice de la fila y la selecciona, solamente debes ubicar en que fila está e invocar el metodo

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda en un Datagrid

Publicado por Sigifredo Chavez (25 intervenciones) el 10/02/2005 17:24:13
si, ya intente eso, pero el problema es localizar la clave, descripcion o codigo del producto , el seleccionar una fila del grid no es ningun problema, pero quiero buscar y que al encontrar el registro en el dataset automaticamente se posiciones sobre la fila correspondiente del datagrid
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda en un Datagrid

Publicado por Edgar (1501 intervenciones) el 10/02/2005 19:20:09
Hola

Parece mas complicado de lo que pensaba.. pues bueno, yo creo que la solución pasa por usar el BindigContext, el DataGrid tiene una propiedad con ese nombre.

Te mando la documentación del BindingContext para que tengas una referencia

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolclassbindingcontexttopic.asp

Entonces, lo que deberias hacer es obtener el BindingManagerBase de este objeto, lo haces asi

BindingManagerBase bmOrders =
TuDatagrid.BindingContext(XXX, "YYY")

Donde XXX es el datasource que le diste al grid y "YYY" es el datamember

Finalmente, lo que deberias hacer es buscar la fila en el BindingManagerBase, para esto usas la propiedad Position, para desplazarte y Current para obtener el valor, generalmente este es un DataRowView, si enlazaste con un dataset o datatable

A medida que te mueves, estas seleccionando un registro del datagrid, finalmente podrás obtener la posición dentro del grid y usar el metodo select

Toda esta complicación que te describi es porque los registros de la tabla que enlazaste en el grid, no estan en el mismo orden en el datagrid, por lo que la fila 1 del datatable no es necesariamente la fila 1 en el grid.

Cualquier otra solución que se me ocurra, te la comento, pero dime por favor que tal te va con esta, ya que es algo que no he probado aun

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda en un Datagrid

Publicado por sigifredo (25 intervenciones) el 11/02/2005 00:09:30
si funciono lo que me comentaste

gracias

lo unico que que como es acceso secuencial, es muy lento mi lista tiene 8000 productos y tarda como 20 segundos en recorrerla para encontrar el dato buscado, el codigo que agregue es el siguiente a ver que le ves o que le cambiarias tu

Dim dato
dato = InputBox("Dato a buscar")
grdListado.Visible = False
Dim mb As BindingManagerBase
mb = grdListado.BindingContext(objProductos, "Listado")
Dim i
For i = 0 To mb.Count
mb.Position = i
Dim r
r = mb.Current("codigo")
If r Like "*" & dato & "*" Then
Exit Sub
End If
Next
MsgBox("no se encontro ninguna coincidencia")
grdListado.CurrentCell = pos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busqueda en un Datagrid

Publicado por Edgar (1501 intervenciones) el 11/02/2005 12:21:53
Hola

Me alegro mucho que haya funcionado, aunque la verdad me hubiese gustado haber hayado alguna forma directa de ubicar el registro, el problema es que el BindingManagerBase se usa más que todo para el desplazamiento entre registros, es decir, cuando necesites agregar una funcionalidad de siguiente, anterior, primero, ultimo, este es el objeto que necesitas paralograrlo.

Quizás puedas implementar una busqueda más inteligente, y esto que te voy a comentar funciona siempre y cuando sepas como está ordenado el grid, el algoritmo consiste en buscar el registro del medio, luego haces una comparación para saber si es el registro que necesitas, o si el mismo esta antes o despues (lo sabras por el orden que tiene), una vez ubicado donde puede estar el registro, haces otra vez la misma busqueda, pero esta vez sobre la mitad de los registros, y vuelves a aplicar lo mismo.

Fijate que este algoritmo es mucho más rapido, porque en cada iteración desechas la mitad de los registros que tienes, pero como te digo, solo funciona si sabes como estan ordenados los registros

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar