Principales respuestas
PROBLEMAS CON BINDINGSOURCE FILTER

Pregunta
-
Estimados tengo un problema a la hora de filtrar un bindingsource, el filtro se realiza mediante un textbox.textchanged, necesito buscar el siguiente producto: "TEE PPR TERMOFUSION 32MM" colocando en el textbox "TEE%32", pero se cae al ingresar un valor despues del %.
ojala me puedan ayudar, muchas gracias
Private Sub txtFiltroMat_TextChanged(sender As Object, e As EventArgs) Handles txtFiltroMat.TextChanged If txtFiltroMat.Text = "" Then T_MATERIALESBindingSource.Filter = "" T_MATERIALESBindingSource.Sort = "DETALLE ASC" Else T_MATERIALESBindingSource.Filter = String.Format("DETALLE Like '%" & txtFiltroMat.Text & "%' OR CODIGO LIKE '%" & txtFiltroMat.Text & "%'") T_MATERIALESBindingSource.Sort = "DETALLE ASC" End If
End Sub
Respuestas
-
Hola Leo.Ponce,
La manera que usas el String.Format no es el correcto, prueba haciendo esta modificación:
If txtFiltroMat.Text.Trim <> String.Empty Then T_MATERIALESBindingSource.Filter = String.Empty Else T_MATERIALESBindingSource.Filter = String.Format("(DETALLE LIKE '%{0}%') OR (CODIGO LIKE '%{0}%')", txtFiltroMat.Text) End If T_MATERIALESBindingSource.Sort = "DETALLE ASC"
Dónde el valor {0} será reemplazado por el txtFiltroMat.Text, y como ambos tienen el mismo valor de Sort, asignarlo fuera del If-else.
[-] ... pero se cae al ingresar un valor despues del %.
Pero que error te muestra, debes comentarlo.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Enrique M. MontejoModerator miércoles, 31 de agosto de 2016 9:08
-
Hola:
al ingresar "COD%6" debería mostrar:COD. 90º PVC 63MMNO, el comodin % no lo tienes que poner en el TextBox.
Si quieres que te encuentre >COD. 90º PVC 63MM< en el Textbox pondrias alguna de estos valores.63MM
PVC 6
3MMUn saludo desde Bilbo
Carlos- Marcado como respuesta Enrique M. MontejoModerator miércoles, 31 de agosto de 2016 9:08
Todas las respuestas
-
Hola Leo.Ponce,
La manera que usas el String.Format no es el correcto, prueba haciendo esta modificación:
If txtFiltroMat.Text.Trim <> String.Empty Then T_MATERIALESBindingSource.Filter = String.Empty Else T_MATERIALESBindingSource.Filter = String.Format("(DETALLE LIKE '%{0}%') OR (CODIGO LIKE '%{0}%')", txtFiltroMat.Text) End If T_MATERIALESBindingSource.Sort = "DETALLE ASC"
Dónde el valor {0} será reemplazado por el txtFiltroMat.Text, y como ambos tienen el mismo valor de Sort, asignarlo fuera del If-else.
[-] ... pero se cae al ingresar un valor despues del %.
Pero que error te muestra, debes comentarlo.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Enrique M. MontejoModerator miércoles, 31 de agosto de 2016 9:08
-
-
-
-
No comprendo porque agregas comodines en el filtro si envías una expresión con comodines.
Sobre lo que tienes, intenta concatenar los comodines al valor:
String.Format("(DETALLE LIKE '%' + {0} + '%') OR (CODIGO LIKE '%' + {0} + '%')", txtFiltroMat.Text)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
-
mmm... no aun arroja error.
de la sig. lista:
COD. 90º PVC 20MM
COD. 45º PVC 20MM
COD. 90º PVC 63MM
al ingresar "COD%6" debería mostrar:
COD. 90º PVC 63MM
al realizar una consulta directa a la base de datos con sentencia SQL funcionaba, pero al realizar el filtro en el BindingSource.Filter, no funciona
-
Efectivamente, hice unas pruebas con la propiedad RowFilter (DataView) y obtengo la misma excepción.
Sin duda, la expresión que intentas ejecutar en t-sql retornará resultados, sin embargo por lo que pude leer al parecer no es posible colocar el wilcard '%' en medio de la cadena, fíjate en el siguiente enlace: How do I filter a c# datatable using a rowfilter with multiple asterisks?. En csharp-examples hay una serie de ejemplos de la sintaxis para filtros e indican los mismo: "...Wildcard in the middle of a patern 'va*lue' is not allowed." DataView RowFilter Syntax [C#]
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
-
Hola:
al ingresar "COD%6" debería mostrar:COD. 90º PVC 63MMNO, el comodin % no lo tienes que poner en el TextBox.
Si quieres que te encuentre >COD. 90º PVC 63MM< en el Textbox pondrias alguna de estos valores.63MM
PVC 6
3MMUn saludo desde Bilbo
Carlos- Marcado como respuesta Enrique M. MontejoModerator miércoles, 31 de agosto de 2016 9:08