none
Insertar datos de tabla en combobox RRS feed

  • Pregunta

  • Hola a todos:

    Una pregunta sobre algo que debe ser muy simple, pero que no encuentro la manera de solucionar (es lo que tiene llevar menos de una semana con el Visual Studio 2010)

    A ver: tengo tres tablas creadas con sus correspondientes relaciones, de manera que a través de tres submenús en un formulario principal accedo a los formularios correspondientes para modificar sus datos, y funciona perfectamente. El problema me viene al incluir un combobox en el formulario principal que quiero que recoja los registros de uno de los campos de una de las tablas. Los datos se actualizan en la tabla, pero no el combobox... de hecho, para probar, he incluido en el formulario principal el bindinsource de la tabla en cuestión y al introducir un nuevo registro en la tabla a través de su formulario, después de guardar y cerrarlo, el bindinsource se queda igual, no se entera de los cambios y, claro, el combobox tampoco... al cerrar y abrir el programa, ya sí se actualiza

    No sé si me he explicado bien... muchas gracias de antemano
    Jose

     

     

    lunes, 18 de julio de 2011 21:52

Respuestas

  • Buenas de nuevo, Leandro,

    Ya funciona perfectamente lo que quería... ahora solo me queda "digerir" y asimilar el código para que me sirva para otras aplicaciones.

    Si no es mucho abusar, quisiera preguntarte otra duda:

    Una de las tablas que he creado se llama "Fichas", debiendo almacenarse de alguna manera la imagen correspondiente. En la tabla "Fichas" he creado un campo llamado "ImagenFicha" de tipo "image" y en el formulario correspondiente un botón de búsqueda para seleccionar la imagen, funcionando bien al ejecutar la aplicación. Ahora bien, los problemas que tengo son los siguientes:

      - En la tabla "Fichas", quisiera grabar por defecto 6 registros de fichas (posteriomente el usuario podría incluir más), pero no sé cómo incluir la imagen en la vista "Mostrar datos de tabla"... las imágenes las seleccionaría de las disponibles en "Resources"

      - En el formulario principal, al seleccionar un equipo en el combobox que me has ayudado a resolver, quisiera que en un "PictureBox" se actualizara la imagen de la ficha correspondiente al equipo seleccionado (tengo una relación creada entre las tablas "Equipos" y "Fichas" de manera que un equipo tiene una ficha asignada)... he probado con una consulta, pero no las controlo lo suficiente en VisualStudio

    Gracias una vez más, ya solo por lo que me has ayudado

    Jose

    • Marcado como respuesta jmbegara sábado, 15 de octubre de 2011 21:54
    viernes, 22 de julio de 2011 15:27

