none
Refrescar informacion de combobox y textbox tras insertar en la base de datos RRS feed

  • Pregunta

  • Buenas,

    Tengo un formulario en el que hay un combobox y dos textbox. La idea es mostrar en el combobox los valores posibles cargados desde una base de datos, y en los textbox otros campos de ese registro.

    Ejemplo de tabla: Nombre - FechaInicio - FechaFin

    En el combo se cargarían todos los nombres, y en los textbox se muestran las fechas según el nombre seleccionado en el combo.

    Lo que quiero conseguir es que si introduzco un nuevo nombre en el combobox con sus fechas correspondientes en los textbox, al guardarlos la información de estos controles se actualice correctamente. Consigo que se guarden bien en la base de datos, sin embargo para que los controles se actualicen correctamente, tengo que cerrar el formulario y volverlo a abrir (o lo que es lo mismo, cargar de nuevo desde la base de datos). Lo que le ocurre a los controles es que el combobox muestra en cuanto grabo su primer valor, no el que acabo de grabar, mientras que los campos de fecha muestran el que acabo de grabar, y al seleccionar desde el combobox los valores que tiene cargados ya no se corresponden con los que muestran los textbox.

    Os adjunto el codigo, por si veis algo extraño. Llevo ya un par de días dándole vueltas a ésto, y la verdad que me parece poco elegante cerrar y volver a abrir el formulario para que funcione bien.

    Muchas gracias!!

    Private Sub FormTemporada_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

          'Propiedades del formulario
          Me.WindowState = FormWindowState.Maximized

          'Carga de datos
          Me.TemporadaTableAdapter.Fill(Me.TemporadaDS.Temporada)
          Me.CategoriaTableAdapter.Fill(Me.CategoriaDS.Categoria)

          'Carga de BindingSource
          With bsTemporada
             .DataSource = TemporadaDS
             .DataMember = "Temporada"
          End With

          'Carga de los controles
          With Me.DenominacionComboBox
             .DataSource = bsTemporada
             .DisplayMember = "Denominacion"
             .ValueMember = "Id"
          End With

          With Me.FechaInicioDateTimePicker
             .DataBindings.Add("value", bsTemporada, "fechainicio")
          End With

          With Me.FechaFinDateTimePicker
             .DataBindings.Add("value", bsTemporada, "fechafin")
          End With

    End Sub

     

    Private Sub cmdGuardarT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGuardarT.Click
          Dim datarow As TemporadaDS.TemporadaRow = Me.TemporadaDS.Temporada.NewRow()

          With DataRow
             .Denominacion = Me.DenominacionComboBox.Text
             .FechaInicio = Me.FechaInicioDateTimePicker.Value
             .FechaFin = Me.FechaFinDateTimePicker.Value
          End With

          Me.TemporadaDS.Temporada.AddTemporadaRow(DataRow)
          Me.TemporadaTableAdapter.Update(Me.TemporadaDS.Temporada)
       End Sub

    martes, 23 de marzo de 2010 22:57

Respuestas

  • Buenas,

    Dándole muchas vueltas, al final he descubierto lo que ocurría. Al hacer binding de ambos datetimepicker, cuando los modificaba, se modificaba también en el datatable interno, con lo cual después al seleccionar valores del combobox, me mostraba lo que había modificado.

    La solución pasa por añadir el parámetro DataSourceUpdateMode.Never al binding de ambos datetimepicker, así, si se modifican, no se afecta al datatable interno.

    La solución quedaría así:

          With Me.FechaInicioDateTimePicker
             .DataBindings.Add("value", bsTemporada, "fechainicio", true, DataSourceUpdateMode.Never)
          End With

          With Me.FechaFinDateTimePicker
             .DataBindings.Add("value", bsTemporada, "fechafin", true, DataSourceUpdateMode.Never)
          End With

    Gracias por las pistas encontradas en el resto de temas!!!

    • Marcado como respuesta squandrago miércoles, 24 de marzo de 2010 9:53
    miércoles, 24 de marzo de 2010 9:51