es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Detectando el evento de cambio de tabla de datos en VB.

El objetivo de esta pregunta es crear un bloque de código que se ejecute cuando un datatable ha cambiado su contenido (solo el hecho de que ha cambiado, no la fila o columna específica). Esto es en VB Winforms NET.

Esto funciona:

Public Class Form1

Sub testhandler()
    Dim locallyDeclaredDT as new datatable
    AddHandler locallyDeclaredDT.ColumnChanged, New DataColumnChangeEventHandler(AddressOf Column_Changed)
End Sub

Private Shared Sub Column_Changed(sender As Object, e As DataColumnChangeEventArgs)
    MessageBox.Show("La tabla ha cambiado")
End Sub

End Class

Pero necesito un datatable que sea accesible fuera del alcance de los sub entonces intento esto, lo cual no funciona.

Public Class Form1

Dim globallyDeclaredDT as new datatable

Sub testhandler()
    AddHandler globallyDeclaredDT.ColumnChanged, New DataColumnChangeEventHandler(AddressOf Column_Changed)
End Sub

Private Shared Sub Column_Changed(sender As Object, e As DataColumnChangeEventArgs)
    MessageBox.Show("La tabla ha cambiado")
End Sub

End Class

El problema es causado por la línea AddHandler: la propiedad ColumnChanged está subrayada y el error es

‘ColumnChanged’ no es un evento de ‘Object’.

¿Cómo puedo solucionar esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que globallyDeclaredDT no es del tipo DataTable, por lo que el evento ColumnChanged no está disponible. Para solucionarlo, debe declarar globallyDeclaredDT como un DataTable:

    Public Class Form1
    
    <pre><code>Dim globallyDeclaredDT como DataTable
    
    Sub testhandler()
        AddHandler globallyDeclaredDT.ColumnChanged, New DataColumnChangeEventHandler(AddressOf Column_Changed)
    End Sub
    
    Private Shared Sub Column_Changed(sender As Object, e As DataColumnChangeEventArgs)
        MessageBox.Show("La tabla ha cambiado")
    End Sub
    </code></pre>
    
    End Class
    

Comments are closed.