Ir para conteúdo

POWERED BY:

Arquivado

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

Dinhus

GridView

Recommended Posts

Boa Tarde.

Tenho 1 gridView que recebe os dados de um banco de dados logo que é chamada a pagina. Esse gridview possui 3 colunas: Nome.Sobrenome.Cidade.

Eu gostaria de fazer uma busca na coluna Sobrenome atraves de uma texto escrito em um textbox. A pessoa iria digitar, por exemplo, "Pe", daí listaria no GridView todos os registros que começa com a palavra "Pe". Mas não somente ela: a intenção era mudar a coluna sobrenome para trazer somente os registros da palavra "Pe" mas as outras colunas, Nome e Cidade, pudessem aparecer.

Estou usando um banco simples com poucos registro em Access.

Eu tenhu já as variaveis declaradas, como as de comando de conection e tudo mais. So não sei como fazer para listar um certo numero de registro nesse mesmo gridview atraves de um comando SQL.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite quintelab.

 

É o seguinte: eu joguei a clausula mas mesmo assim naum deu certo. Eu não consigo atualizar os dados do gridview.

A situacao é assim:

o banco de dados se refere a uma Tabela de musicas que possui as colunas "nome_musica" , "genero_musica"

tenhu um dropdownlist (ddlGeneroMusica) com 4 opcao: "..." , "Edited" , "Funk" , "Electro" .

ai coloquei o seguinte comando no botao do drop:

 

Try
            If ddlGeneroMusica.SelectedIndex = 0 Then 
                MsgBox("Você precisa Escolher um Gênero", MsgBoxStyle.Information, "Genero")

            ElseIf ddlGeneroMusica.SelectedIndex = 1 Then 

                gvMusicas.DataSourceID = ""
                gvMusicas.Dispose()
                gvMusicas.DataSource = [b]adsGeneroEdited[/b]
            ElseIf ddlGeneroMusica.SelectedIndex = 2 Then

                gvMusicas.DataSourceID = ""
                gvMusicas.Dispose()
                gvMusicas.DataSource = [b]adsGeneroFunk[/b]
            Else : ddlGeneroMusica.SelectedIndex = 3

                gvMusicas.DataSourceID = ""
                gvMusicas.Dispose()
                gvMusicas.DataSource = [b]adsGeneroElectro[/b]

            End If

        Catch ex As Exception
            MsgBox(ex)
        End Try

 

os ads são os AccessDataSource que possui, cada um, um Select para selecionar o genero da musica la no banco de dados no campo "genero_musica".

mesmo eu criando um ADS para cada Select, ele naum funciona.

Ai tentei usar select separado em textbox para testar:

 

Sub CarregaNome()
        Dim strProcura As String
        strProcura = txtProcura.Text
        Try

            conexao.Open()
            strSQLConsulta = "SELECT nome_musica, genero_musica  " _
            & "FROM musicas " _
            & "WHERE genero_musica LIKE '%" & Replace(strProcura, "'", "''") & "%' " _
            & "ORDER BY genero_musica;"
            cmd = New OleDbCommand(strSQLConsulta, conexao)
            cmd.ExecuteNonQuery()
            adap = New OleDbDataAdapter(cmd)
            ds = New DataSet
            adap.Fill(ds)
            gvMusicas.DataSource = adap
            gvMusicas.DataBind()

            conexao.Close()


        Catch ex As Exception
            MsgBox(ex)
        End Try



    End Sub

ai ele da um erro: O argumento 'Prompt' não pode ser convertido no tipo 'String'.

 

Ou seja: eu quero apenas fazer uma busca de genero no banco para trazer somente os dados referente àquele genero e não to conseguindo.

 

Espero respostas. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qual linha ocorre o erro?

Já testou esta query no banco:

"SELECT nome_musica, genero_musica FROM musicas WHERE genero_musica LIKE '%" & Replace(strProcura, "'", "''") & "%' ORDER BY genero_musica;"

??

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia quintelab.

 

Falando do primeiro bloco de codigo que te mandei:

 

