Inicio > ASPX, Sin categoría > [ASP.NET][GRIDVIEW] – COMO SELECCIONAR UNA FILA

[ASP.NET][GRIDVIEW] – COMO SELECCIONAR UNA FILA

 

Introducción

He visto en reiteradas oportunidad que una operación simple como es el caso de operar con una fila de un GridView se puede transformarse en algo complejo, mas que nada motivado por la distintas formas que hay para realizar esta acción.

En este articulo veremos las algunas formas de lograrlo y como difieren las técnicas que se puede aplicarse.

Temas que se tratar:

1- Seleccionar una Row

a- Definiendo un CommandField

b- Usando un ImageButton y CommandName

c- Usando el evento RowCommand

2-Uso de DataKeyNames y DataKeys

   a- DataKeyNames con campos Múltiples

Para todos los casos planteados partiremos del mismo gridview, el cual se ira modificando para agregarle opciones y ver los distintos temas.

 

1- Seleccionar una Row

Existen varias formas de realizar una misma tarea, pero veremos aquí las dos mas simples y directas que se suelen encontrar cuando se necesita seleccionar un registro en el control gridview.

1a- Definiendo un CommandField

Iremos realizando los paso de forma visual así se comprende como proceder, remarcando luego como impacta esto en el html del grid

El primer paso será editar las columnas del GridView hasta visualizar el cuadro con las opciones de CommandField disponibles.

Para este caso en particular se agregara solo la opción de selección. Mediante las flechas laterales se puede posicionar el comando. También se dispone de distintos tipos de representación visual, como ser un Link, Button o Image.

Para este caso usaremos un comando del tipo Image, por lo tanto se deberá definir la propiedad “SelectImageUrl”. Si se define del tipo Link y se quiere cambiar el texto, se usaría la propiedad “SelectText”.

El próximo paso será el de definir el evento de selección, para esto solo marcamos el gridview, y yendo a sus propiedades se podrá activar el evento SelectedIndexChanged

El html resultante debería tener resaltadas las siguiente características

Con estos pasos ya estamos listos para capturar la acción de selección del gridview.

 

1b – Usando un ImageButton y CommandName

En esta alternativa se hará uso de un TemplateField, se prodece de la misma forma del paso 1a, pero se agrega un item diferente

Una vez que esta el témplate, se adapta modificando directamente en el html, incluyendo de esta forma el control ImageButton.

Es muy importante remarcar que el ImageButton deberá tener la propiedad CommandName=”Select” para que esta ejecute el evento SelectedIndexChanged

A nivel de código de la pagina se encontrara la definición del evento

Hay que aclarar que en este caso se uso un ImageButton para corresponder con la acción del punto 1a, en donde se define una imagen, pero si se requiere de un link solo será cuestión de usar un LinkButton, definiendo en este el CommandName=”Select”, es justamente el CommandName quien define que evento será lanzado al presionarse.

 

1c- Usando el evento RowCommand

Seguramente a estas alturas se preguntaran que cantidad de formas de hacer lo mismo, asi es, y para completarlo una opción extra.

Resulta que al definir un ImageButton (o LinkButton) en un TemplateItem y usar el CommandName=”Select” se habilita un evento adicionar para poder capturar esta acción, si es que el SelectedIndexChanged no nos convence.

Se trata del evento RowCommand.

Hay un pequeño detalle con este evento y se trata de la definición del CommandArgument para determinar que fila lanza la acción.

