¿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.

Suscribir
Notificar a
guest
7 Comentarios
Comentarios en línea
Ver todos los comentarios
Carmen Yuliet

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

    Private Sub TuFuncion()
        Try
            Dim conexSql As SqlConnection
            Dim Numero_Oficio_Enviado As Label = CType(GridViewEntrega.SelectedRow.Cells(0).FindControl("LblNumero_Oficio"), Label)
            Dim Fecha_Respuesta_Area_Solicitamos As TextBox = CType(GridViewEntrega.SelectedRow.Cells(0).FindControl("CajaF_Of_Recepcion"), TextBox)
            Dim No_Oficio_Respuesta_Area_Solicitamos As TextBox = (GridViewEntrega.SelectedRow.Cells(0).FindControl("No_Oficio_Respuesta_Area_Solicitamos"))
            Dim Id_Oficios As Label = CType(GridViewEntrega.SelectedRow.Cells(0).FindControl("LblId_Oficios"), Label)
            'Dim FechaConvertida As DateTime
 
            Dim strConnString As String = ConfigurationManager.ConnectionStrings("stringCnn").ConnectionString
            conexSql = New SqlConnection(strConnString)
            Dim cmd As New SqlCommand()
            cmd.CommandText = "Ingresar_Respuesta_CS"
            cmd.CommandType = System.Data.CommandType.StoredProcedure
            cmd.Connection = conexSql
            cmd.Parameters.Add("@Numero_Oficio_Enviado", System.Data.SqlDbType.VarChar, 13).Value = Numero_Oficio_Enviado.Text
            cmd.Parameters.Add("@Fecha_Respuesta_Area_Solicitamos", System.Data.SqlDbType.VarChar, 10).Value = Fecha_Respuesta_Area_Solicitamos.ToString
            'cmd.Parameters.Add("@Fecha_Respuesta_Area_Solicitamos", System.Data.SqlDbType.VarChar, 10).Value = "'CONVERT(DATETIME,'" & Fecha_Respuesta_Area_Solicitamos.ToString & ("dd-MM-yyyy") + "',102)"
            cmd.Parameters.Add("@Id_Oficios", System.Data.SqlDbType.VarChar, 10).Value = Id_Oficios.Text
            cmd.Parameters.Add("@No_Oficio_Respuesta_Area_Solicitamos", System.Data.SqlDbType.VarChar, 10).Value = No_Oficio_Respuesta_Area_Solicitamos.Text
            cmd.Parameters.Add("@Usuario_Area_Captura_Respuesta", System.Data.SqlDbType.VarChar, 10).Value = Session("Usuario")
            cmd.Parameters.Add("@Usuario_Recibe_control_Respuesta", System.Data.SqlDbType.VarChar, 10).Value = Session("Usuario")
 
            conexSql.Open()
            cmd.ExecuteNonQuery()
            conexSql.Close()
            MsgBox("Se Actualizaron los Oficios con ese mismo numero de caso", 64, " Mensaje de información")
            Call CargaGridView()
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub
HermiloMartinez

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.

Diego V

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?

Diego V

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