vb.netgridviewdata-bindingpagination

.NET Gridview Paging shows different content on following pages


I have a GridView in a page with paging enabled (sorting not enabled, not used). OnRowDataBound and OnPageIndexChanged events are assigned.

<asp:GridView ShowHeader="False" ID="GV1" runat="server" AutoGenerateColumns="False" OnRowDataBound="gridView_RowDataBound" DataSourceID="SqlDataSource1" GridLines="None" CellPadding="0" PageSize="25" AllowPaging="True" OnPageIndexChanging="GV1_PageIndexChanging">

Datasource is assigned just below gridview as:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:my_connectionstring %>"></asp:SqlDataSource>

OnRowDataBound is used to display content in a formatted way. I don't think it causes any problem:

 Protected Sub gridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs).....

PageIndexChanging is defined as follows:

    Protected Sub GV1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs)
    GV1.PageIndex = e.NewPageIndex
    GV1.DataBind()
End Sub

In Page_Load Part here's how I populate datasource. It's from custom query constructed in string tempSqlStr:

SqlDataSource1.SelectCommand = tempSqlStr
If Not Page.IsPostBack Then
     GV1.DataBind()
End If

Everything seems to be working, I get results paged by 25 records, I can move through pages. But what I recognized is the content of pages are changing as I move between them. The amount of records do not change but I can see a record I saw on first page again in second, when I move back to first page and then again to second page content of second page changes and I see a different set of records.

I have printed tempSqlStr value to all pages, it is same on all pages (it is not in "not page.ispostback" part).

Can it be because I construct tempSqlStr in Page_Load section and GV1_PageIndex_Changing cannot see the value? If this is the case why following pages showing record?

Any comment is appreciated. Thank you.


Solution

  • The problem is most likely that you are not ordering the results returned and that is why. Execute your select statement 5 times and see if the results are the same and you will know if it is this. If it is then add an order by in your query. Let me know if this solved your problem otherwise we can look further...