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

andr3kyo

Relacionar duas listbox

4 mensagens neste tópico

Boa tarde pessoal.

Estou com o seguinte problema:

Tenho duas tabelas (valencias e actividades), onde cada valencia pode ter varias actividades.

E quero interligar duas listbox com estas tabelas. Do tipo, uma listbox terá os registos das valencias e ao clicar em um registo, aparece na outra listbox as actividades pertencentes a esta valencia.

Tenho as seguintes funçoes que se encontram no Load do form:

    Private Sub lerdadosvalencias()
        Dim con2 As New SqlClient.SqlConnection
        Dim cmd2 As New SqlClient.SqlCommand
        Dim da As New SqlDataAdapter
        Dim ds As New DataSet

        Try
            con2.ConnectionString = ConnStr_gia

            cmd2.CommandText = "SELECT * FROM Valencias"
            cmd2.Connection = con2

            da.SelectCommand = cmd2
            da.Fill(ds)

            lstbox_valencias.DataSource = ds.Tables(0)
            lstbox_valencias.DisplayMember = "DescVal"
            lstbox_valencias.ValueMember = "ID_Val"
            lstbox_valencias.Refresh()

        Catch ex As Exception

        End Try

    End Sub

e

    Private Sub lerdadosactividades()
        Dim con As New SqlClient.SqlConnection

        Dim cmd As New SqlClient.SqlCommand
        Dim da As New SqlDataAdapter
        Dim ds As New DataSet

        Try
            con.ConnectionString = ConnStr_gia
            dgv_actividades.Columns.Clear()
            cmd.CommandText = "SELECT Actividades.ID_Actividade as ID_Registo, Valencias.DescVal as Valência, Actividades.DescAct as Actividade FROM Valencias INNER JOIN Actividades ON Valencias.ID_Val = Actividades.ID_Val "
            cmd.CommandText = cmd.CommandText & "WHERE Actividades.ID_Val = " & lstbox_valencias.SelectedValue & " ORDER BY Valencias.DescVal"
            cmd.Connection = con

            da.SelectCommand = cmd
            da.Fill(ds)

            ListBox1.DataSource = ds.Tables(0)
            ListBox1.DisplayMember = "Actividades.ID_Val"
            ListBox1.DisplayMember = "Actividades.DescAct"
            ListBox1.Refresh()

        Catch ex As Exception
            MsgBox("Erro!")
        End Try
    End Sub

Esta ultima função é que me está a dar problemas. Ao invés do nome das actividades pertencentes a cada valencia aparece: System.Data.DataRowView

Espero ter explicado de forma simples.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse problema não me é estranho de todo, penso q no forum já alguém teve um problema semelhante, experimenta fazer uma pesquisa aos topicos já existentes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta definir o DataSource depois do DisplayMember e ValueMember

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bruno1234, já estive a perder um bocado de tempo a procurar...e não encontrei nada.

jpaulino, assim fiz e aparece-me a mesma coisa.

Agora reparei que tinha um erro no código, ao invés de ter posto ValueMember voltei a meter DisplayMember, na listbox1. Mas já está corrigido. Mas mesmo assim deu-me outro erro...Nao abre o form que desejo e diz: "Não é possível criar uma lista subordinada para o campo Actividades."

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