Ir para conteúdo

POWERED BY:

Arquivado

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

sworlls

[Resolvido] Paginar GridView com datatable

Recommended Posts

Amigos,

 

Ja estou quebrando a cabeça a algum tempo. Sou iniciante ainda em ASP.net porem ja consegui progredir bastante em meu projetinho.

Bem, estou encalhado a alguns dias onde fiz um Bind no gridview mas preciso agora paginar ele, e os códigos que encontro no google não estou conseguindo adaptar em meu projeto.

 

Estou utilizando a linguagem VB ao invez de C#, se algume poder me ajudar nisso, ficarei muito agradecido.

Bem, so para deixar mais claro como esta o meu projeto vou tentar demonstrar abaixo.

 

Criei uma classe para conexão onde ao chamar a conexão passo a string de conexao assim como a instrução SQL e ele me retorna o datareader que eu carrego dentro de um dataset.

Em seguida faço o bind desse dataset no gridview o que me exibe tudo bonitinho, mas nao consigo paginar, e nem muito menos ordenar os items.

 

Dim VarTable as new datatable

Dim VarConn as new connection("Minha classe para conexão")

 

VarTable.Load(VarConn.Open("String de conexão", "Instrução SQL"))

GridView.DataSource = VarTable

GridView.DataBind()

 

Por favor, me ajudem porque ja to ficando louco com isso.

Abraços a todos e otimo dia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá sworlls,

 

Isso você já tem pronto no próprio GridView. ;)

Selecione o GridView e, na janela de propriedades, defina :

AllowSorting = True e AllowPaging = True

E dá uma lida nesse artigo aqui

 

Abraços,

 

 

Daniel Afonso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Daniel,

 

Esse processo aí eu ja conheço, o problema que encontro é quando tenho que fazer "bind" no gridview, então se bem entendo, quando se faz "bind" tem que tratar tanto o "organizar" quanto "paginar" do gridview. E não estou conseguindo nenhum dos dois.

 

Alguma ideia?

Abraços amigão.

 

 

Olá sworlls,

 

Isso você já tem pronto no próprio GridView. ;)

Selecione o GridView e, na janela de propriedades, defina :

AllowSorting = True e AllowPaging = True

E dá uma lida nesse artigo aqui

 

Abraços,

 

 

Daniel Afonso

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Quintelab, consegui paginar corretamente agora, fazendo o que me disse, chamando o método que alimenta o gridview, porem agora cai em outra situação.

Após mudar de pagina do gridview da 0 para a 1 por exemplo, e clicar em selecionar algum item para tentar ler, ele me retorna o seguinte erro:

 

"O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção. Nome do parâmetro: index"

 

Imagino que eu tenha que informar o index da paginação no momento de coletar a info, mas não estou conseguindo encontrar a propriedade para isso, pode me dar uma força nisso tambem?

Abraços amigo e obrigado pela luz que me deu no item anterior.

 

 

 

 

 

 

Só chamar o método DataBind novamente não irá funcionar, você deve chamar o método que alimenta sua grid novamente.

 

Abraços...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, veja o meu código.

 

-------------------------------------------------------------------------------------------------

Protected Sub GDview_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles GDView.SelectedIndexChanged
        Dim VarTable As New DataTable
        Dim VarConn as new Connection_class.connection
        Dim VarCodeBase As String
        Try
           VarCodeBase = GDView.SelectedRow.Cells.Item(0).Text
           VarTable.Load(VarConn.Open("String de conexão com o banco", "Instrução SQL"))
           If VarTable.Rows.Count <> 0 Then
                txtCode.Text = VarTable.Rows(0).Item(0).ToString
                txtDescription.Text = VarTable.Rows(0).Item(4).ToString
                txtName.Text = VarTable.Rows(0).Item(1).ToString
                txtSigla.Text = VarTable.Rows(0).Item(3).ToString
                lstEstate.SelectedValue = VarTable.Rows(0).Item(2)
            End If
            VarTable.EndLoadData()
            VarTable.Dispose()
        Catch
            LBLstatus.Text = ErrorToString()
        End Try
