Búsqueda personalizada

miércoles, 10 de septiembre de 2008

Buscar item gridview

Esta entrada es a petición de mi buen amigo Juan José Mendez de Guatemala, así que espero que le sirva a él y aquien se le ofrezca realizar esto:

Primero que nada insertaremos un gridview de la siguiente manera:


Este gridview está ligado a una fuente de datos, representada de la siguiente manera:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="IdEmpleado" HeaderText="IdEmpleado" InsertVisible="False" ReadOnly="True" SortExpression="IdEmpleado" />
<asp:BoundField DataField="NombreEmpleado" HeaderText="NombreEmpleado"
SortExpression="NombreEmpleado" />
<asp:BoundField DataField="FechaAlta" HeaderText="FechaAlta"
SortExpression="FechaAlta" />
<asp:CheckBoxField DataField="IdEstatusEmpleado" HeaderText="IdEstatusEmpleado"
SortExpression="IdEstatusEmpleado" />
</Columns>
</asp:GridView>

Si visualizamos la consulta, contiene un LIKE y el parámetro por default de entrada es un simbolo de %, el cual nos muestra todo los empleados.
Ahora este parámetro depende de un control TextBox1, en el cual vamos introducir nuestra consulta, y colocaremos un botón para actualizar nuestro gridview, estos controles los pondremos en la parte superior de le siguiente manera:
<asp:Label ID="Label1" runat="server" Text="Filtrar Nombre:"></asp:Label>
&nbsp;<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
&nbsp;<asp:Button ID="Button1" runat="server" Text="Filtrar" />

Y de esta manera localizaremos un elemento o los elementos que coincidan con parte de nuestra consulta.



Ahora si solamente necesitamos que al realizar la busqueda se marquen o se cambien de color los renglon(es) encontrado(s), entonces debemos hechar mano de algo de código.

Primero debemos dar doble click sobre el botón filtrar para que se cree el evento click en el cual agregaremos el siguiente código quedando así:

protected void Button1_Click(object sender, EventArgs e)
{
foreach(GridViewRow Row in GridView1.Rows)
{
if (Row.Cells[1].Text.Contains(TextBox1.Text))
{
Row.BackColor = System.Drawing.Color.Coral;
}
}
}

Este código lo que hace es al dar click en el boton filtrar, es recorrer cada uno de los renglones del gridview en cuestión, y buscar que en la celda 1 que es la que tiene el nombre del empleado contenga el texto de nuestra busqueda, si la encuentra lo que hace es cambiar de color el renglón.

También hay que recordar que nuestro DataSource debe cambiar por que ya no se realizará el filtrado en directamente a la base de datos, sino simplemente marcaremos en nuestros gridview nuestra busqueda quedando así:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM Gen_TEmpleado WHERE NombreEmpleado LIKE '%' + @p_NombreEmpleado + '%'">
<SelectParameters>
<asp:Parameter Name="p_NombreEmpleado" DefaultValue="%" />
</SelectParameters>
</asp:SqlDataSource>


A Continuación muestro como se vería nuestro resultado de la busqueda utilizando el nombre Carlos.




Bueno Juanjo, espero te sirva, si tuvieras mas dudas me dices. Saludos a todos y que sea de mucha utilidad todo esto.

2 comentarios:

Juan José Méndez dijo...

Eli buen día, gusto de saludarte.
La verdad muy bien explicado, muchas gracias por haberte tomado el tiempo en explicar este tema.
Es de mucha utilidad, ya me funciono este tema.
Pero como siempre abuzando de tu confianza me gustaria que trataras el tema de los menus dinamicos en C# en un website de visual studio 2005.
Nuevamente gracias por tu valiosa ayuda, en el aprendizaje de esta herramienta.

Juan José Méndez
Guatemala.

Ghostlike dijo...

Hola buenas, antes que nada quisiera agradecerte por el gran aporte y ayuda que prestas a otros programadores o computines en general ejje

Utilice tu código de "Buscar item gridview" y me funciono a la perfección, pero cuando quise anexar los controles update y eliminar, el código del botón dejo de funcionar, porque al parecer recorre las Row y se topa con el control(up,elim) y simplemente se salta el ciclo "if". Me gustaría que me dieras algunos consejos o tips de como arreglar ese tema.

Te dejo el código del botón lo modifique un poco para que realice selecciones independientes.

protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow Row in GridView1.Rows)
{
Row.BackColor = System.Drawing.Color.Transparent;
Row.ForeColor = System.Drawing.Color.Gray;
if (Row.Cells[1].Text.Contains(TextBox1.Text))
{
Row.BackColor = System.Drawing.Color.SteelBlue;
Row.ForeColor = System.Drawing.Color.White;
}
}
}