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

cmtavares

ComboBox e ListBox

Recommended Posts

cmtavares

Boas pessoal, neste momento estou com um pequeno problema que é o seguinte.

Estou a criar um pequeno aplicativo que tem como função envio de newsletter's, em que esse mesmo aplicativo da para criar/ editar/ e remover clientes. Existe um base de dados em sql e agora tenho a função de poder criar grupos de clientes, mas a minha duvida é:

Estou a mostrar numa comboBox todos os nomes dos grupos já existentes e queria que ao selecionar um desses grupos mostra'se os clientes que pertencem ao mesmo numa listbox.

Agradeço desde já a vossa ajuda!

Share this post


Link to post
Share on other sites
Leonardo Pereira

Mostra as tuas tabelas da base de dados, isso resolve-se com um filtro

Share this post


Link to post
Share on other sites
Nelson Sousa

Olá,

Carrega sua listbox no evento SelectionchangeCommited, ou no Validated da combobox.


Um Abraço,

Nelson Sousa

Share this post


Link to post
Share on other sites
cmtavares

Obrigada desde já a vossa ajuda!

eu já tenho algum código mas neste momento não está a a fazer o que pretendo!

    Dim connectionString As String = "Password=irpasimpo;Persist Security Info=True;User ID=SA;Initial Catalog=OEI;Data Source=CARLOS-M\SQL"
    Dim connection As New SqlConnection(connectionString)
    connection.Open()
    Dim command As String = "Select Nome from Grupos where ID_GRUPO'" & Me.ComboBox1.SelectedText & "' "

    Dim adpt As New SqlDataAdapter(command, connection)
    Dim myDataSet As New DataSet()
    adpt.Fill(myDataSet, "Nome")
    Dim myDataTable As DataTable = myDataSet.Tables(0)
    Dim tempRow As DataRow
    For Each tempRow In myDataTable.Rows
	    ListBox1.Items.Add((tempRow("Nome")))
    Next

Se conseguirem saber o que posso fazer agradeço imenso

Share this post


Link to post
Share on other sites
Leonardo Pereira

experimenta trocar esta linha

Dim command As String = "Select Nome from Grupos where ID_GRUPO'" & Me.ComboBox1.SelectedText & "' "

por esta

Dim command As String = "Select Nome from Grupos where ID_GRUPO'" & Me.ComboBox1.SelectedItem & "' "

Share this post


Link to post
Share on other sites
cmtavares

Boa tarde, já fiz essa troca e não dá a mesma! não mostra nada!

Acho que tem que ser mesmo a parir da selectText para poder fazer uma comparação de valores para depois conseguir obter o clientes respetivos daquele grupo.

Agora estou indeciso de será ou não isso

Share this post


Link to post
Share on other sites
Nelson Sousa

Olá,

Dim command As String = "Select Nome from Grupos where ID_GRUPO='" & Me.ComboBox1.SelectedText & "' "

Nos informe o evento onde está executando este código.


Um Abraço,

Nelson Sousa

Share this post


Link to post
Share on other sites
cmtavares

Boas, o evento onde esta a ser excutado e

 Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

Share this post


Link to post
Share on other sites
Nelson Sousa

Olá,

Mude para o evento VALIDATED ou para SELECTIonchangeCOMITTED.

Observe a mudança que fiz no código acima.


Um Abraço,

Nelson Sousa

Share this post


Link to post
Share on other sites
acao

boas

não será melhor indicar como são criados os grupos e como estão relacionados com os clientes.

cumps

acao

Share this post


Link to post
Share on other sites
cmtavares

boas

não será melhor indicar como são criados os grupos e como estão relacionados com os clientes.

cumps

acao

boas, como assim não estou a perceber !

Share this post


Link to post
Share on other sites
cmtavares

imagembgl.jpg

Boas está ai uma imagem do design do programa o objetico é ao seleccionar um cliente da comboBox na listbox a baixo que esta vazia, mostrar os clientes pertencentes a esse mesmo grupo selecionado.

   Private Sub ComboBox1_SelectedIndex(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    Dim connectionString As String = "Password=irpasimpo;Persist Security Info=True;User ID=SA;Initial Catalog=OEI;Data Source=CARLOS-M\SQL"
    Dim connection As New SqlConnection(connectionString)
    connection.Open()
    'Dim command As String = "Select Nome from Clientes where ID_GRUPO"
    'Dim variavel As String
    Dim command As String = "select Nome from Clientes where ID_GRUPO='" & Me.ComboBox1.SelectedItem & "' "
    MessageBox.Show(ComboBox1.SelectedItem)
    If ComboBox1.SelectedItem > "" Then
	    Dim adpt As New SqlDataAdapter(command, connection)
	    Dim myDataSet As New DataSet()
	    adpt.Fill(myDataSet, "ID_GRUPO")
	    Dim myDataTable As DataTable = myDataSet.Tables(0)
	    Dim tempRow As DataRow
	    For Each tempRow In myDataTable.Rows
		    ListBox1.Items.Add((tempRow("Nome")))
	    Next
    End If

   End Sub

Se me poderem ajudar agradeço

Edited by cmtavares

Share this post


Link to post
Share on other sites
acao

boas, como assim não estou a perceber !

era a estrutura da basedados referente à questão.

cumps

acao

Share this post


Link to post
Share on other sites
cmtavares

era a estrutura da basedados referente à questão.

cumps

acao

imageeetl.jpg

é isto que pretendes?

Share this post


Link to post
Share on other sites
Leonardo Pereira

Isto deve funcionar ;)

Dim connectionString As String = "Password=irpasimpo;Persist Security Info=True;User ID=SA;Initial Catalog=OEI;Data Source=CARLOS-M\SQL"
Dim connection As New SqlConnection(connectionString)
connection.Open()
Dim command As String = "SELECT Nome FROMClientes WHERE ID_GRUPO = (SELECT ID_GRUPO FROM Grupos WHERE Nome ='" & ComboBox1.SelectedItem & "') "
If ComboBox1.SelectedItem > "" Then
Dim Reader As SqlDataReader = command.executeReader()
If reader.HasRows Then
while Reader.Read()
ListBox1.Items.Add(reader.item("Nome"))
End While
End If
End If

Cumps

PS : SelectedText é diferente de SelectedItem ;) e qualquer dúvida avisa

Edited by Leonardo Pereira

Share this post


Link to post
Share on other sites
acao

boas

se no post anterior não deu!

tenta assim, não foi testado

Dim command As String = "SELECT Nome FROM Clientes WHERE ID_GRUPO = ("SELECT ID_GRUPO FROM Grupos Where Nome = '" & ComboBox1.SelectedText & "' ")"

verifica nomes de tabelas e campo, maiúsculas e minúsculas fazem diferenca,

cumps

acao

Edited by acao

Share this post


Link to post
Share on other sites
cmtavares

Isto deve funcionar ;)

Dim connectionString As String = "Password=irpasimpo;Persist Security Info=True;User ID=SA;Initial Catalog=OEI;Data Source=CARLOS-M\SQL"
Dim connection As New SqlConnection(connectionString)
connection.Open()
Dim command As String = "SELECT Nome FROMClientes WHERE ID_GRUPO = (SELECT ID_GRUPO FROM Grupos WHERE Nome ='" & ComboBox1.SelectedItem & "') "
If ComboBox1.SelectedItem > "" Then
Dim Reader As SqlDataReader = command.executeReader()
If reader.HasRows Then
while Reader.Read()
ListBox1.Items.Add(reader.item("Nome"))
End While
End If
End If

Cumps

PS : SelectedText é diferente de SelectedItem ;) e qualquer dúvida avisa

Dim connectionString As String = "Password=irpasimpo;Persist Security Info=True;User ID=SA;Initial Catalog=OEI;Data Source=CARLOS-M\SQL"
    Dim connection As New SqlConnection(connectionString)
    connection.Open()
    Dim command As String = "SELECT Nome FROMClientes WHERE ID_GRUPO = (SELECT ID_GRUPO FROM Grupos WHERE Nome ='" & ComboBox1.SelectedItem & "') "
    If ComboBox1.SelectedItem > "" Then
	    Dim Reader As SqlDataReader = command.executeReader()
	    If Reader.HasRows Then
		    While Reader.Read()
			    ListBox1.Items.Add(Reader.Item("Nome"))
		    End While
	    End If
    End If
   End Sub