[C#]

 

01.protected void gvPerson_RowCommand(object sender, GridViewCommandEventArgs e)
02.{
03.if (e.CommandName == "Select")
04.{
05.//
06.// Se obtiene indice de la row seleccionada
07.//
08.int index = Convert.ToInt32(e.CommandArgument);
09. 
10.//
11.// Obtengo el id de la entidad que se esta editando
12.// en este caso de la entidad Person
13.//
14.int id = Convert.ToInt32(gvPerson.DataKeys[index].Value);
15. 
16.}
17. 
18.}

 

[VB.NET]

01.Protected Sub gvPerson_RowCommand(sender As Object, e As GridViewCommandEventArgs)
02. 
03.If e.CommandName = "Select" Then
04.'
05.' Se obtiene indice de la row seleccionada
06.'
07.Dim index As Integer = Convert.ToInt32(e.CommandArgument)
08. 
09.'
10.' Obtengo el id de la entidad que se esta editando
11.' en este caso de la entidad Person
12.'
13. 
14.Dim id As Integer = Convert.ToInt32(gvPerson.DataKeys(index).Value)
15.End If
16. 
17.End Sub

En el ejemplo de la pagina WebForm4.aspx, se podrá probar como ambos eventos, tanto el RowCommand y el SelectedIndexChanged, pueden definirse, aunque lo normal es utilizar solo uno de estos.

 

2 – Uso de DataKeyNames y DataKeys

Una de las mejores técnicas usada para detectar que entidad se esta editando o seleccionado es por medio de id o código que esta tenga asignada, pero como logar hacerlo sin mostrar el identificador al usuario en una columna ?, es justamente el trabajo de estas dos propiedades que se consigue resolver el problema.

Si se presta atención al html este contaba con al definición de esta propiedad de nombre DataKeyNames

Solo debe definirse que campo del origen de datos identifica a la entidad que se esta trabajando.

Cuando se lance el evento solo será cuestión de tomar la row que ejecuta la acción, y de esta, por el índice recuperar el valor del id de la entidad, en este caso el PersonID.

[C#]

01.protected void gvPerson_SelectedIndexChanged(object sender, EventArgs e)
02.{
03.//
04.// Se obtiene la fila seleccionada del gridview
05.//
06.GridViewRow row = gvPerson.SelectedRow;
07. 
08.//
09.// Obtengo el id de la entidad que se esta editando
10.// en este caso de la entidad Person
11.//
12.int id = Convert.ToInt32(gvPerson.DataKeys[row.RowIndex].Value);
13. 
14. 
15.}

[VB.NET]

01.Protected Sub gvPerson_SelectedIndexChanged(sender As Object, e As EventArgs)
02.'
03.' Se obtiene la fila seleccionada del gridview
04.'
05.Dim row As GridViewRow = gvPerson.SelectedRow
06. 
07.'
08.' Obtengo el id de la entidad que se esta editando
09.' en este caso de la entidad Person
10.'
11.Dim id As Integer = Convert.ToInt32(gvPerson.DataKeys(row.RowIndex).Value)
12. 
13. 
14.End Sub

 

2a- DataKeyNames con campos Múltiples

En este ejemplo solo se utilizo un valor simple para identificar a la entidad, pero el CommandName puede definir mas de un campo de información.

Por ejemplo que sucede si se quiere enviar el PersonId y el Nombre, esto es tan solo un ejemplo para demostrar las funcionalidad, no tiene una aplicación práctica en este caso, ya que con solo el PersonID seria mas que suficiente.

Para definir el DataKeyNames en el grid es tan simple como separar los campos por una coma.

y en el código solo se toma el valor de la propiedad Values

[C#]

01.protected void gvPerson_SelectedIndexChanged(object sender, EventArgs e)
02.{
03.//
04.// Se obtiene la fila seleccionada del gridview
05.//
06.GridViewRow row = gvPerson.SelectedRow;
07. 
08.//
09.// Obtengo el id y el nombre  de la entidad que se esta editando
10.// en este caso de la entidad Person
11.//
12.int id = Convert.ToInt32(gvPerson.DataKeys[row.RowIndex].Values["PersonID"]);
13. 
14.string nombre = Convert.ToString(gvPerson.DataKeys[row.RowIndex].Values["FirstName"]);
15. 
16. 
17.}

[VB.NET]

01.Protected Sub gvPerson_SelectedIndexChanged(sender As Object, e As EventArgs)
02.'
03.' Se obtiene la fila seleccionada del gridview
04.'
05.Dim row As GridViewRow = gvPerson.SelectedRow
06. 
07.'
08.' Obtengo el id y el nombre  de la entidad que se esta editando
09.' en este caso de la entidad Person
10.'
11.Dim id As Integer = Convert.ToInt32(gvPerson.DataKeys(row.RowIndex).Values("PersonID"))
12. 
13.Dim nombre As String = Convert.ToString(gvPerson.DataKeys(row.RowIndex).Values("FirstName"))
14. 
15. 
16.End Sub

 

Anuncios
Categorías:ASPX, Sin categoría
  1. Milko Larrea Nina
    6 diciembre, 2013 en 16:51

    excelente… !! justo lo que buscaba

  2. Emerson
    14 enero, 2014 en 13:32

    Hola resulta que estoy haciendo una aplicación WEB y exporte en un archivo XML una consulta que tenia en un GridView pero no se si pueda modificar algunas lineas de ese documento las cuales no me sirven y no puedo importarlas por que me sale un error.

    La idea seria buscar una linea dentro del documento XML ya creado y reemplazarla por otra linea ¿pero no se si se pueda y tampoco se como?

    Si hay una forma de hacerlo desde el Visual Studio 2008 (VB.NET) por favor díganme como ya que no tengo ni idea.

    El archivo lo exporto de la siguiente manera, Escribo en la parte de arriba las siguientes librerías:

    Imports System.Xml.XmlWriter
    Imports System.Xml

    Luego declaro publico el DataTable así:
    Public tabla As New DataTable(“Documentos”)

    Y por ultimo exporto el DataTable asi:

    tabla.WriteXml(“E:\\XML\miarchivo.xml”, XmlWriteMode.WriteSchema)

    Pero necesito después de esto recorrer las lineas para reemplazar estas por otras para que me funcione.

    Muchísimas Gracias por todo y espero su ayuda por fa.

    • 29 mayo, 2014 en 22:39

      Discúlpame mi ausencia. ¿aun estas con esto?.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: