• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

diogoarsousa

Tenho um problema com o SelectedIndexChanged das Combobox

3 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora