Jump to content

Recommended Posts

Posted

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) 😛

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 😄

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

Alguém me pode ajudar

1 abraço. 😉

Posted

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) 😄

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 😄

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()

😛

Fikem Bem!!!Miguel Duarte - (SoulOnFire)O meu BLOG - XAML E WPF - http://wpfpt.wordpress.com/

Posted

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

"The Dark Side Clouds Everthing. Impossible To See The Future Is."My rig: Intel Core 2 Quad Q9450 | abit IP35P | 4G Kingston 800 Mhz | XFX GeForce 9800 GX2 1G ddr3 | 2X WD5000AAJS 500Gb Sata 2 | PSU 600W || Caixa El-Diablo | Creative XMod

Posted

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  😁

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;)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.