¿Cómo seleccionar una fila en un Gridview en ASP NET?

El ejemplo siguiente se trabaja sobre Visual Studio 2012 pero el código utilizado es compatible con versiones anteriores probados hasta Visual Studio 2005.

En este tema aprenderemos a realizar la selección de filas en un control Gridview sin incorporar textos de selección o botones, simplemente presionando clic sobre la fila. Para esto nos apoyaremos de nuestra entrada anterior Llenar control Gridview en ASP NET.

Tomaremos en cuenta que el nombre de nuestro control Gridview es “GridViewOne”. Agregaremos en nuestro code behind el evento RowDataBound que se produce cuando una fila de datos se enlaza a los datos de un control GridView como en el siguiente ejemplo:

<div class="divGrid">
    <div class="grid">
 
        <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
 
                <asp:GridView 
                    ID="GridViewOne"
                    runat="server"
                    CssClass="datatable"
                    CellPadding="0" 
                    CellSpacing="0"
                    GridLines="None"
                    AutoGenerateColumns="False"
                    DataKeyNames="codigo">
 
                    <RowStyle CssClass="even"/>
                    <HeaderStyle CssClass="header" />
                    <AlternatingRowStyle CssClass="odd"/>
 
                    <Columns>
                        <asp:BoundField HeaderText="Código de Empleado" DataField="codigo"/>
                        <asp:BoundField HeaderText="Nombre y Apellido" DataField="Nombre_Empleado"/>
                    </Columns>
 
                </asp:GridView>
 
                <asp:HiddenField ID="hdfValorGrid" runat="server" Value=""/>
 
            </ContentTemplate>
        </asp:UpdatePanel>
 
    </div><!-- grid -->
</div><!-- divGrid -->

La consulta que llenara nuestro origen de datos debe ser algo como lo siguiente

Dim dbCon As New System.Data.OleDb.OleDbConnection("CADENA DE CONEXION HACIA SQL SERVER")
 
dbCon.Open()
 
Dim SQL As String = String.Empty
SQL = "Select codigo, Nombre_Empleado from Empleados"
 
Dim da As New System.Data.OleDb.OleDbDataAdapter(SQL, dbCon)

Como se puede apreciar las columnas de las consultas coinciden con los atributos DataField de los objetos BoundField que conforman las columnas del control Datagridview; a su vez el atributo DataKeyNames debe tener como valor la llave primaria del origen de dato.

Una vez tenemos clara la relación que debe existir entre los objetos BoundField y nuestro origen de datos es momento de colocar el evento RowDataBound.

Protected Sub GridViewOne_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewOne.RowDataBound
  If e.Row.RowType = DataControlRowType.DataRow Then
    e.Row.Attributes.Add("OnClick", "" & Page.ClientScript.GetPostBackClientHyperlink(Me.GridViewOne, "Select$" + e.Row.RowIndex.ToString) & ";")
  End If
End Sub

Lo que se hace con el código anterior es insertar una funcionalidad en el Gridview de tal forma que al presiona clic sobre cualquier fila, esta sea seleccionada y cargue como valor por defecto el marcado en el atributo DataKeyNames.

Lo restante es pasar la información del Gridview hacia otro control, en este caso el control HiddenField, esto lo lograremos mediante el evento SelectedIndexChanged el cual se produce cuando se selecciona una fila en el Gridview.

Protected Sub GridViewOne_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridViewOne.SelectedIndexChanged
  Me.hdfValorGrid.Value = Me.GridViewOne.SelectedValue.ToString
End Sub

Espero les sea de utilidad, pueden colocar cualquier duda en la caja de comentarios, en próximos temas estaremos hablando de otras funcionalidades que podemos realizar con este poderoso control.

Suscribir
Notificar a
guest
8 Comentarios
Comentarios en línea
Ver todos los comentarios
trackback

[…] Lo anteriormente dicho es bastante sencillo de hacer y no necesitamos (como en el caso anterior) configurar el atributo DataKeyNames del gridview, simplemente una vez habilitada la marcación o selección de la fila hay que escribir lo siguiente en el evento SelectedIndexChanged o cualquier otro evento de otro control de servidor que genere un postback… Sigue Leyendo […]

GersonFigueroa

que tal amigo, seguí tus pasos pero nada no dispara el evento me podrías ayudar con eso por cierto estoy programando con Visual Studio 2012

GersonFigueroa

Muy bien eso era , muchas gracias

Jorge Garcia Suárez

Hola:
Me funciona muy bien lo que has publicado pero tengo una situacion un poco distinta. yo tengo un grid con varios productos donde al seleccionar uno pasa hacia otra pagina con varias opciones para modificar dicho producto. de la forma que tu muestras eso me funciona perfecto. el problema es que para mi caso se pueden seleccionar varios productos para hacerles modificaciones en el mismo grid mediante un checkbox que le agregue, entonces si pongo el codigo para pasar a la otra pag en el evento del «SelectedIndexChanged» no me permite seleccionar varios. al dar clic sobre el primero me pasa directo hacia la otra pag. yo le agregue un linkbutton al grid para que me hiciera esto pero si doy clic en el no se ejecuta su evento, pasa directo al del «SelectedIndexChanged». de que forma podria hacer esto? no se si me explique bien. gracias de antemano.

noe

Hola, funciona perfecto. Pero manda un error al tener dos gridview. Que se puede hacer en ese caso?