Todas las respuestas

  • claro porque no es magico, no se actualiza solo tu debes poner el codigo que recargue el Bindingsource con la nueva informacion cuando hay un cambio

    debes comunicar los formulario

     

     Comunicar formularios de forma desacoplada

    y desde uno enviar el inform al padre para que se actualice, o se alance la query que recarga los datos del combo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 18 de julio de 2011 22:04
  • Buenas tardes, Leandro

       En primer lugar, gracias por responder. El tema es que no estoy muy familiarizado con el código que utilizas en el ejemplo, ya que me parece lioso, fruto de mi inexperiencia (yo otras veces, para cambiar el control de texto de otro formulario lo he hecho simplemente como form2.textbox.text="text" desde el formulario en que me encuentre, pero claro, supongo que eso en determinadas circunstacias dará problemas). El caso es, ¿cuál es el método exacto para "recargar" el Bindingsource?... he probado a utilizar a la desesperada las siguientes posibilidades, en el evento "formClosing":

            frm_Principal.EquiposDataGridView.Refresh()
            frm_Principal.EquiposDataGridView.RefreshEdit()
            frm_Principal.Refresh()
            frm_Principal.Panel2.Refresh()
            frm_Principal.EquiposTableAdapter.Update(Datos)
            frm_Principal.EquiposDataGridView.Update()
            frm_Principal.Update()

    (Equipos es la tabla que quiero actualizar, frm_Principal es el el formulario de inicio en el que quiero que se actualicen los datos nuevos insertados en otro formulario frm_Equipos... en el momento en que tuviera los datos actualizados en el formulario principal creo que sí sabría enlazarlo bien al combobox

    Perdona mi ignorancia y gracias de nuevo

    Jose

    miércoles, 20 de julio de 2011 16:54
  • claro el tema es que necesitas dew la instancia del formulario para poder realizar la accion

    usando el nombre del formulario como haces alli no funciona, es por eso que veras en el ejemplo que se pasa el valor en el Show() pasando la instancia del form padre al hijo para que este pueda invocarlo

    sino otra forma de actualziar el padre es detectando el cierre del form hijo

    como se describe aqui

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/508c6966-7a76-4415-810d-74c6af86134a

    o sea en el form padre pondrias

    Private Sub cmdAbrirForm2_Click(sender As Object, e As EventArgs)
       
        Dim form As New Form2()

        AddHandler form.FormClosing, AddressOf form_Closing
        form.Show()
       
    End Sub



    Private Sub form_Closing(..)

       ' aqui es donde recargas el control pero estando en el form principal
    End Sub

    como veras desde el form padre (principal) detectas el cierre del form hijo para realziar la accion de refresh

    pero como esta en el propio form accedes directo al bindingsource

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 22 de julio de 2011 4:30
  • Hola de nuevo, Leandro  

    Primero, darte de las gracias de nuevo por tomarte la molestia

    Mira, siguiendo tus instrucciones e intentando adaptarlas a mi aplicación, cosa que parece ser que no he conseguido, he incluido el siguiente código en el Frm_Principal:

     

    (el acceso al formulario lo hago a través de un submenú)

    Private Sub PruebaEquiposToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PruebaEquiposToolStripMenuItem.Click

            Dim form As New frm_Equipos

            AddHandler form.FormClosing, AddressOf form_Closing
            form.Show()

        End Sub

        Private Sub form_Closing()

            ' aqui es donde recargas el control pero estando en el form principal

            TableAdapterManager.UpdateAll(Me.Datos)
            EquiposDataGridView.Update()

            With Me.cbo_Equipo
                .DataSource = Me.EquiposBindingSource
                .DisplayMember = "NombreEquipo"
                .ValueMember = "IdEquipo"

            End With

        End Sub

     

     

    y en el evento Form_closing del formulario frm_Equipos (que supongo que será el hijo):

     

        Private Sub frm_Equipos_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

            EquiposDataGridView.Update()
            EquiposTableAdapter.Fill(Me.Datos.Equipos)


        End Sub

     

    Al compilar no da problemas, pero al ejecutar y cerrar el frm_Equipos no me acutualiza el datagridview. También comentarte que mi idea es no dejar ese datagridview como definitivo, sino que lo he incluido para confirmar visualmente que se actualiza... en realidad lo que quiero es que al cerrar el form Equipos, se actualize automáticamente el combobox con todos los equipos

     

    Un saludo y gracias de... me estás ayudando mucho

    Jose

    viernes, 22 de julio de 2011 10:16
  • un punto que noto es que en el metodo

    Private Sub form_Closing()

    has olvidado lo parametro del evento, el sender y el "e", deberia ser igual al

    Private Sub frm_Equipos_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)

     

    ahora bien en el frm_Equipos no deberas definir este evento, ya que la ides es que en la accion del boton del frm_Equipos realices la actualizacion y luego uses el Me.Close()

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 22 de julio de 2011 12:26
  • Buenas de nuevo, Leandro,

    Ya funciona perfectamente lo que quería... ahora solo me queda "digerir" y asimilar el código para que me sirva para otras aplicaciones.

    Si no es mucho abusar, quisiera preguntarte otra duda:

    Una de las tablas que he creado se llama "Fichas", debiendo almacenarse de alguna manera la imagen correspondiente. En la tabla "Fichas" he creado un campo llamado "ImagenFicha" de tipo "image" y en el formulario correspondiente un botón de búsqueda para seleccionar la imagen, funcionando bien al ejecutar la aplicación. Ahora bien, los problemas que tengo son los siguientes:

      - En la tabla "Fichas", quisiera grabar por defecto 6 registros de fichas (posteriomente el usuario podría incluir más), pero no sé cómo incluir la imagen en la vista "Mostrar datos de tabla"... las imágenes las seleccionaría de las disponibles en "Resources"

      - En el formulario principal, al seleccionar un equipo en el combobox que me has ayudado a resolver, quisiera que en un "PictureBox" se actualizara la imagen de la ficha correspondiente al equipo seleccionado (tengo una relación creada entre las tablas "Equipos" y "Fichas" de manera que un equipo tiene una ficha asignada)... he probado con una consulta, pero no las controlo lo suficiente en VisualStudio

    Gracias una vez más, ya solo por lo que me has ayudado

    Jose

    • Marcado como respuesta jmbegara sábado, 15 de octubre de 2011 21:54
    viernes, 22 de julio de 2011 15:27