none
Ayuda código en tabla y datagrid bindeado. RRS feed

  • Pregunta

  • Hola a todos, las siguientes líneas de código consiguen que cuando haya un cambio o mensaje nuevo en el servidor, me actualice mi datagridview, y funciona bien.

    Pero me gustaría que este mismo código utilizara mi dataset y datatable que tengo ya en funcionamiento y con mi datagridview que tengo bindeado al datatable:

    Es decir, me gustaría que usara el tableadapter: MensajesTableAdapter

    el dataset: Me.ConexionesBDDataSet

    y la tabla: Mensajes

    ya que el datagridview lo tengo Bindeado y tengo creadas las consultas.

    Por lo que el llenado de datos me gustaría hacerlo de este modo:

                Me.MensajesTableAdapter.Fill(Me.ConexionesBDDataSet.Mensajes)

    Como veréis, en las siguientes líneas se hace una llamada al método GetData que vuelve a crear un dataset y datatable.

    ¿Alguien me puede indicar como usar el siguiente código con el tipo de datos que tengo ya existente?

    Public Class FormPrueba Private Delegate Sub UIcallback() Private changeCount As Integer Private ds As New DataSet Private connection As New SqlClient.SqlConnection

    Private Sub GetData() Try ds.Clear() connection.ConnectionString = "Data Source=SERVIDOR;(aquí iría la CADENA DE CONEXIÓN") Dim adapter As New SqlClient.SqlDataAdapter("SELECT Id, Fecha, Usuario, Unidad, Destinatario, Mensaje FROM dbo.Mensajes", connection) Dim dependency As New SqlClient.SqlDependency(adapter.SelectCommand) AddHandler dependency.OnChange, AddressOf Me.datachanged System.Data.SqlClient.SqlDependency.Start(connection.ConnectionString) adapter.Fill(ds, "Mensajes") Me.MensajesDataGridView.DataSource = ds Me.MensajesDataGridView.DataMember = "Mensajes" Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub

    Private Sub datachanged(ByVal sender As Object, ByVal e As SqlClient.SqlNotificationEventArgs) changeCount = +1 Me.Invoke(New UIcallback(AddressOf Me.ReBindOnUIThread)) End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click GetData() Me.Label1.Text = "No changes have occurred" changeCount = 0 End Sub

    Private Sub ReBindOnUIThread() Label1.Text = String.Format("{0} cambio se ha producido en base de datos.", changeCount) GetData() End Sub

    'Private Sub MensajesBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles MensajesBindingNavigatorSaveItem.Click ' Me.Validate() ' Me.MensajesBindingSource.EndEdit() ' Me.TableAdapterManager.UpdateAll(Me.ConexionesBDDataSet) 'End Sub Private Sub FormPrueba_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'TODO: esta línea de código carga datos en la tabla 'ConexionesBDDataSet.Mensajes' Puede moverla o quitarla según sea necesario. ' Me.MensajesTableAdapter.Fill(Me.ConexionesBDDataSet.Mensajes) End Sub

    Private Sub FormPrueba_FormClosed(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.FormClosedEventArgs) _ Handles MyBase.FormClosed System.Data.SqlClient.SqlDependency.Stop(connection.ConnectionString) If connection IsNot Nothing Then connection.Close() End If End Sub End Class

    Se agradecería cualquier observación, recomendación y detalle para mejorar dicho código.

    Muchas gracias por anticipado.

    • Cambiado Enrique M. Montejo miércoles, 30 de noviembre de 2016 8:31 Pregunta relacionada con el acceso a datos con SQL Server.
    domingo, 27 de noviembre de 2016 12:34