none
Problemas, Paginação não funciona no GridView.

    Pergunta

  • Há algum tempo venho tendo um problema com paginação em GridView, mesmo configurando corretamente permitindo a paginação, informando o PageSize e declarando o PageIndexChanging, minha paginação retorna o gridview sem dados. Estou fazendo DataBind no GridView dentro do PageIndexChanging, mas mesmo assim não funciona. Quando debugo o código tudo vai bem, o GridView é carregado, é mostrado a paginação, mas quando clico para exibir uma outra página, o GridView fica em branco e o mais estranho, o Debug não entra no códido do PageIndexChanging.

    estou usando Visual Studio 2008, LINQ, SQL, ASP.NET 3.5

     

    Meu GridView:

     

    <asp:GridView

    ID="gdvCurriculo"

    runat="server"

    AllowPaging="True"

    AutoGenerateColumns="False"

    onpageindexchanging="gdvCurriculo_PageIndexChanging"

    PageSize="3">

    <Columns>

    <asp:HyperLinkField

    DataNavigateUrlFields="Id_Estagiario"

    DataNavigateUrlFormatString="DetalhesEstagiario.aspx?id={0}"

    DataTextField="Nome"

    HeaderText="Nome" />

    <asp:HyperLinkField DataNavigateUrlFields="Id_Estagiario"

    DataNavigateUrlFormatString="DetalhesEstagiario.aspx?id={0}"

    DataTextField="Curso"

    HeaderText="Curso" />

    <asp:HyperLinkField

    DataNavigateUrlFields="Id_Estagiario"

    DataNavigateUrlFormatString="DetalhesEstagiario.aspx?id={0}"

    DataTextField="Faculdade"

    HeaderText="Faculdade" />

    <asp:HyperLinkField

    DataNavigateUrlFields="Id_Estagiario"

    DataNavigateUrlFormatString="DetalhesEstagiario.aspx?id={0}"

    DataTextField="Idioma"

    HeaderText="Idioma" />

    </Columns>

    </asp:GridView>

     

    O Código:

     

    using System;

    using System.Collections;

    using System.Configuration;

    using System.Data;

    using System.Linq;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.HtmlControls;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Linq;

     

    public partial class Consultas_Curriculo : System.Web.UI.Page

    {

    protected void Page_Load(object sender, EventArgs e)

    {

    }

     

    int vRecebe;

    string param;

    //Instanciando o DataContext

    Mod02DataContext db = new Mod02DataContext();

     

    protected void Button1_Click(object sender, EventArgs e)

    {

    vRecebe = ddlParameter.SelectedIndex;

    param = txtPalavraChave.Text;

     

    if (vRecebe == 1)

    {

    var q = db.ESP_ConsCurriculoPorNome(param);

    gdvCurriculo.DataSource = q;

    gdvCurriculo.DataBind();

    }

    else if (vRecebe == 2)

    {

    var q = db.ESP_ConsCurriculumPorFaculdade(param);

    gdvCurriculo.DataSource = q;

    gdvCurriculo.DataBind();

    }

    else if (vRecebe == 3)

    {

    var q = db.ESP_ConsCurriculumPorFaculdade(param);

    gdvCurriculo.DataSource = q;

    gdvCurriculo.DataBind();

    }

    }

     

    protected void gdvCurriculo_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

    gdvCurriculo.PageIndex = e.NewPageIndex;

    var q = db.ESP_ConsCurriculoPorNome(param);

    gdvCurriculo.DataSource = q;

    gdvCurriculo.DataBind();

    }

    }

     

    O Debug não retorna nenhum erro, e não entra no Método gdvCurriculo_PageIndexChanging.

     

    Gostaria muito de entender o que está acontecendo,

    Abraços,

     

    Marco Iung

     

    segunda-feira, 15 de setembro de 2008 19:45

Respostas

  • Amigos, descobri onde estava o problema.

     

    Na linha

    var q = db.ESP_ConsCurriculoPorNome(param);

     

    quando o método gdvCurriculo_PageIndexChanging é executado o parâmetro param está sendo passado sem valor. Fiz alguns testes passando alguns valores e aparentemente está funcionando.  Fiz uma gambiarra e gostaria de saber se é a melhor forma de persistir o dado.

     

    Declarei uma nova variavel dentro do método gdvCurriculo_PageIndexChanging e guardei o valor de txtPalavraChave.Text novamente e passei a nova variável no lugar do param. Ficou assim:

     

    protected void gdvCurriculo_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

    gdvCurriculo.PageIndex = e.NewPageIndex;

    string vParam = txtPalavraChave.Text;

    var q = db.ESP_ConsCurriculoPorNome(vParam );

    gdvCurriculo.DataSource = q;

    gdvCurriculo.DataBind();

    }

     

    Se uma outra forma, caso não esteja fazendo o correto, por favor me orientem.

     

    []s,

     

    Marco Iung

    segunda-feira, 15 de setembro de 2008 20:26