Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: [Black Vomit] en 25 Noviembre 2011, 14:12 pm



Título: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: [Black Vomit] en 25 Noviembre 2011, 14:12 pm
Saludos estimados, intenté buscar ayuda en el foro MSDN pero fue poco fructífero, tengo lo siguiente:
Quiero realizar un filtro en mi website que, según lo ingresado me pinte las filas de mi gridview, sean los caracteres que sean.  Por ejemplo, ingreso "adm", le doy al botón BUSCAR y debería seleccionarme y pintarme las filas que contenga esas letras en cualquiera de sus campos.

Lo ideal es que se ejecute en el evento CLICK de mi botón buscar.  Tengo un texbox en dónde se ingresa la búsqueda, el botoón y el gridview en dónde se pintarian las filas y me carga los datos de mi base de datos.

Cualquier ayuda sería bienvenida, estoy hace días con esto.!!

Lo estoy realizando en c# + sqlserver.
Acá el código de mi evento click del botoón BUSCAR.

        protected void btn_IngFormSearch_Click(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gv_ListarCalibres.Rows)
            {

                for (int i = 1; i <= 11; i++)
                {
                    TextBox txt = row.FindControl(string.Format("TextBox{0}", i)) as TextBox;
                    //if ((txt != null) && (txt.Text == txt_IngFormBuscador.Text))
                        //e.row.BackColor = System.Drawing.Color.Red;
                }

            }
        }

PD: Soy novato en c#, pero algo le aplico.   :¬¬


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: Novlucker en 25 Noviembre 2011, 14:45 pm
Se me ocurren dos posibilidades;

1) Almacenar el source de tu consulta en una SESSION (o VIEWSTATE mejor) para no ir contra la DB cada vez, para luego hacer la búsqueda desde tu textbox, recuperar los valores desde el SESSION, y volver a realizar el bind. Al realizar el bind se dispara el evento RowDataBound, y ahí puedes realizar la búsqueda y pintar.

2) Realizar los cambios desde javascript, para lo cual deberías de registrar tu script y llamarlo desde el click.

La primera opción es la más sencilla :)

Saludos


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: [Black Vomit] en 25 Noviembre 2011, 14:49 pm
Se me ocurren dos posibilidades;

1) Almacenar el source de tu consulta en una SESSION (o VIEWSTATE mejor) para no ir contra la DB cada vez, para luego hacer la búsqueda desde tu textbox, recuperar los valores desde el SESSION, y volver a realizar el bind. Al realizar el bind se dispara el evento RowDataBound, y ahí puedes realizar la búsqueda y pintar.

2) Realizar los cambios desde javascript, para lo cual deberías de registrar tu script y llamarlo desde el click.

La primera opción es la más sencilla :)

Saludos

Saludos viejo! mira, mejoré mi código, me gustaría seguir la lógica que estoy implementando.

    protected void btn_IngFormSearch_Click(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gv_ListarCalibres.Rows)
            {

                for (int i = 1; i <= 11; i++)
                {
                    TextBox txt = row.FindControl(string.Format("TextBox{0}", i)) as TextBox;
                        if ((txt != null) && (txt.Text == txt_IngFormBuscador.Text))
                        {
                            row.BackColor = System.Drawing.Color.Red;
                        }
                }

            }
        }


