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

mpix

[vb 2005] datareader + datagridview

4 mensagens neste tópico

Embora tenha aberto um tópico a uns dias atrás achei melhor abrir um novo para facilitar a pesquisa para muitos (porque estas duvidas não devem só ser minhas) :P

Na minha aplicação estou a fazer um Select a base de dados e devolvo os dados para um DataReader (pelo que li é mais rápido e poupo recursos)  porque quero apenas mostrar os dados numa DataGridView.

Para filtrar os dados para a datagridview vou ter uma  combobox com duas hipóteses para pesquisa (nome, BI) , uma textBox (para meter o texto de pesquisa) e um botao de pesquisa.


Public Class Aluno

    ' Declaração
    Private cnn As New SqlConnection
    Private cmd As New SqlCommand
    Private strSQL As String

    Private Sub btnPesquisar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPesquisar.Click


        Try
            strSQL = "SELECT * FROM Alunos"
            cnn = New SqlConnection(My.Settings.AlunoConnectionString)
            cnn.Open()

            cmd = New SqlCommand(strSQL, cnn)

            ' cria um DataReader com o nome de sdr
            Dim sdr As SqlDataReader = cmd.ExecuteReader

            cmd.CommandType = CommandType.Text
            cmd.Connection = cnn

            Dim intCol As Integer

            With sdr
                'se há linhas no datareader então executa o código

                If .HasRows Then

                    DataGridView1.Rows.Clear()

                    For intCol = 1 To .FieldCount - 1
                        'Inclui uma definição para a coluna: CampoNome, e ColunaNome
                        DataGridView1.Columns.Add(.GetName(intCol), .GetName(intCol))
                    Next

                    'Define a largura da coluna com base na largura do cabeçalho
                    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader

                    'percorre o datareader enquanto houver dados
                    While .Read

                        'Obtem os dados como num objeto array
                        Dim objCelulas(intCol) As Object

                        .GetValues(objCelulas)

                        'Inclui uma linha de cada vez no datagridview
                        DataGridView1.Rows.Add(objCelulas)

                    End While
                End If

                ' fecha a conexão do datareader
                .Close()
            End With


        Catch ex As Exception

            MsgBox(ex.Message)

        Finally
            If Not IsNothing(cnn) Then
                cnn.Close()
            End If

        End Try

    End Sub

O meu problema é que cada vez que clico no botão pesquisar não me esta a limpar a DataGridView e fico com colunas repetidas :D

DataGridView1.Rows.Clear() não está a resultar

Alguém me pode ajudar

1 abraço. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Embora tenha aberto um tópico a uns dias atrás achei melhor abrir um novo para facilitar a pesquisa para muitos (porque estas duvidas não devem só ser minhas) :D

Na minha aplicação estou a fazer um Select a base de dados e devolvo os dados para um DataReader (pelo que li é mais rápido e poupo recursos)  porque quero apenas mostrar os dados numa DataGridView.

Para filtrar os dados para a datagridview vou ter uma  combobox com duas hipóteses para pesquisa (nome, BI) , uma textBox (para meter o texto de pesquisa) e um botao de pesquisa.


Public Class Aluno

    ' Declaração
    Private cnn As New SqlConnection
    Private cmd As New SqlCommand
    Private strSQL As String

    Private Sub btnPesquisar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPesquisar.Click


        Try
            strSQL = "SELECT * FROM Alunos"
            cnn = New SqlConnection(My.Settings.AlunoConnectionString)
            cnn.Open()

            cmd = New SqlCommand(strSQL, cnn)

            ' cria um DataReader com o nome de sdr
            Dim sdr As SqlDataReader = cmd.ExecuteReader

            cmd.CommandType = CommandType.Text
            cmd.Connection = cnn

            Dim intCol As Integer

            With sdr
                'se há linhas no datareader então executa o código

                If .HasRows Then

                    DataGridView1.Rows.Clear()

                    For intCol = 1 To .FieldCount - 1
                        'Inclui uma definição para a coluna: CampoNome, e ColunaNome
                        DataGridView1.Columns.Add(.GetName(intCol), .GetName(intCol))
                    Next

                    'Define a largura da coluna com base na largura do cabeçalho
                    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader

                    'percorre o datareader enquanto houver dados
                    While .Read

                        'Obtem os dados como num objeto array
                        Dim objCelulas(intCol) As Object

                        .GetValues(objCelulas)

                        'Inclui uma linha de cada vez no datagridview
                        DataGridView1.Rows.Add(objCelulas)

                    End While
                End If

                ' fecha a conexão do datareader
                .Close()
            End With


        Catch ex As Exception

            MsgBox(ex.Message)

        Finally
            If Not IsNothing(cnn) Then
                cnn.Close()
            End If

        End Try

    End Sub

O meu problema é que cada vez que clico no botão pesquisar não me esta a limpar a DataGridView e fico com colunas repetidas :D

DataGridView1.Rows.Clear() não está a resultar

Alguém me pode ajudar

1 abraço. ;)

Pois n admira que fiques com colunas repetidas visto que de cada vez estas a adicionar mais colunas

para alem de datagridview.rows.clear() tens k usar o datagridview.columns.clear()

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Experimenta assim ver se funciona

Public Class Aluno

    ' Declaração
    Private cnn As New SqlConnection
    Private cmd As New SqlCommand
    Private strSQL As String

    Private Sub btnPesquisar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPesquisar.Click


        Try
            strSQL = "SELECT * FROM Alunos"
            cnn = New SqlConnection(My.Settings.AlunoConnectionString)
            cnn.Open()

            cmd = New SqlCommand()

            ' cria um DataReader com o nome de sdr
           
           cmd.Connection = cnn
            cmd.CommandType = CommandType.Text
            cmd.CommandText = strSQL
            
            Dim sdr As SqlDataReader = cmd.ExecuteReader
            Dim intCol As Integer

            With sdr
                'se há linhas no datareader então executa o código

                If .HasRows Then

                    DataGridView1.Rows.Clear()

                    For intCol = 1 To .FieldCount - 1
                        'Inclui uma definição para a coluna: CampoNome, e ColunaNome
                        DataGridView1.Columns.Add(.GetName(intCol), .GetName(intCol))
                    Next

                    'Define a largura da coluna com base na largura do cabeçalho
                    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader

                    'percorre o datareader enquanto houver dados
                    While .Read

                        'Obtem os dados como num objeto array
                        Dim objCelulas(intCol) As Object

                        .GetValues(objCelulas)

                        'Inclui uma linha de cada vez no datagridview
                        DataGridView1.Rows.Add(objCelulas)

                    End While
                End If

                ' fecha a conexão do datareader
                .Close()
            End With


        Catch ex As Exception

            MsgBox(ex.Message)

        Finally
            If Not IsNothing(cnn) Then
                cnn.Close()
            End If

        End Try

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois n admira que fiques com colunas repetidas visto que de cada vez estas a adicionar mais colunas

para alem de datagridview.rows.clear() tens que usar o datagridview.columns.clear()

;)

É mesmo isso  :cheesygrin:

Boas

Experimenta assim ver se funciona

Mudaste mais alguma coisa tirando a linha?

Dim sdr As SqlDataReader = cmd.ExecuteReader

Já agora Qual a melhor maneira de mudar o nome das colunas?

Eu fiz assim?


                                DataGridView1.Columns.Add(.GetName(0), "Numero Aluno")

                                DataGridView1.Columns.Add(.GetName(1), "Curso")

                                DataGridView1.Columns.Add(.GetName(2), "Nome ")

                                DataGridView1.Columns.Add(.GetName(3), "Morada")


1 abraço;)

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