Jump to content

Tenho um problema com o SelectedIndexChanged das Combobox


diogoarsousa

Recommended Posts

Bom dia,

VB.NET 2002

Tenho três ComboBox num formulário. Uma para Países, outra para Concelhos e outra para Freguesias.

Ao carregar o formulário o programa vai carregar a primeira ComboBox com alguns países que vai buscar a uma base de dados:

Call Preenche_Combo_Paises(Me.Combo_Paises)

Depois eu selecciono o País na ComboBox e o programa vai à base de dados e carrega a ComboBox dos Concelhos.

Call Preenche_Combo_Concelhos(Me.Combo_Paises, Me.Combo_Concelhos)

Depois selecciono o Concelho na ComboBox dos Concelhos e o programa vai à base de dados e carrega a ComboBox das Freguesias.

Call Preenche_Combo_Freguesias(Me.Combo_Concelhos, Me.Combo_Freguesias)

Os subprocedimentos estão num Módulo

O problema é que quando selecciono um país na combobox dos Países ele salta para aqui e dá-me erro. Não percebo Porquê. Alguém me pode ajudar?

nome_Conselhos = combo_Concelhos.SelectedItem.ToString()

no 

Public Sub Preenche_Combo_Freguesias(ByRef combo_Concelhos As Object, ByRef Combo_Freguesias As Object)

Não percebo Porquê. Alguém me pode ajudar?

Public Class frm_visualizacao_dados
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

#End Region

    '******************************************


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


        Me.Combo_Paises.Items.Clear()

        Call Preenche_Combo_Paises(Me.Combo_Paises)


    End Sub

    '******************************************


Private Sub Combo_Paises_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Combo_Paises.SelectedIndexChanged



        Combo_Concelhos.Items.Clear()
        Combo_ Concelhos.Items.Clear()


        Call Preenche_Combo_Concelhos(Me.Combo_Paises, Me.Combo_Concelhos)


    End Sub


    '******************************************


    Private Sub Combo_Concelhos_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Combo_Paises.SelectedIndexChanged


        Combo_Freguesias.Items.Clear()
        Combo_Freguesias.Enabled = True


        Call Preenche_Combo_Freguesias(Me.Combo_Concelhos, Me.Combo_Freguesias)


    End Sub


End Class



    '******************************************
    '******************************************
    '******************************************
    '******************************************
    '******************************************

‘’’’’’Módulo




Module Preenche_Combos


    Sub Preenche_Combo_Paises(ByRef combo_Paises As Object)


        rst = New ADODB.Recordset()

        Sqlstring = "SELECT * FROM Paises ORDER BY nome ASC"

        rst.Open(Sqlstring, "DSN=Conselhos_2006", ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)

        num_Paises = rst.RecordCount

        ReDim array_Paises(num_Paises - 1)

        Dim n As Long

        n = 0
        Do Until (rst.EOF)

            array_Paises(n).id = rst.Fields("ID").Value
            array_Paises(n).Nome = rst.Fields("Nome").Value

            combo_Paises.Items.Add(rst.Fields("Nome").Value)

            n = n + 1
            rst.MoveNext()
        Loop

        rst.Close()
        rst = Nothing


    End Sub


    '***************************************************


    Public Sub Preenche_Combo_Concelhos(ByRef combo_Paises As Object, ByRef combo_Concelhos As Object)


        int_Selected_Index = combo_Paises.SelectedIndex

        Dim nome_Paises As String
        nome_Paises = combo_Paises.SelectedItem.ToString()


        Dim id_Paises As Short


        For k = 0 To num_Paises - 1
            If array_Paises(k).Nome = combo_Paises.SelectedItem.ToString() Then
                id_Paises = array_Paises(k).id
            End If
        Next k



        rst = New ADODB.Recordset()

        Sqlstring = "SELECT * FROM Concelhos " & _
        "WHERE id_Paises = " & id_Paises.ToString() & _
        " ORDER BY nome ASC;"



        rst.Open(Sqlstring, "DSN=Conselhos_2006", ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)

        '********************

        Dim num_Conselhos As Long
        num_Conselhos = rst.RecordCount

        ReDim array_Conselhos(num_Conselhos - 1)

        Dim n As Long
        n = 0
        Do Until (rst.EOF)

            combo_Concelhos.Items.Add(rst.Fields("Nome").Value)

            array_Conselhos(n).id = rst.Fields("ID").Value
            array_Conselhos(n).Nome = rst.Fields("Nome").Value

            n = n + 1
            rst.MoveNext()

        Loop


        rst.Close()

        rst = Nothing


    End Sub


    '***************************************************


    Public Sub Preenche_Combo_Freguesias(ByRef combo_Concelhos As Object, ByRef Combo_Freguesias As Object)


        int_Selected_Index = combo_Concelhos.SelectedIndex


        Dim nome_Conselhos As String

        nome_Conselhos = combo_Concelhos.SelectedItem.ToString()



        rst = New ADODB.Recordset()

        Sqlstring = "SELECT * FROM Concelhos " & _
        "WHERE id_Conselhos = " & (int_Selected_Index + 1).ToString() & _
        " ORDER BY nome ASC;"

        Sqlstring = "SELECT * FROM leituras_dia " & _
             " WHERE ID_Concelhos = " & (int_Selected_Index + 1).ToString() & _
             " ORDER BY DATA ASC"

        rst.Open(Sqlstring, "DSN=Conselhos_2006", ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)



        Dim num_Conselhoss As Long
        num_Conselhoss = rst.RecordCount

        ReDim array_Conselhos(num_Conselhoss - 1)

        Dim n As Long
        n = 0
        Do Until (rst.EOF)

            Combo_Freguesias.Items.Add(rst.Fields("Nome").Value)

            array_Conselhos(n).id = rst.Fields("ID").Value
            array_Conselhos(n).Nome = rst.Fields("Nome").Value

            n = n + 1
            rst.MoveNext()

        Loop


        rst.Close()

        rst = Nothing


    End Sub


End Module
Link to comment
Share on other sites

Estás a ver o que um bocadinho de formatação faz ao teu post?

Nao se esqueçam que ao inserir codigo num post, devem seleccionar todo o bloco e escolher a linguagem na combobox no canto superior direito.

Desta forma melhoras significativamente a legibilidade do post.

Para além disto, dúvidas são neste sub-quadro e não no quadro principal de VB.NET. 🙂

Quanto ao teu problema, se estás a preencher as combos via datasource, deverás utilizar SelectedValue para apanhares a coluna valor do item seleccionado. Caso nao tenhas coluna valor, podes utilizar por exemplo Combobox.Text

Não posso exprimentar o teu código agora pois nao tenho acesso a uma IDE neste momento.

Faz uns Debug.Print, breakpoints ou watches aí por o meio para veres como os valores transitam.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Obrigado pelas dicas ribeiro55. Sou novato neste site e no VB.NET.

Mas já resolvi o problema.

Obrigado pela disponibilidade

Diogo

Estava a chamar duas subprocedures diferentes com Handles iguais:

Handles Combo_Paises.SelectedIndexChanged


Private Sub Combo_Paises_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Combo_Paises.SelectedIndexChanged

Private Sub Combo_Concelhos_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Combo_Paises.SelectedIndexChanged
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.