diogoarsousa Posted September 30, 2009 at 01:16 PM Report Share #289314 Posted September 30, 2009 at 01:16 PM 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 More sharing options...
ribeiro55 Posted September 30, 2009 at 02:33 PM Report Share #289328 Posted September 30, 2009 at 02:33 PM 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 More sharing options...
diogoarsousa Posted September 30, 2009 at 03:28 PM Author Report Share #289339 Posted September 30, 2009 at 03:28 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now