none
DataGridViewLinkColumn o DataGridViewButtonColu como codifico dentro de alguno de estos dos elementos RRS feed

  • Pregunta

  • Tengo una columna en mi datagridview que se llama modificar que bien la puedo manejar como link o boton lo unico que necesito es que al darle clic en alguno de estos me mande a otro formulario, eh intentado hacerlo dentro del datagridview pero me marca error a la hora que pongo el codigo de enlazar al otro formulario.
    lunes, 17 de noviembre de 2014 17:59

Respuestas

  • Hola:
    En un Form con 1 DataGridView, copia y pega el siguiente codigo.

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

    Public Class FrmBoton

        Private Sub FrmBoton_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Dim lsCadConexion As String = "Data Source=.\SQLEXPRESS;Initial Catalog=NorthWind;Integrated Security=True"
                Dim lsQuery As String = "Select EMPLOYEEID, FIRSTNAME, LASTNAME From EMPLOYEES"
                Using loConexion As New SqlConnection(lsCadConexion)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    Dim loDataTable As New DataTable
                    loDataAdapter.Fill(loDataTable)
                    '
                    Me.DataGridView1.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            'AÑADIR columna boton
            lP_AddButtonColumn()
        End Sub

        Private Sub lP_AddButtonColumn()
            Dim buttons As New DataGridViewButtonColumn()
            With buttons
                .HeaderText = "Nombre"
                .Text = "Empleado"
                .UseColumnTextForButtonValue = True
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                .FlatStyle = FlatStyle.Standard
                .CellTemplate.Style.BackColor = Color.Honeydew
                .DisplayIndex = 0
            End With
            DataGridView1.Columns.Add(buttons)
        End Sub

        Private Sub lP_Empleado(ByVal buttonClick As DataGridViewCellEventArgs)
            Dim employeeId As String = DataGridView1.Rows(buttonClick.RowIndex).Cells(1).Value().ToString()
            MessageBox.Show("El empleado es: " & employeeId)
        End Sub

        Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            If lF_bEsBoton(e) Then
                lP_Empleado(e)
            End If
        End Sub

        Private Function lF_bEsBoton(ByVal cellEvent As DataGridViewCellEventArgs) As Boolean
            If TypeOf DataGridView1.Columns(cellEvent.ColumnIndex) Is DataGridViewButtonColumn AndAlso Not cellEvent.RowIndex = -1 Then
                Return True
            Else
                Return (False)
            End If
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Lau R martes, 18 de noviembre de 2014 19:27
    martes, 18 de noviembre de 2014 9:34
  • Hola Liza14,

    Lo que yo hago es capturar el evento CellContentClick del datagridview asi :

     

    'compruebo en que columna se hizo click para abrir el nuevo form

    If tudatagridview.Columns(e.ColumnIndex).Index = 2 Then Dim form2 As New tuform form2.Show() End If

    No se si es la mejor opción, pero a mi me a servido.

    Saludos desde Chile.

    • Marcado como respuesta Lau R martes, 18 de noviembre de 2014 19:27
    martes, 18 de noviembre de 2014 13:42

Todas las respuestas

  • Hola:
    En un Form con 1 DataGridView, copia y pega el siguiente codigo.

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

    Public Class FrmBoton

        Private Sub FrmBoton_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Dim lsCadConexion As String = "Data Source=.\SQLEXPRESS;Initial Catalog=NorthWind;Integrated Security=True"
                Dim lsQuery As String = "Select EMPLOYEEID, FIRSTNAME, LASTNAME From EMPLOYEES"
                Using loConexion As New SqlConnection(lsCadConexion)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    Dim loDataTable As New DataTable
                    loDataAdapter.Fill(loDataTable)
                    '
                    Me.DataGridView1.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            'AÑADIR columna boton
            lP_AddButtonColumn()
        End Sub

        Private Sub lP_AddButtonColumn()
            Dim buttons As New DataGridViewButtonColumn()
            With buttons
                .HeaderText = "Nombre"
                .Text = "Empleado"
                .UseColumnTextForButtonValue = True
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                .FlatStyle = FlatStyle.Standard
                .CellTemplate.Style.BackColor = Color.Honeydew
                .DisplayIndex = 0
            End With
            DataGridView1.Columns.Add(buttons)
        End Sub

        Private Sub lP_Empleado(ByVal buttonClick As DataGridViewCellEventArgs)
            Dim employeeId As String = DataGridView1.Rows(buttonClick.RowIndex).Cells(1).Value().ToString()
            MessageBox.Show("El empleado es: " & employeeId)
        End Sub

        Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            If lF_bEsBoton(e) Then
                lP_Empleado(e)
            End If
        End Sub

        Private Function lF_bEsBoton(ByVal cellEvent As DataGridViewCellEventArgs) As Boolean
            If TypeOf DataGridView1.Columns(cellEvent.ColumnIndex) Is DataGridViewButtonColumn AndAlso Not cellEvent.RowIndex = -1 Then
                Return True
            Else
                Return (False)
            End If
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Lau R martes, 18 de noviembre de 2014 19:27
    martes, 18 de noviembre de 2014 9:34
  • Hola Liza14,

    Lo que yo hago es capturar el evento CellContentClick del datagridview asi :

     

    'compruebo en que columna se hizo click para abrir el nuevo form

    If tudatagridview.Columns(e.ColumnIndex).Index = 2 Then Dim form2 As New tuform form2.Show() End If

    No se si es la mejor opción, pero a mi me a servido.

    Saludos desde Chile.

    • Marcado como respuesta Lau R martes, 18 de noviembre de 2014 19:27
    martes, 18 de noviembre de 2014 13:42
  • Muchas gracias me sirvio mucho estuve 1 semana tratando de hacerlo. saludos desde mexico
    martes, 18 de noviembre de 2014 19:27