Dim Reader As SqlDataReader = command.executeReader() -> esta linha diz-me que "executeReader is not member of string" ainda não percebi bem porque!

cump

Share this post


Link to post
Share on other sites
Leonardo Pereira

Dim connectionString As String = "Password=irpasimpo;Persist Security Info=True;User ID=SA;Initial Catalog=OEI;Data Source=CARLOS-M\SQL"
 Dim connection As New SqlConnection(connectionString)
 connection.Open()
 Dim command As String = "SELECT Nome FROMClientes WHERE ID_GRUPO = (SELECT ID_GRUPO FROM Grupos WHERE Nome ='" & ComboBox1.SelectedItem & "') "
 If ComboBox1.SelectedItem > "" Then
	 Dim Reader As SqlDataReader = command.executeReader()
	 If Reader.HasRows Then
		 While Reader.Read()
			 ListBox1.Items.Add(Reader.Item("Nome"))
		 End While
	 End If
 End If
End Sub

Dim Reader As SqlDataReader = command.executeReader() -> esta linha diz-me que "executeReader is not member of string" ainda não percebi bem porque!

cump

porque me esqueci de uma linha de código xD

a seguir a

 Dim command As String = "SELECT Nome FROMClientes WHERE ID_GRUPO = (SELECT ID_GRUPO FROM Grupos WHERE Nome ='" & ComboBox1.SelectedItem & "') "

coloca


Dim ExecuteComand = SqlCommand(command, connection)

e depois altereas a linha

Dim Reader As SqlDataReader = command.executeReader()

por esta

Dim Reader As SqlDataReader = ExecuteComand.executeReader()

assim já vai aceitar o ExecuteReader ;)

Edited by Leonardo Pereira

Share this post


Link to post
Share on other sites
cmtavares

porque me esqueci de uma linha de código xD

a seguir a

Dim command As String = "SELECT Nome FROMClientes WHERE ID_GRUPO = (SELECT ID_GRUPO FROM Grupos WHERE Nome ='" & ComboBox1.SelectedItem & "') "

coloca


Dim ExecuteComand = SqlCommand(command, connection)

e depois altereas a linha

Dim Reader As SqlDataReader = command.executeReader()

por esta

Dim Reader As SqlDataReader = ExecuteComand.executeReader()

assim já vai aceitar o ExecuteReader ;)

Obrigada finalmente já está a dar :)

Finalmente já está a fazer o que pretendo mas já agora só mais uma pequena dúvida.

seleciono um grupo e já aparece os clientes repetivos mas se selecionar novamente um grupo diferente os clientes do antigo grupo permanecem na listbox, isso e so fazer um clean a listbox?

Share this post


Link to post
Share on other sites
acao

boas

sim é só fazer um clear no inicio do procedimento.

imageeetl.jpg

é isto que pretendes?

a relação entre as tabelas penso que deveria ser entre os id grupos e não entre o email e .... mas está a funcionar optimo.

cumps

acao

Share this post


Link to post
Share on other sites
Leonardo Pereira

sim, no inicio de cada mudança ...

ou seja

Private Sub ComboBox1_SelectedIndex(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged[/background]
listbox1.items.clear()
....

;)

boas

sim é só fazer um clear no inicio do procedimento.

a relação entre as tabelas penso que deveria ser entre os id grupos e não entre o email e .... mas está a funcionar optimo.

cumps

acao

e é entre o IDGrupo xD no vb as ligações (retas) que unem as duas tabelas não são como no access que ficam junto aos campos relacionados ;)

aliás a query que fizeste e eu depois conferi mostra isso mesmo

Edited by Leonardo Pereira

Share this post


Link to post
Share on other sites
acao

boas

obrigado pela explicação, mas sendo assim podíamos ter usado a instrução Join.

mas está a funcionar tudo bem , resolvido.

cumps

acao

Share this post


Link to post
Share on other sites
Leonardo Pereira

boas

obrigado pela explicação, mas sendo assim podíamos ter usado a instrução Join.

mas está a funcionar tudo bem , resolvido.

cumps

acao

eu não me dou muito bem com o Join por isso é melhor assim xp

cumps

Share this post


Link to post
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

×

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.