Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

johnhey

[Resolvido] Listbox?

Recommended Posts

Gostaria de ter um campo txt e conforme digitasse fosse listando abaixo os itens, como se fosse uma busca.

 

Exemplo se digitasse um Pais que comece com "P", listava todos os que estão cadastrado em minha base de dados.

Mas o listbox só aparece quando começar a digitar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta ai o problema, estou desde da 19 hrs a procura de codigos para pesquisa.

 

fiz da seguinte forma:

' Declaração de variáveis privadas
   Private da1 As SqlDataAdapter
   Private ds1 As DataSet
   Private totalrows1 As String

Private Sub txtnome_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtnome.TextChanged
       Listanome.Enabled = True
       'limpar a listagem
       Listanome.Items.Clear()

       ' Texto de ligação à base de dados
       Dim linha As String = Application.StartupPath & "\SIAF.mdf"
       Dim myConnectionString As String = _
      "Data source=.\SQLEXPRESS;AttachDbFilename=" & linha & ";Integrated Security=True;User Instance=True"

       ' Cria uma nova ligação à base de dados
       Dim connection As New SqlConnection(myConnectionString)

       ' Cria um novo SqlDataAdapter que servirá para actualizar o DataSet
       Dim SQL As String = "SELECT * FROM " & tabela
       da1 = New SqlDataAdapter(SQL, connection)

       ' Cria um DataSet, ou seja, uma representação em memória da informação
       ds1 = New DataSet

       ' Coloca a informação da tabela definida no DataSet
       da1.Fill(ds1, tabela)

       ' Limpa a ligação à base de dados. Não é necessário fechar a ligação
       ' porque esta não foi aberta através do comando .Open()
       connection = Nothing

       Do Until ds1.EOF = True  ' realiza a comparação até que seja verdadera
           ds1.Seek("=", "1001")   'faz a comparação quando o ponteiro parar

       Loop

   End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui adaptar um código que lista todos os dados dentro do listbox.

 

Agora precisava de mais uma coisa.

se for listado 20 itens o listbox tem o tamanho height fixo, se for menos ele diminuiu conforme a quantidade de registos listados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ListBox tem uma propriedade que define a altura de cada item, logo, a soma dessas alturas é o tamanho total dos itens colocados. O que você precisa fazer é igualar o Height com a soma das alturas de todos os itens.

 

Poste sua solução por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, consegui e deu certo, mas agora queria uma outra coisa.

se digitar um nome que ainda não estiver incluido no bd, o listbox não fica visivel.

 

meu código é o seguinte:

Dim contador As Integer 'Contador de registos
       contador = 0
       Listanome.Visible = True
       'Limpa o listbox
       Listanome.Items.Clear()
       ' Texto de ligação à base de dados
       Dim linha As String = Application.StartupPath & "\SIAF.mdf"
       Dim myConnectionString As String = _
      "Data source=.\SQLEXPRESS;AttachDbFilename=" & linha & ";Integrated Security=True;User Instance=True"

       Dim Con As SqlConnection = New SqlConnection(myConnectionString)
       Con.Open()
       Dim reader As SqlDataReader
       Dim cmd As New SqlCommand("SELECT Pais FROM TBPais WHERE Pais LIKE '%" & txtnome.Text & "%' ", Con)
       reader = cmd.ExecuteReader
       While reader.Read()
           Listanome.Items.Add(reader("Pais")) 'Adiciona a pesquisa ao listbox
           contador = contador + 1
           Dim tamanho As Integer = 17 * contador
           If txtnome.Text = "" Then
               Listanome.Visible = False
           Else
               If tamanho > "85" Then
                   Listanome.Height = "85"
               Else
                   Listanome.Height = tamanho
               End If
           End If
       End While
       'Fecha as conexões
       Con.Close()
       reader.Close()
       cmd.Dispose()

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, mas também quero que, quando digitar um nome que ainda não esteja em meu banco de dados também não tenha a listbox.

 

e o que esta é que se o text for vazio o listbox não aparece.

 

da mesma forma que coloquei o código abaixo, que acho que é para filtrar com as letras que digitei, tenho que colocar um a dizer que se não for encontrado nenhum registo o listbox será invisivel.

 

