none
DataGridView crear columna en tiempo de ejecucion e insertar datos

    Pregunta

  • Buenas. Tengo un datagridview que enlazo a una bd y mi idea es crear una columna del tipo linklabel (linkcolumn) y que en cada una de las filas diga lo mismo ("mostrar") y al darle click se muestre el reporte de la fila dada. 
    Es todo relativamente sencillo solo que tengo un problema... no puedo insertar el valor "mostrar".
    Estoy haciendo

    dim col as new datagridviewlinkcolumn
    col.name="Ver"
    dgv.columns.add(col)
    dgv.column("Ver").displayindex=1  --- asi la veo en segundo orden

    hasta aca todo bien porque la columna aparece. Ahora al intentar poner valores

    dim r as datagridviewrow
    for each r in dgv.rows
           r.cells.item("Ver").value="Mostrar"
    next


    esto no funciona. Tambien probe con el index (en este caso 10 -- r.cells.item(10).value="Mostrar") y no funciona.
    Lo curioso es que si cambio el codigo y por ejemplo pongo r.cells.item(9).value="Mostrar" la columna de indice 9 efectivamente cambia todos sus valores por la palabra "mostrar".
    tambien he probado haciendola una "sencilla" datagridviewtextboxcolumn y no funciona
    Asi que evidentemente no esta fallando el codigo sino mas bien algo en mi logica

    Cualquier ayuda se agradecera

    domingo, 6 de noviembre de 2016 1:17

Respuestas

  • Hola:
    En un Form con 1 DGV, copia y pega el siguiente código

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

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As 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, 'Mostrar' As VER 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
            'QUITAR columna para el LINK LABEL
            DataGridView1.Columns.Remove("VER")
            'AÑADIR columna LINK LABEL
            lP_AddLinkColumn()
        End Sub

        Private Sub lP_AddLinkColumn()
            Dim links As New DataGridViewLinkColumn()
            With links
                .HeaderText = "VER"
                .DataPropertyName = "VER"
                .ActiveLinkColor = Color.Yellow
                .LinkBehavior = LinkBehavior.SystemDefault
                .LinkColor = Color.Blue
                .TrackVisitedState = True
                .VisitedLinkColor = Color.Violet
            End With
            DataGridView1.Columns.Add(links)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Omar1316 martes, 8 de noviembre de 2016 2:26
    domingo, 6 de noviembre de 2016 10:38

Todas las respuestas

  • Hola:
    En un Form con 1 DGV, copia y pega el siguiente código

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

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As 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, 'Mostrar' As VER 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
            'QUITAR columna para el LINK LABEL
            DataGridView1.Columns.Remove("VER")
            'AÑADIR columna LINK LABEL
            lP_AddLinkColumn()
        End Sub

        Private Sub lP_AddLinkColumn()
            Dim links As New DataGridViewLinkColumn()
            With links
                .HeaderText = "VER"
                .DataPropertyName = "VER"
                .ActiveLinkColor = Color.Yellow
                .LinkBehavior = LinkBehavior.SystemDefault
                .LinkColor = Color.Blue
                .TrackVisitedState = True
                .VisitedLinkColor = Color.Violet
            End With
            DataGridView1.Columns.Add(links)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Omar1316 martes, 8 de noviembre de 2016 2:26
    domingo, 6 de noviembre de 2016 10:38
  • Bueno.
    Muchas gracias, no reutilice todo el codigo. Simplemente agregue a mi consulta sql la columna con el valor dado, la elimine desde vb y cree otra nueva con todos los parametros y eso basto...
    Muchas gracias.
    martes, 8 de noviembre de 2016 2:26
  • Hola:

    Mi respuesta es un ejemplo para que lo visualices; luego lo tienes que adaptar a tus necesidades

    Un saludo desde Bilbo
    Carlos
    martes, 8 de noviembre de 2016 23:25