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

Furriel

[vb.net 2003] Depois de Carregar uma ListBox com Dados da BD passar para TextBox

9 mensagens neste tópico

Olá a todos,

Tenho uma ListBox que é carregada, sempre que o form é iniciado, a partir de uma base de dados SQL.

Depois da ListBox ter os dados eu quero seleccionar um e arrastá-lo para uma determinada TextBox.

O Problema:

------> Antes de carregar a ListBox a partir da BD, tinha os dados introduzidos manualmente a partir das propriedades e funcionava tudo direito.

O código que tenho associado é o seguinte:

    Private Sub lst_pratos_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lst_pratos.MouseDown
        Dim indexOfItem As Integer
        indexOfItem = Me.lst_pratos.IndexFromPoint(e.X, e.Y)
        If (indexOfItem >= 0) Then
            If (indexOfItem < Me.lst_pratos.Items.Count) Then
                'O Problema Estara na Linha Seguinte
                Me.lst_pratos.DoDragDrop(Me.lst_pratos.Items.Item(indexOfItem), DragDropEffects.All)
            End If
        End If
    End Sub

    Private Sub txt_2feira_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles txt_2feira.DragEnter
        If (e.Data.GetDataPresent(DataFormats.Text)) Then
            e.Effect = DragDropEffects.Move
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub

    Private Sub txt_2feira_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles txt_2feira.DragDrop
        Me.txt_2feira.Text = e.Data.GetData(DataFormats.StringFormat)
    End Sub

    Private Sub PratosListBinding()
        Me.lst_pratos.DataSource = PRATOS_LIST.Tables(0)
        Me.lst_pratos.ValueMember = "P_COD"
        Me.lst_pratos.DisplayMember = "P_DESCR"
    End Sub

    Function PRATOS_LIST() As DataSet
        Dim CONN As New SqlConnection(CONNSTR)
        Dim SP As New SqlDataAdapter("SELECT P_COD, P_DESCR FROM PRATO", CONN)
        Dim DS As New DataSet
        SP.Fill(DS)
        Return DS
    End Function

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tenho aqui o VS instalado pra testar isso, mas da-te algum erro ? o que é q n te funciona direito ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Tenho num form uma listBox com vários pratos e quero fazer um dodragdrop do prato seleccionado para um determinado dia.

Quero passar o nome que está na ListBox e para isso usei a seguinte linha:

Me.lst_pratos.DoDragDrop(Me.lst_pratos.Items.Item(indexOfItem), DragDropEffects.All)

Mas ao fazer isto, deveria dar, não me deixa fazer o drop e dá-me o seguinte erro se clicar numa linha senão a primeira:

semttulo1um5.jpg

Se por exemplo, em vez da linha de cima escrever a seguinte:

Me.lst_pratos.DoDragDrop(Me.lst_pratos.SelectedValue, DragDropEffects.All)

Já deixa fazer o Drop mas com o valor, como está na imagem em baixo, e não com o texto :P

semttuloxu6.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O erro fala por si mesmo. Verifica o valor o indexOfItem ...

O SelectedItems nao pode ser usado aí ... pq imagina, tu seleccionas o index 4, no selecteditems esse index vai corresponder ao 0, logo, vai-te dar erro a dizer q o index ta fora dos limites.

Experimenta usar o SelectedIndex.

Me.lst_pratos.DoDragDrop(Me.lst_pratos.SelectedIndex, DragDropEffects.All)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Estive a ver o que disseste e verifiquei que tanto o MsgBox (indexOfItem) = MsgBox(me.lst_pratos.SelectedIndex())

Por tanto em principio seria igual usar:

Me.lst_pratos.DoDragDrop(Me.lst_pratos.SelectedIndex, DragDropEffects.All)
e
Me.lst_pratos.DoDragDrop(Me.lst_pratos.SelectedItems.Item(indexOfItem), DragDropEffects.All)

Embora deixe de dar erro, não deixa fazer o drop nas textbox´s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas devolve-te o mesmo index em ambos os casos para todos os items ? Ou só experimentaste o primeiro ?

Como te disse... n tenho o VS 2005 pra testar ... formatei o portatil e ainda vou instalar isso ... mas logo q possa tento ver essa questão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de executar mandei imprimir numa MsgBox os dois resultados e o resultado foi o mesmo para qualquer um dos items.

Mas se fizer:

MsgBox(Me.lst_pratos.SelectedItems.Item(indexOfItem))

Já dá aquele erro de estar fora dos valores do array.

Edit:

Não estou a usar o vb2005 mas sim o vb.net2003, não sei se neste caso faz alguma diferença.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já está, não se foi da melhor maneira, mas funciona :D

    Private Sub lst_pratos_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lst_pratos.MouseDown
        Dim indexOfItem As Integer
        indexOfItem = Me.lst_pratos.IndexFromPoint(e.X, e.Y)
        If (indexOfItem >= 0) Then
            If (indexOfItem < Me.lst_pratos.Items.Count) Then
                Me.lst_pratos.DoDragDrop(Me.lst_pratos.SelectedValue, DragDropEffects.All)
            End If
        End If
    End Sub

    Private Sub PratosListBinding()
        Me.lst_pratos.DataSource = PRATOS_LIST.Tables(0)
        Me.lst_pratos.ValueMember = "P_DESCR"
        Me.lst_pratos.DisplayMember = "P_DESCR"
    End Sub

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