Já sim. Eu criei um outro gridview que recebia essa instrução SQL e ele me trazia corretamente os dados do banco cujo genero tivesse o mesmo nome do Index do drop.

O meu problema é que não to conseguindo fazer com que o gvMusicas atualize sempre.

Quando eo carrego a pagina, o gvMusicas vem com o padrão: todas as musicas, todos os generos.

Quando eo vo la no drop e mudo a opcao e clico em bsucar, ele até muda pro genero selecionado.

Mas depois que mudou, ele não muda mais. Você trocar quantas vezes quiser a busca que o gvMusicas não muda mais os dados.

 

Falando do segundo bloco:

 

Eu consegui tratar aquele erro que estava dando ( O argumento 'Prompt' não pode ser convertido no tipo 'String'. )

O erro que dá, quando eu clico no botão Procurar do txtProcura, é o seguinte:

"O tipo da fonte de dados é invalido. Ele deve ser um IListSource, IEnumerable ou IDataSource"

 

Mesmo tratando o erro, não entendi o que quiz dizer com esse erro.

Qualquer dúvida, me avisa que mando de outra forma.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde.

Tenho 2 botões: o que procura via DROP e o que procura via TXT. O que tá dando erro é o do TXT que tem a seguinte linha de comando:

 

Protected Sub btnProcurar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnProcurar.Click

        CarregaNome()

        End Sub

Sub CarregaNome()

        Dim strProcura As String
        strProcura = txtProcura.Text
        Try

            conexao.Open()
            strSQLConsulta = "SELECT nome_musica, genero_musica  " _
            & "FROM musicas " _
            & "WHERE nome_musica LIKE '%" & Replace(strProcura, "'", "''") & "%' " _
            & "ORDER BY nome_musica;"
            cmd = New OleDbCommand(strSQLConsulta, conexao)
            cmd.ExecuteNonQuery()
            adap = New OleDbDataAdapter(cmd)
            ds = New DataSet
            adap.Fill(ds)
            gvMusicas.DataSource = adap
            conexao.Close()


        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

End Sub

O botão do DROP tem aquele comando que passei la em cima ( 1º código )

