none
Actualizar la visualización de un ComoboBox con BindingSource cuando actualizo el BindingSource RRS feed

  • Pregunta

  • Hola,

    Os planteo la siguiente pregunta:

    Tengo un dataset con dos tablas relacionadas uno-a-ene.

    Uso dos controles BindingSource, llamémoslos padreBindingSource e hijoBindingSource.

    Además de estos controles, tengo varios textboxes que están vinculados con campos de la tabla hijo; y un ComboBox que tiene como DataSource el padreBindingSource, el DisplayMember y el ValueMember son campos de la tabla padre. El SelectedValue está asociado con un campo de la tabla hijo que actúa como clave foránea.

    Si manipulo los datos desde el formulario, se actualizan correctamente, pero cuando asigno por código un valor al campo clave foránea este campo no se refleja en la visualización.

    La pregunta es si existe alguna forma de que el combobox se refresque para mostrar el nuevo valor del campo vinculado, o si tengo que cambiar el SelectedItem por código.

    Estoy casi seguro que se puede hacer automáticamente porque lo he hecho con ObjectDataSource, la diferencia es que los objetos que tenía en el ObjectDataSource implementaban INotifyPropertyChange mientras que el dataset no (que yo sepa) y por lo tanto no se notifica al combobox para que se actualice.

    Saludos y gracias!!

     


    Si la respuesta te ha servido, márcala como útil.
    martes, 17 de enero de 2012 14:38

Todas las respuestas

  • nbo se si me equivoco pero creo que con BindingSource.EndEdit solventarías el problema que tienes

     

    Suerte.


    Elmer Carías
    martes, 17 de enero de 2012 22:28
  • Gracias Elmer.

    EndEdit traslada los cambios al origen de datos. El origen de datos del BindingSource es un Datatable en un Dataset (fuertemente tipado). El caso es que yo actualizo los datos en el dataset asignando valores a campos del datatable directamente, y quiero propagar los cambios al bindingsource y al control que está asociado (bound) al bindingsource. Es exactamente lo contrario a lo que hace EndEdit.

    Saludos,

     

    Y.


    Si la respuesta te ha servido, márcala como útil.
    viernes, 20 de enero de 2012 11:20
  • Hoy si ya entendi que sucede, pero se me hace extraño ya que hice una prueba para reproducir tu problema y me funciona bien.

    Primero agregue dos TableAdapters tabla Categoria y SubCategoria, cree un formulario y arrastre del origen de datos la tabla SubCategoria para que me creara el BindingNavigator, BindingSource, DataSet, TableAdapter y TableAdapterManager en vista de detalle, elegi que utilizará un ComboBox para mostrar la categoria, le asigne a ese combobox un datasource haciendo referencia a un bindingsource de categoria y posteriormente lo configura para que quedara de la siguiente manera:

            Me.IdCategoriaComboBox.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.SubCategoriaBindingSource, "idCategoria", True))
            Me.IdCategoriaComboBox.DataSource = Me.CategoriaBindingSource
            Me.IdCategoriaComboBox.DisplayMember = "nombreCategoria"
            Me.IdCategoriaComboBox.FormattingEnabled = True
            Me.IdCategoriaComboBox.Location = New System.Drawing.Point(142, 57)
            Me.IdCategoriaComboBox.Name = "IdCategoriaComboBox"
            Me.IdCategoriaComboBox.Size = New System.Drawing.Size(121, 21)
            Me.IdCategoriaComboBox.TabIndex = 2
            Me.IdCategoriaComboBox.ValueMember = "idCategoria"

    Posteriormente cree un boton que en tiempo de ejecución modifica un valor de idCategoria de la tabla SubCategoria y automaticamente se refresco el combobox sin cambiarlo directamente.

    Sería de ver tu código para poder ayudarte, ya que con el ejemplo que yo hice me funciono todo bien.

     


    Elmer Carías
    viernes, 20 de enero de 2012 16:49
  • Muchas gracias Elmer, voy a tratar de aislar el caso del resto de la implementación y a probar lo que propones. A mi también me suena haberlo hecho antes, por eso me pareció raro que no me funcionara.

    Saludos,

     

    Y.


    Si la respuesta te ha servido, márcala como útil.
    martes, 24 de enero de 2012 17:42