Pero no me pinta las filas .... :(   :-\ :-\ :-\ :-\

¿Me podrías ayudar a clarificar la primera opción, en base al código que ya tengo?
PD: Soy noob  :(!!!!! y nunca he implementado un SESSION en c#  :(!!


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: Novlucker en 25 Noviembre 2011, 15:05 pm
Las session al igual que los viewstate son algo así ..
Código
  1. List<string> list = new List<string>(){"palabra1","palabra2","palabra3"};
  2. //Guardo datos en session
  3. Session["datos"] = list;
  4.  
  5. //Recupero datos de session. El session guarda objects, asi que se debe de castear
  6. List<string> list2 = (List<string>)Session["datos"];

http://adeshoras.wordpress.com/2008/08/09/el-gridview-y-sus-eventos-el-evento-rowdatabound/
Al leer el link anterior, te darás cuenta de que debes de adaptar ese código ;)

Saludos


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: [Black Vomit] en 25 Noviembre 2011, 15:10 pm
Precisamente lo estaba haciendo, ahora, desde ese evento, tengo lo siguiente:
 //____________________________________________________________________
        //----------------- FUNCION BUSCADOR /FILTRO POR CARACTER------------
        protected void btn_IngFormSearch_Click(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gv_ListarCalibres.Rows)
            {
                for (int i = 1; i <= 11; i++)
                {
                    TextBox txt = row.FindControl(string.Format("TextBox{0}", i)) as TextBox;
                        if ((txt != null) && (txt.Text == txt_IngFormBuscador.Text))
                        {
                            row.BackColor = System.Drawing.Color.Red;
                        }
                }

            }
        }

        //____________________________________________________________________
        //---------------- EVENTO ROWDATABOUND PINTAR FILAS ------------------
        protected void gv_ListarCalibres_RowDataBound(object sender, GridViewRowEventArgs e)
        {


            if (e.Row.RowType == DataControlRowType.DataRow && txt_IngFormBuscador.Text != "")
            {
                for (int x = 0; x < e.Row.Cells.Count; x++)
                {
                    string stock = e.Row.Cells
  • .Text;
                    if (stock.Contains(txt_IngFormBuscador.Text))
                    {
                        e.Row.Style.Add("background-color", "#C69D9D");
                    }
                }

            }
        }


Pero mi pregunta ahora es, ¿Cómo podría desde el evento click del botoón BUSCAR invocar al evento ROWDATABOUND que me pintaría mis filas?


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: Novlucker en 25 Noviembre 2011, 15:15 pm
Te lo dije más arriba ... desde el BUSCAR vuelves a invocar el DataBind de la grilla

Saludos


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: [Black Vomit] en 25 Noviembre 2011, 15:23 pm
Quizás una solución más sencilla sería crear una variable booleana global llamada CLICK =false;
Luego en el evento click del buscar darle TRUE y preguntar sobre esa variable en el rowdatabound, así:

  protected void btn_IngFormSearch_Click(object sender, EventArgs e)
        {
            click = true;
            foreach (GridViewRow row in gv_ListarCalibres.Rows)
            {
                for (int i = 1; i <= 11; i++)
                {
                    TextBox txt = row.FindControl(string.Format("TextBox{0}", i)) as TextBox;
                        if ((txt != null) && (txt.Text == txt_IngFormBuscador.Text))
                        {
                            row.BackColor = System.Drawing.Color.Red;
                        }
                }

            }
        }

        //____________________________________________________________________
        //---------------- EVENTO ROWDATABOUND PINTAR FILAS ------------------
        protected void gv_ListarCalibres_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && txt_IngFormBuscador.Text != "" && click == true )
            {
                for (int x = 0; x < e.Row.Cells.Count; x++)
                {
                    string stock = e.Row.Cells
  • .Text;
                    if (stock.Contains(txt_IngFormBuscador.Text))
                    {
                        e.Row.Style.Add("background-color", "#C69D9D");
                    }
                }

            }
        }

¿Sigue tu misma lógica o no? pero no pinta nada.  Gracias por tus sugerencias  estimado.


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: Novlucker en 25 Noviembre 2011, 15:30 pm
Para darle estilos a una grilla debes de hacerlo durante la carga de las filas, luego de que esta creada no puedes hacerlo, a menos que sea desde javascript, así que debes de disparar el databind o no va a haber cambio alguno.

Saludos


Título: Re: AYUDA - FILTRO CON GRIDVIEW (pintar filas).
Publicado por: Novlucker en 8 Diciembre 2011, 12:14 pm
http://www.aspdotnet-suresh.com/2011/12/search-records-in-gridview-and.html

Saludos