none
Obtener El Valor De Una Celda Seleccionada De Un Datagridview Y Mandarlo A Un Textbox RRS feed

  • Pregunta

  • Hola, necesito ayuda para resolver el siguiente problema:

    Tengo un Datagridview y quiero obtener el valor de una celda seleccionada en tiempo de ejecucion de un Datagridview y luego pasarlo a un Textbox.

    hasta ahora me han pasado el siguiente codigo:

    Dim Variable As String = DataGridView1.Item(1, DataGridView1.CurrentRow.Index).Value

    'Es la columna de la celda del valor a enviar

    Current.index es la columna seleccionada.

    Les doy las gracias por adelantado.........

    • Editado Javi Osoleb jueves, 1 de julio de 2010 16:58 Una modificacion en el codigo
    jueves, 1 de julio de 2010 16:46

Respuestas

  • hola

    podrias usar

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells("nombrecolumna").Value)

     

    o puedes usar el indice de las columnas si es que estas se generan dinamicamente

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells(0).Value)

    en este caso la primer columna

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 1 de julio de 2010 17:03
  • Hola:
    Prueba esto

        Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
             MessageBox.Show("Has pulsado la FILA: " & e.RowIndex.ToString & " COLUMNA: " & e.ColumnIndex.ToString & " VALOR: " Me.DataGridView1.CurrentCell.Value.ToString)
        End Sub
       
    Un saludo desde Bilbo
    Carlos

    viernes, 19 de octubre de 2012 7:36
  • Hola:
    Proyecto con 2 Form
    En Form1 con 1 DataGridView, copia y pega el siguiente codigo.

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim lDataAdapter As New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", loConexion)
                    Dim lDataTable As New DataTable
                    lDataAdapter.Fill(lDataTable)
                    Me.DataGridView1.DataSource = lDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

        End Sub

        Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            If e.RowIndex = -1 Then
                Return
            End If
            Dim loFila As DataGridViewRow = Me.DataGridView1.CurrentRow()
            Using loForm As New Form2
                loForm.Fila = loFila
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    En Form2 con 2 TextBox.

    Public Class Form2
        Private mFila As DataGridViewRow

        Public Property Fila() As DataGridViewRow
            Get
                Return mFila
            End Get
            Set(ByVal value As DataGridViewRow)
                mFila = value
            End Set
        End Property

        Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.TextBox1.Text = mFila.Cells("CustomerID").Value.ToString
            Me.TextBox2.Text = mFila.Cells("CompanyName").Value.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    martes, 14 de agosto de 2012 7:47

