2016-06-17 38 views
1

我有一個GridView控件使用數據表作爲數據源。我在控件上啓用了分頁,GridView顯示我指定的行數爲PageSize。但是,沒有分頁導航,所以我無法更改頁面。GridView不顯示分頁導航

問題:如何獲得分頁導航顯示?

GridView定義:

<asp:GridView runat="server" ID="gvResults" CssClass="report" DataKeyNames="LogId" AllowSorting="True" AllowPaging="True" PageSize="5" OnRowDataBound="gvResults_OnRowDataBound" OnPageIndexChanging="gvResults_OnPageIndexChanging"></asp:GridView> 

C#:

//...stuff that gets data from database 
DataTable dt = oDs.DataSet.Tables[0]; 
gvResults.DataSource = dt; 
gvResults.DataBind(); 

注:我在調試器,將數據表dt有超過100行

而且OnPageIndexChanging()事件驗證,基於在this question的答案,雖然它沒有在我的情況下工作(我不知道爲什麼這是必要的,因爲事件壽ldn't觸發,直到你試圖進入下一個頁面,這就需要分頁導航擺在首位,顯示右):

protected void gvResults_OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView gv = (GridView)sender; 
    DataView dv = gv.DataSource as DataView; 
    if (dv != null) 
    { 
     DataTable dt = dv.Table; 

     gv.DataSource = dt; 
    } 
    gv.PageIndex = e.NewPageIndex; 
    gv.DataBind(); 
} 

這是我所看到的: results

我期望看到某種方式來瀏覽結果。

我也嘗試添加PagerSettingsGridView,像這樣:

<asp:GridView runat="server" ID="gvResults" CssClass="report" DataKeyNames="LogId" AllowSorting="True" AllowPaging="True" PageSize="5" OnRowDataBound="gvResults_OnRowDataBound" OnPageIndexChanging="gvResults_OnPageIndexChanging"> 
    <PagerSettings Mode="NextPreviousFirstLast" FirstPageText="First" LastPageText="Last" NextPageText="Next" PreviousPageText="Previous" Position="Bottom"></PagerSettings> 
</asp:GridView> 

這裏呈現的HTML是什麼樣子的那最後一排。我在運行時修改了css來擴展行,所以很清楚這行是空的。沒有分頁控件被CSS隱藏。

html rendering

+1

檢查HTML渲染代碼,也許一些CSS是隱藏它 – Aristos

+0

@Aristos - 我已經更新了我的問題與呈現的HTML的屏幕截圖。行中沒有任何內容應該具有分頁控件。 –

回答

1

頭和咬牙切齒的多敲打之後,我終於想通了這一點。

我有另一個操作OnRowDataBound()的事件,它將特定的列格式化爲HTML,並且此轉換在頁腳行上操作時不會產生頁面控制。

解決方案是在轉換之前檢查綁定的行是否爲DataRow。

protected void gvResults_OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (!(sender is GridView) || e.Row.RowType != DataControlRowType.DataRow) return; 

    //do stuff 
} 

然後幸福接踵而至:

happiness