none
filtrar combobox con enlace a datos en sql server RRS feed

  • Pregunta

  • Tengo un windows forms que contiene dos combobox, el primero contiene zonas y el segundo oficinas, puedo filtrar los datos de los combobox sin ningún problema y puedo guardarlos en la BD. El asunto es que cuando guardo los datos, cierro el Windows forms y lo vuelvo a abrir me aparece una oficina distinta a la que guardé inicialmente, como podría corregir el problema? Saludos  

    
    viernes, 26 de agosto de 2016 21:31

Todas las respuestas

  • Alexander 07,

    ¿Guardas el valor del elemento seleccionado (propiedad SelectedValue) de cada desplegable? Si es así, ¿cómo cargas y cómo seleccionas los desplegables al cargar el formulario?

    Entiendo que primero debes de cargar el primer desplegable y seleccionar el elemento que obtienes de la base de datos, según el elemento seleccionado debes de cargar el segundo desplegable y seleccionar -de igual manera- el elemento que tienes almacenado en base de datos.

    Quizá sirva que compartas como cargas y seleccionas los desplegables al momento de cargar el formulario.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 26 de agosto de 2016 21:37
  • Alexander 07,

    ¿Guardas el valor del elemento seleccionado (propiedad SelectedValue) de cada desplegable? Si es así, ¿cómo cargas y cómo seleccionas los desplegables al cargar el formulario?

    Entiendo que primero debes de cargar el primer desplegable y seleccionar el elemento que obtienes de la base de datos, según el elemento seleccionado debes de cargar el segundo desplegable y seleccionar -de igual manera- el elemento que tienes almacenado en base de datos.

    Quizá sirva que compartas como cargas y seleccionas los desplegables al momento de cargar el formulario.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    Los datos los tengo cargados ya en tablas de la BD, para el combo Zonas seria de la siguiente manera:

    'se hace una consulta a la tabla zonas


           

    DimConsultaZonas AsString= "Select * from zonas"


           

    DimadpZonas AsNewSqlDataAdapter(ConsultaZonas, connFact)

            adpZonas.Fill(dstDatos,

    "zonas")

    cboZonas.DataSource = dstDatos

            cboZonas.DisplayMember =

    "zonas.nombre_zona"


            cboZonas.ValueMember =

    "zonas.cod_zona"

    para el combo oficinas seria igual ya que tengo los datos en la tabla de la BD.

    adicionalmente el combo Zonas invoca al método ver oficinas que éste contiene el código siguiente:

    Private

    SubverOficinas()

           

    IfbolPantallaCargada Then


                dstOficinas.Tables(strTableOficinas).Clear()

               

    DimstrZonaActual AsString= cboZonas.SelectedValue

               

    DimstrConsulta AsString= "SELECT * FROM "& strTableOficinas & " WHERE cod_zona = '"& _

                        strZonaActual.ToString &

    "'order by nombre_oficina"


               

    'Dim strConsulta As String = "SELECT * FROM " & strTableOficinas & " WHERE cod_zona = '" + strZonaActual.ToString & "'"


               

    Try


                    adpOficinas =

    NewSqlDataAdapter(strConsulta, connFact)

                    adpOficinas.Fill(dstOficinas,

    "oficinas")

               

    Catchex AsException


                   

    MessageBox.Show("Existe un error al accesar la base de datos"+ vbCrLf + "La pantalla no podrá ser cargada", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

                   

    Exit Sub


               

    EndTry


                cboOficina1.DataSource = dstOficinas

                cboOficina1.DisplayMember = strTableOficinas &

    ".nombre_oficina"


                cboOficina1.ValueMember = strTableOficinas &

    ".cod_oficina"


           

    EndIf

    viernes, 26 de agosto de 2016 21:46
  • Hola Alexander 07,

    Primero recomendarte que muestres el código dentro de las etiquetas code, para un mayor entendimiento y correcta indentación del código mostrado.

    [-] ... El asunto es que cuando guardo los datos, cierro el Windows forms y lo vuelvo a abrir me aparece una oficina distinta a la que guardé inicialmente, como podría corregir el problema?

    Pero ese funcionamiento es el correcto, tu método que carga el DataSource del comboBox se ejecuta en el evento Load del formulario ? Si es así, cada que vuelvas abrir el form los datos se cargarán al control.

    Si quieres que mostrar en el comboBox un item en particular, tienes que asignarlo al SelectedValue después de cargar las zonas al CB.

    -> La pregunta es, quieres que esté seleccionado en el combo la última zona registrada ? O qué condición debe cumplir?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 26 de agosto de 2016 22:27
  • Alexander 07,

    Atiende la sugerencia de postear código legible, sobre lo que muestras no voy a mencionar nada.

    El procedimiento es simple, sólo lo describiré, queda en ti codificar y si tienes algún problema lo comentas:

    1. Carga el desplegable cboZonas en el evento Load del formulario, te sugiero que implementes un método que te permita reutilización.
    2. La segunda instrucción -en el evento Load- será recuperar la zona guardada en base de datos. Con dicho valor lo único que queda es "setearlo" a la propiedad SelectedValue del objeto cboZonas { cboZonas.SelectedValue = idZona }
    3. La tercera instrucción -en el evento Load- será cargar el objeto cboOficinas filtrando por el elemento seleccionado del objeto cboZonas.
    4. La cuarta instrucción -en el evento Load- será recuperar la oficina guardada en base de datos. Con dicho valor lo único que queda es "setearlo" a la propiedad SelectedValue del objeto cboOficina: { cboOficina.SelectedValue = idOficina }

    Eso es todo, no hay nada complejo. Te recomiendo re-estructurar tu código según las indicaciones otorgadas y si tienes algún inconveniente puedes mencionarlo. 


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 26 de agosto de 2016 22:57
  • Fíjate en el siguiente esquema:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            CargarZonas()
    
            CboZonas.SelectedValue = idZona 'idZona contiene la zona almacenada en bd
    
            CargarOficinas(CboZonas.SelectedValue)
    
            CboOficinas.SelectedValue = idOficina 'idOficina contiene la oficina almacenada en bd
    
        End Sub

    El método CargarOficinas() lo reutilizaremos en el evento SelectionChangeCommit del desplegable CboOficinas, con ello evitamos el uso del evento SelectedIndexChanged. Incluso los métodos de carga podrían implementar un parámetro que permita recibir un valor para seleccionar un elemento, queda de ti la mejor opción de implementación.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 26 de agosto de 2016 23:06