End sub
-------------------------------------------------------------------------------------------------

Bem, na primeira pagina consigo capturar as informações normalmente, mas se eu paginar, já não consigo capturar as informações da celula e com isso gera o erro de index que coloquei na resposta anterior.

Desculpe pela pergunta idiota, tenho certeza que a solução para isso é besta, mas infelizmente ainda sou novato nessa tecnologia.

Forte abraço e mais uma vez obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, segue o código para paginação.

Private Sub GDView_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GDView.PageIndexChanging
 Try
       GDView.PageIndex = e.NewPageIndex
       VarTable.Load(VarConn.Open("String de conexão com o banco", "Instrução SQL"))
       GDView.DataSource = VarTable
       GDView.Databind()
       VarTable.EndLoadData()
       VarTable.Dispose()
 Catch
       LBLstatus.Text = ErrorToString()
 End Try
End Sub

 

Percebi esse problema mesmo em outras paginas que criei com gridview com o objeto DataSource, ou seja, tambem não consigo capturar os valores das celulas depois de paginado.

Não poderia ser alguma propriedade do controle na pagina que eu esteja configurando de forma incorreta?

 

Abraços e obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quintelab,

 

Tem alguma ideia de como posso resolver isso? Será que não pode ser alguma propriedade do controle que eu não esteja configurando corretamente?

Abraços e obrigado pela ajuda.

 

 

 

Cara, segue o código para paginação.

Private Sub GDView_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GDView.PageIndexChanging
 Try
       GDView.PageIndex = e.NewPageIndex
       VarTable.Load(VarConn.Open("String de conexão com o banco", "Instrução SQL"))
       GDView.DataSource = VarTable
       GDView.Databind()
       VarTable.EndLoadData()
       VarTable.Dispose()
 Catch
       LBLstatus.Text = ErrorToString()
 End Try
End Sub

 

Percebi esse problema mesmo em outras paginas que criei com gridview com o objeto DataSource, ou seja, tambem não consigo capturar os valores das celulas depois de paginado.

Não poderia ser alguma propriedade do controle na pagina que eu esteja configurando de forma incorreta?

 

Abraços e obrigado mais uma vez.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos,

 

Descobri depois de muito quebrar a cabeça qual era o problema em minha aplicação.

Eu havia pego um código para capturar o click na linha da gridview e assim não utilizar o botão select. sendo assim, consegui ver que o código que peguei estava errado, como segue abaixo

 

Código Certo:

 

    Protected Overrides Sub Render(ByVal writer As  _
                      System.Web.UI.HtmlTextWriter)
       For Each row As GridViewRow In GridView1.Rows
           If row.RowType = DataControlRowType.DataRow Then
               row.Attributes("onmouseover") = _
                 "this.style.cursor='hand';this.style.textDecoration='underline';"
               row.Attributes("onmouseout") = _
                 "this.style.textDecoration='none';"

               ' Set the last parameter to True
               ' to register for event validation.
               row.Attributes("onclick") = _
              ClientScript.GetPostBackClientHyperlink(GridView1, _
                        "Select$" & row.RowIndex, True)
           End If
       Next
       MyBase.Render(writer)
   End Sub

 

Agora o Código errado:

 

 Protected Overrides Sub Render(ByVal writer As  _
                      System.Web.UI.HtmlTextWriter)
       For Each row As GridViewRow In GridView1.Rows
           If row.RowType = DataControlRowType.DataRow Then
               row.Attributes("onmouseover") = _
                 "this.style.cursor='hand';this.style.textDecoration='underline';"
               row.Attributes("onmouseout") = _
                 "this.style.textDecoration='none';"

               ' Set the last parameter to True
               ' to register for event validation.
               row.Attributes("onclick") = _
              ClientScript.GetPostBackClientHyperlink(GridView1, _
                        "Select$" & row.DataItemIndex, True)
           End If
       Next
       MyBase.Render(writer)
   End Sub

 

De qualquer forma agradeço a todos pela força que deram nesse problema.

Abraços a todos.

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.