Todas las respuestas

  • hola

    podrias usar

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells("nombrecolumna").Value)

     

    o puedes usar el indice de las columnas si es que estas se generan dinamicamente

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells(0).Value)

    en este caso la primer columna

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 1 de julio de 2010 17:03
  • hola

    podrias usar

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells("nombrecolumna").Value)

     

    o puedes usar el indice de las columnas si es que estas se generan dinamicamente

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells(0).Value)

    en este caso la primer columna

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Hola, nada más quiero agradecer a Leandro por ese pedacito de código que me fue muy útil y difícil de encontrar para pasar el contenido de una fila de un DataGridView a distintos campos de un objeto para pasarlo en capaz y dar persistencia a los datos. Muchas gracias por tu MÁS QUE ÚTIL colaboración
    miércoles, 23 de febrero de 2011 16:55
  • Hola! :D Buenas noches! mira la verdad es la primera vez que pregunto algo por aqui =/ he consultado muchas de las respuestas que das y la verdad son muy buenas,  en esta ocasion me gustaria me ayudes =/ tengo el siguiente problema :
    En un Formulario tengo 4 textbox, 3 botones y un datagridview, primeramente dentro de los textbox escribo en alguno de ellos por ejemplo algun dato a consultar y de esa manera se conecta a la base de datos sqlserver mandando el resultado al DGV el problema es que al dar click en una celda del datagridview los datos de la fila en la que esta esa celda los envia a varios textbox alojados en otro formulario usando este codigo

          If IsDBNull(DataGridView1.Rows(e.RowIndex).Cells(0).Value) Then

                Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value() = ""

                C_U_F_E_2008.TXT_ID.Text CStr(Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value())

            Else

                C_U_F_E_2008.TXT_ID.Text CStr(Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value())

            End If

    Utilizando ese codigo puedo pasar los datos a los respectivos textbox sin problema, aun cuando esten vacios, PERO jeje todo esta bien hasta que despues de haber repetido mas de 30 veces este codigo y ejecuto el programa me bota el siguiente error :

    "El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.
    Nombre del parámetro: index"

    La verdad estoy muy desesperado pues necesito entregar este trabajo para las 5 de la tarde de hoy =/ podrias ayudarme? espero haber sido claro =( Muchas gracias por adelantado!! :D

    martes, 14 de agosto de 2012 6:16
  • Hola:
    Proyecto con 2 Form
    En Form1 con 1 DataGridView, copia y pega el siguiente codigo.

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim lDataAdapter As New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", loConexion)
                    Dim lDataTable As New DataTable
                    lDataAdapter.Fill(lDataTable)
                    Me.DataGridView1.DataSource = lDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

        End Sub

        Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            If e.RowIndex = -1 Then
                Return
            End If
            Dim loFila As DataGridViewRow = Me.DataGridView1.CurrentRow()
            Using loForm As New Form2
                loForm.Fila = loFila
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    En Form2 con 2 TextBox.

    Public Class Form2
        Private mFila As DataGridViewRow

        Public Property Fila() As DataGridViewRow
            Get
                Return mFila
            End Get
            Set(ByVal value As DataGridViewRow)
                mFila = value
            End Set
        End Property

        Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.TextBox1.Text = mFila.Cells("CustomerID").Value.ToString
            Me.TextBox2.Text = mFila.Cells("CompanyName").Value.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    martes, 14 de agosto de 2012 7:47
  • Hola:
    Proyecto con 2 Form
    En Form1 con 1 DataGridView, copia y pega el siguiente codigo.

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim lDataAdapter As New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", loConexion)
                    Dim lDataTable As New DataTable
                    lDataAdapter.Fill(lDataTable)
                    Me.DataGridView1.DataSource = lDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

        End Sub

        Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            If e.RowIndex = -1 Then
                Return
            End If
            Dim loFila As DataGridViewRow = Me.DataGridView1.CurrentRow()
            Using loForm As New Form2
                loForm.Fila = loFila
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    En Form2 con 2 TextBox.

    Public Class Form2
        Private mFila As DataGridViewRow

        Public Property Fila() As DataGridViewRow
            Get
                Return mFila
            End Get
            Set(ByVal value As DataGridViewRow)
                mFila = value
            End Set
        End Property

        Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.TextBox1.Text = mFila.Cells("CustomerID").Value.ToString
            Me.TextBox2.Text = mFila.Cells("CompanyName").Value.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    Muchisimas Gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Funciono perfectamente!!!!!!!!!!!!!!!!!!!!!!!!!! en serio que estaba desesperado, no habia encontrado quien pudiese ayduarme!!!!!!!!!!!!!!!!!!!! jaja Por mi parte mejor respuesta no pude haber encontrado ;D Gracias una vez mas!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :D :D :D

    martes, 14 de agosto de 2012 16:10
  • Hola Leandro buen dia...

    he visto que tienes mucha experiencia en esto y quisiera ver si me puedes ayudar...

    tengo una pequeña aplicación en donde tengo un datagridview con 7 columnas y quisiera poder hacer doble clic a una celda y saber a que celda le hice clic, esto para saber si le hice clic a la primer celda que debe contener los datos de la columna CLAVE o si le hice clic a la segunda que seria DESCRIPCION o a la de PRECIO...

    no si me explique bien pero espero me puedas ayudar.

    gracais.

    miércoles, 17 de octubre de 2012 21:47
  • hola

    podrias usar

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells("nombrecolumna").Value)

    o puedes usar el indice de las columnas si es que estas se generan dinamicamente

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells(0).Value)

    en este caso la primer columna

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Hola Leandro buen dia...

    he visto que tienes mucha experiencia en esto y quisiera ver si me puedes ayudar...

    tengo una pequeña aplicación en donde tengo un datagridview con 7 columnas y quisiera poder hacer doble clic a una celda y saber a que celda le hice clic, esto para saber si le hice clic a la primer celda que debe contener los datos de la columna CLAVE o si le hice clic a la segunda que seria DESCRIPCION o a la de PRECIO...

    no si me explique bien pero espero me puedas ayudar.

    gracais.

    miércoles, 17 de octubre de 2012 22:01
  • Hola:
    Prueba esto

        Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            MessageBox.Show("Has pulsado la columna: " & e.ColumnIndex.ToString)
        End Sub
       
    Un saludo desde Bilbo
    Carlos

    jueves, 18 de octubre de 2012 7:36
  • Hola:
    Prueba esto

        Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            MessageBox.Show("Has pulsado la columna: " & e.ColumnIndex.ToString)
        End Sub
       
    Un saludo desde Bilbo
    Carlos

    Hola Carlos...

    Gracias por la respuesta pero no es exactamente lo que necesito saber, es decir, necesito saber exactamente a que celda le estoy haciendo doble clic, no el nombre de la columna a la que le hice clic.

    ejemplo:

    | CLAVE | DESCRIPCION | PRECIO | DESCUENTO | IMPUESTO |

    [ dato1 | Descripcion1    | 100.00  | 0                 |  16%         ]

    [ dato2 | Descripcion2    | 150.00  | 0                 |  16%         ]

    supongamos que yo hago doble clic en descripcion2.

    en codigo quisiera saber a que celda le hice click. osea que sepa que le hice doble clic a la celda 2 de la fila 2. para de esa forma poder comprovar si esa celda tiene datos o no, o poder extraer esos datos que pueden estar incompletos y completarlos para insertarlos nuevamente en esa celda, o para poder leer ciertos datos de ese datagridview e insertarlos en una base de datos.

    de antemano, gracias por la ayuda.

    y te envio un grán saludo desde México.

    jueves, 18 de octubre de 2012 17:52
  • Hola:
    Prueba esto

        Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
             MessageBox.Show("Has pulsado la FILA: " & e.RowIndex.ToString & " COLUMNA: " & e.ColumnIndex.ToString & " VALOR: " Me.DataGridView1.CurrentCell.Value.ToString)
        End Sub
       
    Un saludo desde Bilbo
    Carlos

    viernes, 19 de octubre de 2012 7:36
  • Muchísimas gracias Leandro!!!

    Yo utilicé:

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    TextBox1.Text = CStr(row.Cells(0).Value)

    y me funcionó perfectamente

    Rodrigo.

    jueves, 7 de agosto de 2014 12:34
  • excelente funciono altiro :)

    gracias

    jueves, 8 de octubre de 2015 14:48
  • Me sirvio tu respuesta es sensilla.

    Gracias

    jueves, 3 de noviembre de 2016 21:44