【发布时间】:2011-05-11 10:02:40
【问题描述】:
我在启用了分页的页面中有一个 GridView(未启用排序,未使用)。分配了 OnRowDataBound 和 OnPageIndexChanged 事件。
<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">
数据源在 gridview 下方分配为:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:my_connectionstring %>"></asp:SqlDataSource>
OnRowDataBound 用于以格式化的方式显示内容。我认为这不会导致任何问题:
Protected Sub gridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs).....
PageIndexChanging 定义如下:
Protected Sub GV1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs)
GV1.PageIndex = e.NewPageIndex
GV1.DataBind()
End Sub
在 Page_Load 部分中,这是我填充数据源的方式。它来自在字符串 tempSqlStr 中构造的自定义查询:
SqlDataSource1.SelectCommand = tempSqlStr
If Not Page.IsPostBack Then
GV1.DataBind()
End If
似乎一切正常,我得到了按 25 条记录分页的结果,我可以在页面之间移动。但我认识到的是,当我在它们之间移动时,页面的内容正在发生变化。记录的数量没有改变,但我可以在第二页再次看到我在第一页看到的记录,当我移回第一页,然后再次回到第二页时,第二页的内容发生了变化,我看到了一组不同的记录。
我已将 tempSqlStr 值打印到所有页面,它在所有页面上都是相同的(它不在“not page.ispostback”部分)。
会不会是因为我在Page_Load部分构造了tempSqlStr,而GV1_PageIndex_Changing看不到值?如果是这样,为什么以下页面显示记录?
感谢任何评论。谢谢。
【问题讨论】:
-
问题很可能是您没有对返回的结果进行排序,这就是原因。执行你的select语句5次,看看结果是否一样,你就知道是不是这样了。如果是,则在您的查询中添加 order by。让我知道这是否解决了您的问题,否则我们可以进一步研究......
-
没错!非常感谢!实际上,我在查询中有 ORDER BY ,但最低顺序级别是日期类型,并且每次查询运行时,具有相同日期的记录似乎都以不同的顺序排序。我在 ORDER BY 子句中添加了表 ID,现在每次查询运行时它都会按结果给出相同的顺序。
标签: vb.net gridview paging data-binding