Filtrar los dotos de un DataGridView

12/02/2009 - 16:54 por Anti_Work | Informe spam
Hola. quiero que se filtre un datagridview segun las letras que se van
ingresando en una caja de texto. En el evento TextChanged del textbox, escibi
el esto:

DataView dv = new DataView((DataTable)DGV.DataSource);
dv.RowFilter = "ApyNom like '" + txtApB.Text + "*'";
DGV.DataSource = dv;

y funciona solo con la primera letra ingresada, al ingresar la segunda se
provoca un error porque "DGV.DataSource" en principio es un DataTable. Pero
luego de la aplicación del filtro se convierte en un DataGridView, y esto no
se puede convertir en un DataTable.

Como se resuleve esto?

Saludos

Preguntas similare

Leer las respuestas

#6 Anti_Work
13/02/2009 - 23:02 | Informe spam
Hola. Gracias por la aclaración
Probé con el siguiente codigo:

string filtro = "ApyNom like '" + txtApB.Text + "*'";
DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
dv.RowFilter = filtro;
DGV.DataSource = dv.ToTable();

y me filtra segun las letras que ingreso, pero al borra las letras, ya no
filtra mas, se queda plantado en lo que mostro con la ultima letra ingresada.
Entonces probé pasandole el dataview en vez del datatable:

string filtro = "ApyNom like '" + txtApB.Text + "*'";
DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
dv.RowFilter = filtro;
DGV.DataSource = dv;

y me filtra solo la primera letra. al ingresar la segunda, me da error (
dice que no se puede convertir un dataview a un datatable).

¿Algun comentario?

Saludos
Respuesta Responder a este mensaje
#7 Jose TH
13/02/2009 - 23:33 | Informe spam
Antes que todo, el DataSource del DGV ponlo directamente al DataTable.
Ej.
DGV.DataSource= MiDataTable;

Los filtros me imagino que los pones en un TextChanged:

Hazlos por ejemplo asi:

string texto=txtApB.Text.Trim();
if (texto.Length!=0) //si tiene datos pongo filtro
MiDataTable.DefaultView.RowFilter= "ApyNom like '" + texto + "*'";
else //si el texto no tiene datos borro el filtro
MiDataTable.DefaultView.RowFilter= null;

con eso debe bastarte para que se aplique el filtro en el DGV. No hay que
hacer ToTable() ni convertir tipos a DataTable ni nada de eso.




"Anti_Work" escribió en el
mensaje news:

Hola. Gracias por la aclaración
Probé con el siguiente codigo:

string filtro = "ApyNom like '" + txtApB.Text + "*'";
DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
dv.RowFilter = filtro;
DGV.DataSource = dv.ToTable();

y me filtra segun las letras que ingreso, pero al borra las letras, ya no
filtra mas, se queda plantado en lo que mostro con la ultima letra
ingresada.
Entonces probé pasandole el dataview en vez del datatable:

string filtro = "ApyNom like '" + txtApB.Text + "*'";
DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
dv.RowFilter = filtro;
DGV.DataSource = dv;

y me filtra solo la primera letra. al ingresar la segunda, me da error (
dice que no se puede convertir un dataview a un datatable).

¿Algun comentario?

Saludos


Respuesta Responder a este mensaje
#8 Jose TH
13/02/2009 - 23:37 | Informe spam
Nota: la asignación al DataSource del DGV, NO hay que hacerla en el
TextChanged (cada vez que se cambia el filtro). Basta hacerla una sola vez
al principio (luego de q se cargaron los datos desde el servidor).

<Jose TH >>> escribió en el mensaje
news:
Antes que todo, el DataSource del DGV ponlo directamente al DataTable.
Ej.
DGV.DataSource= MiDataTable;

Los filtros me imagino que los pones en un TextChanged:

Hazlos por ejemplo asi:

string texto=txtApB.Text.Trim();
if (texto.Length!=0) //si tiene datos pongo filtro
MiDataTable.DefaultView.RowFilter= "ApyNom like '" + texto + "*'";
else //si el texto no tiene datos borro el filtro
MiDataTable.DefaultView.RowFilter= null;

con eso debe bastarte para que se aplique el filtro en el DGV. No hay que
hacer ToTable() ni convertir tipos a DataTable ni nada de eso.




"Anti_Work" escribió en el
mensaje news:

Hola. Gracias por la aclaración
Probé con el siguiente codigo:

string filtro = "ApyNom like '" + txtApB.Text + "*'";
DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
dv.RowFilter = filtro;
DGV.DataSource = dv.ToTable();

y me filtra segun las letras que ingreso, pero al borra las letras, ya no
filtra mas, se queda plantado en lo que mostro con la ultima letra
ingresada.
Entonces probé pasandole el dataview en vez del datatable:

string filtro = "ApyNom like '" + txtApB.Text + "*'";
DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
dv.RowFilter = filtro;
DGV.DataSource = dv;

y me filtra solo la primera letra. al ingresar la segunda, me da error (
dice que no se puede convertir un dataview a un datatable).

¿Algun comentario?

Saludos






