none
problemas con combobox anidados RRS feed

  • Pregunta

  • Hola, el problema que tengo es que cuando carga los combobox al inicio no hay problema, sino al primero combobox1 al seleccionar carga el el segundo combobox2 pero al misno tiempo el primero toman el valor del del segundo, y si selecciono el segundo combobox2 carga el tercero bombobox3 y el valor se carga en los anteriores.... ayudaaaa!! adjunto el codigo 

    Public Class frmPlanilla
        Dim conec As New coneccion


        Private Sub frmPlanilla_Load(sender As Object, e As EventArgs) Handles MyBase.Load

            Dim sql As String = "select tipo_planilla,nombre from tipo_planilla"
            conec.consultar(sql)

            Me.cbxTipoPlanilla.ValueMember = "tipo_planilla"
            Me.cbxTipoPlanilla.DisplayMember = "nombre"
            Me.cbxTipoPlanilla.DataSource = conec.ds.Tables(0)
        End Sub


        Private Sub cbxTipoPlanilla_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cbxTipoPlanilla.SelectionChangeCommitted

            Dim tipo As String
            tipo = cbxTipoPlanilla.SelectedValue.ToString
            Dim sql As String = "select clase_planilla ,nombre from clase_planilla where tipo_planilla='" + tipo + "'"
            conec.consultar(sql)

            Me.cbxClasePlanilla.ValueMember = "clase_planilla"
            Me.cbxClasePlanilla.DisplayMember = "nombre"
            Me.cbxClasePlanilla.DataSource = conec.ds.Tables(0)
        End Sub

        Private Sub cbxClasePlanilla_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cbxClasePlanilla.SelectionChangeCommitted

            Dim sql As String = "select mes_eje as id,nombre from mes WHERE mes_eje!='00' AND mes_eje!='13' AND mes_eje!='14'"
            Me.conec.consultar(sql)

            Me.CbxMes.ValueMember = "mes_eje"
            Me.CbxMes.DisplayMember = "nombre"
            Me.CbxMes.DataSource = conec.ds.Tables(0)
        End Sub

        Private Sub CbxMes_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles CbxMes.SelectionChangeCommitted

            Dim sql As String = "select correlativo_planilla from pers_titu_cab_monto2 group by correlativo_planilla WHERE tipo_planilla='02' AND clase_planilla='07' AND ano_proceso='2017' AND mes_proceso='05'"
            conec.consultar(sql)

            Me.cbxCorrelativo.ValueMember = "0000"
            Me.cbxCorrelativo.DisplayMember = "correlativo_planilla"

            Me.cbxCorrelativo.DataSource = conec.ds.Tables(0) 

    End Sub

    End Class

    • Cambiado Enrique M. Montejo jueves, 20 de julio de 2017 9:36 Pregunta relacionada con controles de Windows Forms.
    viernes, 14 de julio de 2017 21:53

Todas las respuestas

  • Hola 

    Revisa este link [WinForms] ComboBox Anidados

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    sábado, 15 de julio de 2017 0:43
  • Creo que tu problema pasa por que a de utilizar el mismo origen de datos para los controles  "ds.tables(0)". Esto lleva una reacción en cadena, dados que si cambias los datos al mismo origen esto de reflejaran de igual manera para todos los combos.


    Saludos desde Chile.


    sábado, 15 de julio de 2017 22:21
  • Hola:

     La funcion "conec.consultar(sql)" retorna un DataSet?, como es que esta estructurada la clase función "consultar", te comento que deberías de crear una función por cada filtro y que esta función reciba un parámetro de entrada (o los que requiera) este parámetro deberá de ser el valor seleccionado del control ComboBox anterio, por dentro la función deberá de contener la instrucción SQL a ejecutar y retornar una colección como resultado, en tu caso veo que estas usando DataTable, entonces cada consulta deberá de retornar un nuevo DataTable, un burdo ejemplo podría ser este:

        Public Function Filtro1(ByVal tipoPlanilla As Integer) As DataTable
    
            Dim dtPlanilla As New DataTable
            Dim sql As String
            sql = "SELECT clase_planilla ,nombre FROM clase_planilla WHERE tipo_planilla= @tipoPlanilla"
            'resto de codigo para ejecutar el SQL y llenar el DataTAble
    
            Return dtPlanilla
    
        End Function
    
        Public Function Filtro2(ByVal otroParametro As Integer) As DataTable
    
            Dim dt2 As New DataTable
            Dim sql As String
            'En esta consulta no veo ninguna parametro, pero veo que esta dentro del evento cbxClasePlanilla_SelectionChangeCommitted
            sql = "select mes_eje as id,nombre from mes WHERE mes_eje!='00' AND mes_eje!='13' AND mes_eje!='14'"
            'resto de codigo para ejecutar el SQL y llenar el DataTAble
    
            Return dt2
    
        End Function

    La idea es que actúes de esa forma, asignando una responsabilidad única a cada función.

     Nota: No todas las consultas tiene tienes filtros dinámicos revisa esas consultas ya que de lo contrario nunca van a filtrar según las selecciones de los anteriores controles.


    Saludos desde Monterrey, Nuevo León, México!!!



    lunes, 17 de julio de 2017 1:33