Só achei estranho o seguinte: porque que eu consigo carregar o gvMusicas com qualquer um daqueles ADS na primeira vez, tipo, se eu escolher no DROP o adsGeneroFunk, por exemplo, pela primera vez, ele muda e carrega no gvMusicas so as musicas referentes ao Funk do banco de dados. Mas ai tento mudar o genero e ele não muda mais =[

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

 

Bom, os códigos você já tem todos ai. Vou explicar como está dispostos os botões na aplicação:

 

Tenho uma guia chamada BUSCA AVANÇADA e nela:

 

tenho um txtProcura com um btnProcurar logo abaixo dele. Serve para que a pessoa possa buscar uma musica no banco de dados pelo nome da musica;

 

tenho um ddlGeneroMusica que possui 3 generos de musicas com um btnBuscar logo abaixo dele. Serve para que a pessoa possa buscar uma musica no banco de dados pelo genero da musica.

 

Tenho por fim, no meio da tela, um gridview chamado gvMusicas

 

Certo? Até ai creio que já entendeu a disposição dos controles.

 

Agora vamos aos erros:

 

quando eu coloco uma letra qualquer no txtProcura e clico no botão referente, o btnProcurar, ele dá o seguinte erro: "O tipo de dados da fonte é inválido. Ele deve ser um IListSource, IEnumerable ou IDataSource."

O código que está do btnProcurar é o seguinte:

 

 

Protected Sub btnProcurar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnProcurar.Click

        CarregaNome()

   End Sub

Sub CarregaNome()
        Dim strProcura As String
        strProcura = txtProcura.Text
        Try

            conexao.Open()
            strSQLConsulta = "SELECT nome_musica, genero_musica  " _
            & "FROM musicas " _
            & "WHERE nome_musica LIKE '%" & Replace(strProcura, "'", "''") & "%' " _
            & "ORDER BY nome_musica;"
            cmd = New OleDbCommand(strSQLConsulta, conexao)
            cmd.ExecuteNonQuery()
            adap = New OleDbDataAdapter(cmd)
            ds = New DataSet
            adap.Fill(ds)
            gvMusicas.DataSource = adap
            conexao.Close()


        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try


    End Sub

quando eu seleciono um genero do dropdownlist, ddlGeneroMusica, e clico pela primeira vez no btnBuscar, ele vai no banco, pega o genero referente ao escolhido no ddlGeneroMusica e exibe no gvMusicas. Até ai tudo bem. Ai se você for la no ddlGeneroMusica e escolher outro genero, o gvMusicas não troca mais de informação. Você pode escolher qualquer outro genero que ele não muda as informações que ele trouxe da primeira vez quando deu certo a busca no banco. Exemplo: cliquei no genero "FUNK". O gridview vai e traz todas as musicas do genero "FUNK". Ai depois voce quer escolher o genero "Electro". Você escolhe clica em buscar mais o gridview continua mostrando o genero "FUNK". Não importa qual genero eu escolha: ele só vai trazer certo a primeira escolha que eu fiz.

 

Pensando que poderia ser o accessdatasource, pq eu estava a usar um só para tudo, criei 3 accessdatasource. Um para cada genero com suas strings ja preparadas para a busca no banco. Mas mesmo eu colocando para o gridview mudar o datasource, ele não carrega certo, além da primeira vez. Segue abaixo o código que está no botão btnBuscar que é o btn do drop:

 

Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        Try
            If ddlGeneroMusica.SelectedIndex = 0 Then

                MsgBox("Você precisa Escolher um Gênero", MsgBoxStyle.Information, "Genero")

            ElseIf ddlGeneroMusica.SelectedIndex = 1 Then

                gvMusicas.DataSourceID = ""
                gvMusicas.Dispose()
                gvMusicas.DataSource = adsGeneroEdited

            ElseIf ddlGeneroMusica.SelectedIndex = 2 Then

                gvMusicas.DataSourceID = ""
                gvMusicas.Dispose()
                gvMusicas.DataSource = adsGeneroFunk

            Else : ddlGeneroMusica.SelectedIndex = 3

                gvMusicas.DataSourceID = ""
                gvMusicas.Dispose()
                gvMusicas.DataSource = adsGeneroElectro

            End If

        Catch ex As Exception
            MsgBox(ex)
        End Try
    End Sub

Cada ADS ali especificado, tem uma instrução de SQL já imbutido. Por exemplo:

o adsGeneroElectro está assim: SELECT [nome_musica], [genero_musica], [musica_rar] FROM [musicas] WHERE ([genero_musica] = "Electro").

A pagina já carrega com os accessdatasource fazendo a busca no banco. Tanto é que, dá primeira vez que mostra no gridview, ele funciona. O problema é que só consegue fazer certo a primeira busca, como informado acima.

O código ali so ta servindo para mudar o datasource do gvMusicas. Mais nada. E mesmo assim não vai.

 

Desculpa ficar enxendo suas paciencia. É qua ta complicado isso.

Espero que agora tenha ficado mais claro.

 

Qualquer problema, eu posto dinovo.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seus códigos não estão muito ok, vamos por partes.

O primeiro erro, troque seu código para este e teste:

 

Sub CarregaNome()
  Dim strProcura As String
  strProcura = txtProcura.Text
  Try
    strSQLConsulta = "SELECT nome_musica, genero_musica  " _
                   & "FROM musicas " _
                   & "WHERE nome_musica LIKE '%" & Replace(strProcura, "'", "''") & "%' " _
                   & "ORDER BY nome_musica;"

    conexao.Open() 'Levando em consideração que seu objeto conexao já exista e esta instanciado
    Dim ds As New DataSet
    adap = New OleDbDataAdapter(strSQLConsulta, conexao)
    adap.Fill(ds, "dados")
    adap.Dispose()
    conexao.Close()
    gvMusicas.DataSource = ds.Tables("dados").DefaultView  
    gv.DataBind()          
  Catch ex As Exception
    MsgBox(ex.ToString)
  End Try
End Sub

Teste e veja se deu certo, estou achando que pode ter erro na sua consulta sql tbm.

 

Abraços...

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.