Custom Paging for GridView in an UpdatePanel not firing PageIndexChanging event

Posted by JeffCren on Stack Overflow See other posts from Stack Overflow or by JeffCren
Published on 2010-03-17T03:14:12Z Indexed on 2010/03/17 3:21 UTC
Read the original article Hit count: 782

Filed under:
|
|
|

I have a GridView that uses custom paging inside an UpdatePanel (so that the paging and sorting of the gridview don't cause postback). The sorting works fine, but the paging doesn't. The PageIndexChanging event is never called.

This is the aspx code:

<asp:UpdatePanel runat="server" ID="upSearchResults" ChildrenAsTriggers="true" UpdateMode="Always">
        <ContentTemplate>
          <asp:GridView ID="gvSearchResults" runat="server" AllowSorting="true" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" OnDataBound="gvSearchResults_DataBound"
                OnRowDataBound ="gvSearchResults_RowDataBound" OnSorting="gvSearchResults_Sorting" OnPageIndexChanging="gvSearchResults_PageIndexChanging" Width="100%" EnableSortingAndPagingCallbacks="false">
            <Columns>
              <asp:TemplateField HeaderText="Select" HeaderStyle-HorizontalAlign="Center">
                <ItemTemplate>
                  <asp:HyperLink ID="lnkAdd" runat="server">Add</asp:HyperLink>
                  <asp:HiddenField ID="hfPersonId" runat="server" Value='<%# Eval("Id") %>'/>
                </ItemTemplate>
              </asp:TemplateField>
              <asp:BoundField HeaderText="First Name" DataField="FirstName" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" SortExpression="FirstName" />
              <asp:BoundField HeaderText="Last Name" DataField="LastName"  HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" SortExpression="LastName" />
              <asp:TemplateField HeaderText="Phone Number" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" >
                <ItemTemplate>
                  <asp:Label ID="lblPhone" runat="server" Text="" />
                </ItemTemplate>
              </asp:TemplateField>
            </Columns>
            <PagerTemplate>
              <table width="100%" class="pager">
                <tr>
                  <td>
                  </td>
                </tr>
              </table>
            </PagerTemplate>    
          </asp:GridView>
          <div class="btnContainer">
              <div class="btn btn-height_small btn-style_dominant">
                  <asp:LinkButton ID="lbtNewRecord" runat="server" OnClick="lbtNewRecord_Click"><span>Create New Record</span></asp:LinkButton>
              </div>
              <div class="btn btn-height_small btn-style_subtle">
                  <a onclick="openParticipantModal();"><span>Cancel</span></a>
              </div>
          </div>
        </ContentTemplate>
        <Triggers>
          <asp:AsyncPostBackTrigger ControlID="gvSearchResults" EventName="PageIndexChanging" />
          <asp:AsyncPostBackTrigger ControlID="gvSearchResults" EventName="Sorting" />
        </Triggers>
      </asp:UpdatePanel>

In the code behind I have a SetPaging method that is called on the GridView OnDataBound event:

private void SetPaging(GridView gv)
 {
   GridViewRow row = gv.BottomPagerRow;

   var place = row.Cells[0];

   var first = new LinkButton();
   first.CommandName = "Page";
   first.CommandArgument = "First";
   first.Text = "First";
   first.ToolTip = "First Page";

   if (place != null) place.Controls.Add(first);

   var lbl = new Label();
   lbl.Text = " ";
   if (place != null) place.Controls.Add(lbl);

   var prev = new LinkButton();
   prev.CommandName = "Page";
   prev.CommandArgument = "Prev";
   prev.Text = "Prev";
   prev.ToolTip = "Previous Page";

   if (place != null) place.Controls.Add(prev);

   var lbl2 = new Label();
   lbl2.Text = " ";
   if (place != null) place.Controls.Add(lbl2);

   for (int i = 1; i <= gv.PageCount; i++)
   {
     var btn = new LinkButton();
     btn.CommandName = "Page";
     btn.CommandArgument = i.ToString();

     if (i == gv.PageIndex + 1)
     {
       btn.BackColor = Color.Gray;
     }

     btn.Text = i.ToString();
     btn.ToolTip = "Page " + i.ToString();

     if (place != null) place.Controls.Add(btn);

     var lbl3 = new Label();
     lbl3.Text = " ";
     if (place != null) place.Controls.Add(lbl3);
   }

   var next = new LinkButton();
   next.CommandName = "Page";
   next.CommandArgument = "Next";
   next.Text = "Next";
   next.ToolTip = "Next Page";

   if (place != null) place.Controls.Add(next);

   var lbl4 = new Label();
   lbl4.Text = " ";
   if (place != null) place.Controls.Add(lbl4);

   var last = new LinkButton();
   last.CommandName = "Page";
   last.CommandArgument = "Last";
   last.Text = "Last";
   last.ToolTip = "Last Page";

   if (place != null) place.Controls.Add(last);

   var lbl5 = new Label();
   lbl5.Text = " ";
   if (place != null) place.Controls.Add(lbl5);
 }

The paging works if I don't use custom paging, but I really need to use the custom paging. I can't figure out why the PageIndexChanging event isn't fired when I'm using the custom paging.

Thanks,

Jeff

© Stack Overflow or respective owner

Related posts about ASP.NET

Related posts about c#