I'm trying to implement custom paging on a GridView but getting odd behaviour when the last page is being displayed. I thought it might be becuase I had implemented it manually by extending the 4.0 GridView control, but I've now tried using the 4.5 features as per http://www.c-sharpcorner.com/UploadFile/99bb20/custom-paging-with-gridview-control-in-Asp-Net-4-5/ but it is displaying exactly the same behaviour.
Basically if the item count of the last page is less than the PageSize then whenever the grid posts back it fills up with empty rows, as seen below:
Page markup:
<asp:GridView ID="gvTest" runat="server" PageSize="10" AllowPaging="true" AllowCustomPaging="true" AutoGenerateColumns="false" OnRowCommand="gvTest_RowCommand" OnPageIndexChanging="gvTest_PageIndexChanging">
<Columns>
<asp:BoundField DataField="ItemText" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnTest" runat="server" Text="Test postback" CommandName="TEST" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code-behind:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
BindData();
}
}
private void BindData() {
List<TestItem> items = new List<TestItem>() {
new TestItem() { ItemText = "Item1" },
new TestItem() { ItemText = "Item2" },
new TestItem() { ItemText = "Item3" },
new TestItem() { ItemText = "Item4" },
new TestItem() { ItemText = "Item5" },
new TestItem() { ItemText = "Item6" },
new TestItem() { ItemText = "Item7" },
new TestItem() { ItemText = "Item8" },
new TestItem() { ItemText = "Item9" },
new TestItem() { ItemText = "Item10" },
new TestItem() { ItemText = "Item11" },
new TestItem() { ItemText = "Item12" }
};
gvTest.DataSource = items.Skip(gvTest.PageIndex * gvTest.PageSize).Take(gvTest.PageSize).ToList();
gvTest.VirtualItemCount = items.Count;
gvTest.DataBind();
}
protected void gvTest_PageIndexChanging(object sender, GridViewPageEventArgs e) {
gvTest.PageIndex = e.NewPageIndex;
BindData();
}
All works as expected, but clicking on a linkbutton on the 2nd (last) page results in the following:
Before postback:

After postback:

Is this a known GridView issue? Not sure what I'm doing wrong....
Page 2: 
BindPagedData? - Tim Schmelter