¿Cómo obtener el valor de cualquier celda de 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 el tema Seleccionar una fila en un Gridview ASP NET aprendimos a seleccionar filas en un control Gridview pero con cierta limitación al obtener únicamente el valor del DataKeyNames.
En esta sección aprenderemos de forma sencilla como obtener el valor de cualquier celda en la una fila seleccionada.
Utilizaremos el evento SelectedIndexChanged asumiendo siempre que ya tenemos somos capaces de marcar una fila como seleccionada.
Protected Sub GridViewOne_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridViewOne.SelectedIndexChanged Dim Celda As String = String.Empty Celda = Me.GridViewOne.SelectedRow.Cells(INDEX).Text End Sub |
En este ejemplo hemos usado el evento SelectedIndexChanged del control Gridview pero una vez que es seleccionada la fila podemos utilizar el çodigo en cualquier otro evento de cualquier otro control, por ejemplo, el evento clic de un boton.
Utilizando la propiedad SelectedRow obtenemos la fila seleccionada, basta simplemente con localizar la celda de la cual queremos obtener el valor haciendo uso del index de dicha celda.
Hay un detalle en este ejemplo, debemos tener el cuidado de no realizar cambios en las posiciones de las columnas pues haciendo eso se cambiaria nuestro index y hecharia a perder la programación.
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.
Hola, les pido de su ayuda por que tengo un problema con mi código al momento de obtener el valor de un TEXBOX que esta dentro de un GRID, el siguiente es mi código, pero manda vacio el Texbox, agradecería su ayuda
Un saludo Carmen, el posible error que noto en tu codigo esque estas buscando el control textbox en un index especifico de la columna de tu Gridview. Prueba usando:
Lo que hacemos con esto es buscar en todo la fila seleccionada en vez de buscar en una columna especifica con Cells(0), comenta si te sirvio
Muchas gracias por el articulo! Me has sacado de un apuro enorme ya que probaba muchos ejemplos de codigo y ninguno funcionaba hasta que probe este! Muchas gracias!
Saludos.
Un placer ayudarte, saludos.
Una consulta, tengo el mismo problema, el valor que quiero sacar es de un gridview que esta en memoria no es tabla. Es la misma solución?
For Each row As GridViewRow In dgDetalleCobranza.Rows
Dim cmd As New SqlCommand(“INSERT Into DetalleRegCobranzas (NroRegCobranza,NroRecibo,CodCliente,Cliente,MontoEfBs,MontoEfUs,MontoChBs,MontoChUs,MontoOpBs,MontoOpUs,Moneda,Tipocambio,TipoCobro,NroCheque,BancoCheque,NroOp,BancoOp,NroCuenta,Zona,FechaDeposito,MontoRecibo) VALUES(@nroregcobrz,@recibo,@codcliente,@cliente,@montoEfBs,@montoEfUs,@montoChBs,@montoChUs,@montoOpBs,@montoOpUs,@moneda,@tipocambio,@tipoCobro,@cheque,@bancocheque,@op,@bancoop,@cuenta,@zona,@fechaDep,@montoRec)”, conex.Conectar)
cmd.Parameters.Add(“@nroregcobrz”, SqlDbType.Int).Value = txtNroReg.Text
valor = row.Cells(0).Text
cmd.Parameters.AddWithValue(“@recibo”, Convert.ToString(row.Cells(0).Text))
Dim valor = dgDetalleCobranza.Rows.FindControl(“CajaF_Of_Recepcion”).TextBox)
cmd.Parameters.AddWithValue(“@codcliente”, Convert.ToString(row.Cells(1).Text))
cmd.Parameters.AddWithValue(“@cliente”, Convert.ToString(row.Cells(2).Text))
cmd.Parameters.AddWithValue(“@montoEfBs”, Convert.ToString(row.Cells(3).Text))
cmd.Parameters.AddWithValue(“@montoEfUs”, Convert.ToString(row.Cells(4).Text))
cmd.Parameters.AddWithValue(“@montoChBs”, Convert.ToString(row.Cells(5).Text))
cmd.Parameters.AddWithValue(“@montoChUs”, Convert.ToString(row.Cells(6).Text))
cmd.Parameters.AddWithValue(“@montoOpBs”, Convert.ToString(row.Cells(7).Text))
cmd.Parameters.AddWithValue(“@montoOpUs”, Convert.ToString(row.Cells(8).Text))
cmd.Parameters.AddWithValue(“@moneda”, Convert.ToString(row.Cells(9).Text))
cmd.Parameters.AddWithValue(“@tipocambio”, Convert.ToString(row.Cells(10).Text))
cmd.Parameters.AddWithValue(“@cheque”, Convert.ToString(row.Cells(11).Text))
cmd.Parameters.AddWithValue(“@bancocheque”, Convert.ToString(row.Cells(12).Text))
cmd.Parameters.AddWithValue(“@op”, Convert.ToString(row.Cells(13).Text))
cmd.Parameters.AddWithValue(“@bancoop”, Convert.ToString(row.Cells(14).Text))
cmd.Parameters.AddWithValue(“@cuenta”, Convert.ToString(row.Cells(15).Text))
cmd.Parameters.AddWithValue(“@zona”, Convert.ToString(row.Cells(16).Text))
cmd.Parameters.AddWithValue(“@fechaDep”, Convert.ToString(row.Cells(17).Text))
cmd.Parameters.AddWithValue(“@montoRec”, Convert.ToString(row.Cells(18).Text))
cmd.Parameters.AddWithValue(“@tipoCobro”, Convert.ToString(row.Cells(19).Text))
cmd.ExecuteNonQuery()
Next
Hola Diego, puedes comentarme si estas haciendo uso de Ajax o directamente haces postback del formulario.