2011-05-11 111 views
0

我在頁面中啓用了分頁的GridView(排序未啓用,未使用)。 OnRowDataBound和OnPageIndexChanged事件被分配。.NET Gridview分頁顯示以下頁面上的不同內容

<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值打印到所有頁面,它在所有頁面上都是相同的(它不在「不是page.ispostback」部分中)。

難道是因爲我在Page_Load部分構造了tempSqlStr並且GV1_PageIndex_Changing看不到該值?如果這是爲什麼下面的頁面顯示記錄?

任何意見表示讚賞。謝謝。

+0

問題是最有可能的,你不訂購返回的結果,這就是爲什麼。執行你的select語句5次,看看結果是否相同,你會知道是否是這樣。如果是,則在您的查詢中添加一個訂單。讓我知道如果這解決了你的問題,否則我們可以看得更遠... – 2011-05-11 10:16:05

+0

正是!非常感謝!實際上,我在查詢中使用了ORDER BY,但最低的訂單級別是日期類型,似乎每次查詢運行時,具有相同日期的記錄都按不同順序排序。我將表ID添加到ORDER BY子句中,現在每次查詢運行時,結果都會按結果給出相同的順序。 – 2011-05-11 11:09:53

回答

0

問題很可能是您沒有訂購返回的結果,這就是爲什麼。執行你的select語句5次,看看結果是否相同,你會知道是否是這樣。如果是,則在您的查詢中添加一個訂單。讓我知道如果這解決了你的問題,否則我們可以看得更遠...