While reader.Read()
           Listanome.Items.Add(reader("Pais")) 'Adiciona a pesquisa ao listbox
           contador = contador + 1
           Dim tamanho As Integer = 17 * contador
           If txtnome.Text = "" Then
               Listanome.Visible = False
           Else
               If tamanho > "85" Then
                   Listanome.Height = "85"
               Else
                   Listanome.Height = tamanho
               End If
           End If
       End While

 

porque quando eu digito um nome que não se encontra ele não passa por dentro dessa rotina.

 

já agora aproveito para perguntar outra coisa, esse código faz a busca pela letra em todo o texto, se caso tenha a meio da palavra ele também aparece, e eu não queria assim, queria que de digitasse a letra "A" ele listava apenas países que começasse com A.

espero ter sido claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, quanto a sua primeira duvida, ao invés de usa o While direto, ponha uma instrução antes, englobe todo o código do while com um if:

 

if reader.read()

 

Porque se ele cair no else, é porque não há registros no banco.

 

Sobre a segunda duvida, use o like desta forma:

 

SELECT * FROM <tabela> WHERE <campo> LIKE '%<outrocampo>'

 

Ao invés do tradicional

 

SELECT * FROM <tabela> WHERE <campo> LIKE '%<outrocampo>%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz conforme disse, troquei while para if só que quando digito a letra P por exemplo ao invés de listar todos que comecem com P apenas lista 1.

 

e Desculpe mas não consigo ver as diferenças entre essas duas linhas, a não ser o simbolo de %, é somente isso?

 

Sobre a segunda duvida, use o like desta forma:

SELECT * FROM <tabela> WHERE <campo> LIKE '%<outrocampo>'

 

Ao invés do tradicional

SELECT * FROM <tabela> WHERE <campo> LIKE '%<outrocampo>%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe só depois entendi o que havia dito.

Englobei a linha de comando do while com o if, só que ele lista apenas um pais, agora com relação ao select ainda não deu certo, porque se retiro o simbolo da percentagem no fim dá um erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazer da seguinte forma e esta a funcionar.

Quero agradecer por toda ajuda.

Dim contador As Integer 'Contador de registos
       contador = 0
       Listanome.Visible = True
       'Limpa o listbox
       Listanome.Items.Clear()
       ' Texto de ligação à base de dados
       Dim linha As String = Application.StartupPath & "\SIAF.mdf"
       Dim myConnectionString As String = _
      "Data source=.\SQLEXPRESS;AttachDbFilename=" & linha & ";Integrated Security=True;User Instance=True"

       Dim Con As SqlConnection = New SqlConnection(myConnectionString)
       Con.Open()
       Dim reader As SqlDataReader
       Dim cmd As New SqlCommand("SELECT * FROM TBPais WHERE Pais  LIKE '" & txtnome.Text & "%' ", Con)
       reader = cmd.ExecuteReader
           While reader.Read()
               Listanome.Items.Add(reader("Pais")) 'Adiciona a pesquisa ao listbox
               contador = contador + 1
               Dim tamanho As Integer = 17 * contador
           If txtnome.Text = "" Then
               Listanome.Visible = False 'Coloca o listbox invisivel
           Else
               'Define o tamanho do lis
               If tamanho > "85" Then
                   Listanome.Height = "85"
               Else
                   Listanome.Height = tamanho
               End If
           End If
           End While
       'Fecha as conexões
       Con.Close()
       reader.Close()
       cmd.Dispose()
   End Sub

 

Mas falta ainda, quando digitar um nome que ainda não esteja em meu banco de dados o listbox fica invisivel.

E ao acabar de digitar um nome que esteja em meu banco de dados o listbox também fica invisivel.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como fazer a seguinte comparação?

If Listanome.Items.Item = "" Then
  Listanome.Visible = False
End If

como fazer a seguinte comparação?

 

 

ou tipo:

 

Se a listbox for vazia então

listbox nao será visivel

fim

 

qual o evento para verificar o conteúdo de dentro da listbox, exemplo nos textbox é textbox.text e nos listbox?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de ter um campo txt e conforme digitasse fosse listando abaixo os itens, como se fosse uma busca.

 

Exemplo se digitasse um Pais que comece com "P", listava todos os que estão cadastrado em minha base de dados.

Mas o listbox só aparece quando começar a digitar.

Você já tem alguma coisa pronta? Código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.