Respuesta Responder a este mensaje
#9 Anti_Work
14/02/2009 - 21:07 | Informe spam
Muchas gracias. ahora me queda mas claro.

Saludos.


"Jose TH >>" wrote:

Nota: la asignación al DataSource del DGV, NO hay que hacerla en el
TextChanged (cada vez que se cambia el filtro). Basta hacerla una sola vez
al principio (luego de q se cargaron los datos desde el servidor).

<Jose TH >>> escribió en el mensaje
news:
> Antes que todo, el DataSource del DGV ponlo directamente al DataTable.
> Ej.
> DGV.DataSource= MiDataTable;
>
> Los filtros me imagino que los pones en un TextChanged:
>
> Hazlos por ejemplo asi:
>
> string texto=txtApB.Text.Trim();
> if (texto.Length!=0) //si tiene datos pongo filtro
> MiDataTable.DefaultView.RowFilter= "ApyNom like '" + texto + "*'";
> else //si el texto no tiene datos borro el filtro
> MiDataTable.DefaultView.RowFilter= null;
>
> con eso debe bastarte para que se aplique el filtro en el DGV. No hay que
> hacer ToTable() ni convertir tipos a DataTable ni nada de eso.
>
>
>
>
> "Anti_Work" escribió en el
> mensaje news:
>>
>> Hola. Gracias por la aclaración
>> Probé con el siguiente codigo:
>>
>> string filtro = "ApyNom like '" + txtApB.Text + "*'";
>> DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
>> dv.RowFilter = filtro;
>> DGV.DataSource = dv.ToTable();
>>
>> y me filtra segun las letras que ingreso, pero al borra las letras, ya no
>> filtra mas, se queda plantado en lo que mostro con la ultima letra
>> ingresada.
>> Entonces probé pasandole el dataview en vez del datatable:
>>
>> string filtro = "ApyNom like '" + txtApB.Text + "*'";
>> DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
>> dv.RowFilter = filtro;
>> DGV.DataSource = dv;
>>
>> y me filtra solo la primera letra. al ingresar la segunda, me da error (
>> dice que no se puede convertir un dataview a un datatable).
>>
>> ¿Algun comentario?
>>
>> Saludos
>>
>>
>
>



Respuesta Responder a este mensaje
#10 Xuri
16/02/2009 - 13:09 | Informe spam
Bueno, yo tengo un problema parecido. Tengo lo siguiente:


filtro.Filter = nombre.text + " LIKE '%" + this.abuscar.Text + "%'";


El problema esta que cuando busco un nombre.text que contiene un apostrofe
me da error. por ejemplo:

C'an Gomila

cuando escribo la ' me genera error. Alguna solucion?

Utilizo firebird como base de datos.
Un saludo




"Anti_Work" wrote:


Muchas gracias. ahora me queda mas claro.

Saludos.


"Jose TH >>" wrote:

> Nota: la asignación al DataSource del DGV, NO hay que hacerla en el
> TextChanged (cada vez que se cambia el filtro). Basta hacerla una sola vez
> al principio (luego de q se cargaron los datos desde el servidor).
>
> <Jose TH >>> escribió en el mensaje
> news:
> > Antes que todo, el DataSource del DGV ponlo directamente al DataTable.
> > Ej.
> > DGV.DataSource= MiDataTable;
> >
> > Los filtros me imagino que los pones en un TextChanged:
> >
> > Hazlos por ejemplo asi:
> >
> > string texto=txtApB.Text.Trim();
> > if (texto.Length!=0) //si tiene datos pongo filtro
> > MiDataTable.DefaultView.RowFilter= "ApyNom like '" + texto + "*'";
> > else //si el texto no tiene datos borro el filtro
> > MiDataTable.DefaultView.RowFilter= null;
> >
> > con eso debe bastarte para que se aplique el filtro en el DGV. No hay que
> > hacer ToTable() ni convertir tipos a DataTable ni nada de eso.
> >
> >
> >
> >
> > "Anti_Work" escribió en el
> > mensaje news:
> >>
> >> Hola. Gracias por la aclaración
> >> Probé con el siguiente codigo:
> >>
> >> string filtro = "ApyNom like '" + txtApB.Text + "*'";
> >> DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
> >> dv.RowFilter = filtro;
> >> DGV.DataSource = dv.ToTable();
> >>
> >> y me filtra segun las letras que ingreso, pero al borra las letras, ya no
> >> filtra mas, se queda plantado en lo que mostro con la ultima letra
> >> ingresada.
> >> Entonces probé pasandole el dataview en vez del datatable:
> >>
> >> string filtro = "ApyNom like '" + txtApB.Text + "*'";
> >> DataView dv = ((DataTable)(DGV.DataSource)).DefaultView;
> >> dv.RowFilter = filtro;
> >> DGV.DataSource = dv;
> >>
> >> y me filtra solo la primera letra. al ingresar la segunda, me da error (
> >> dice que no se puede convertir un dataview a un datatable).
> >>
> >> ¿Algun comentario?
> >>
> >> Saludos
> >>
> >>
> >
> >
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida