Search code examples
sharepoint-2010

Pagination not working in SPGridView in Visual Web Part


Paging is not working when I click on pages. Nothing displays. Here is the code,

Markup on my ascx form,

<div class="mGrid">
<SharePoint:SPGridView
  runat="server"
  ID="gdSharedReport"
  AutoGenerateColumns="false" 
  CssClass="mGrid"
  AllowPaging="true"
  PagerStyle-CssClass="pgr"
  AlternatingRowStyle-CssClass="alt"
  EmptyDataText="No Survey found."
  OnSorting="gdSharedReport_Sorting"
  OnPageIndexChanging="gdSharedReport_PageIndexChanging"
/>
</div>

Code on my ascx.cs,

      public DataView dv;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
               GenerateGrid();
            }

        }
       private DataTable BindData()
      {
        DataTable table;

        table = new DataTable();

        table.Columns.Add("SurveySet", typeof(string));
        table.Columns.Add("SurveySection", typeof(string));
        table.Columns.Add("SurveyQuestion", typeof(string));
        table.Columns.Add("Employee", typeof(string));
        table.Columns.Add("Supervisor", typeof(string));
        table.Columns.Add("EmployeeNumber", typeof(string));
        table.Columns.Add("SurveyDate", typeof(string));

        DataRow row;

        try
        {
           SPListItemCollection collListItems = list.GetItems(oQuery);

           row = table.NewRow();
           //Logic here to set rows
           table.Rows.Add(row);
        }
        catch(Exception ex){}

        return table;
      }
      private void GenerateGrid()
    {
        DataTable dt = BindData();
        dv = new DataView(dt);
        gdSharedReport.DataSource = dv;

        gdSharedReport.AutoGenerateColumns = false;
        gdSharedReport.AllowSorting = true;
        gdSharedReport.Sorting += new GridViewSortEventHandler(gdSharedReport_Sorting);

        //Setting bound fields here


        gdSharedReport.PageSize = 10;
        gdSharedReport.AllowPaging = true;
        gdSharedReport.PageIndexChanging +=
            new GridViewPageEventHandler(gdSharedReport_PageIndexChanging);
        gdSharedReport.PagerTemplate = null; 


        if (ViewState["SortDirection"] != null && ViewState["SortExpression"] != null)
        {
            dv.Sort = ViewState["SortExpression"].ToString()
                + " " + ViewState["SortDirection"].ToString();
        }

        gdSharedReport.DataBind(); 

    }

    public void gdSharedReport_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gdSharedReport.PageIndex = e.NewPageIndex;
        gdSharedReport.DataBind();
    }

    public void gdSharedReport_Sorting(object sender, GridViewSortEventArgs e)
    {
        string lastExpression = "";
        if (ViewState["SortExpression"] != null)
            lastExpression = ViewState["SortExpression"].ToString();

        string lastDirection = "asc";
        if (ViewState["SortDirection"] != null)
            lastDirection = ViewState["SortDirection"].ToString();

        string newDirection = "asc";
        if (e.SortExpression == lastExpression)
            newDirection = (lastDirection == "asc") ? "desc" : "asc";

        ViewState["SortExpression"] = e.SortExpression;
        ViewState["SortDirection"] = newDirection;

        dv.Sort = e.SortExpression + " " + newDirection;
        gdSharedReport.DataBind();
    }

Here is how grid loads,

enter image description here

Here is what comes when I click to pages,

enter image description here

If I modify following function ,

public void gdSharedReport_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gdSharedReport.PageIndex = e.NewPageIndex;
           gdSharedReport.DataBind();

        }

To,

public void gdSharedReport_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gdSharedReport.PageIndex = e.NewPageIndex;
            gdSharedReport.DataSource = BindData();
            gdSharedReport.DataBind();

        }

Then pagination start working but paging number disappears if I click on paging ,

enter image description here


Solution

  • You need to again specify pagination in page index change event.

    public void gdSharedReport_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                gdSharedReport.PageIndex = e.NewPageIndex;
                gdSharedReport.AllowPaging = true;
                gdSharedReport.PageIndexChanging += new GridViewPageEventHandler(gdSharedReport_PageIndexChanging);
                gdSharedReport.PagerTemplate = null;
                gdSharedReport.DataSource = BindData();
                gdSharedReport.DataBind();
    
            }