2011-03-30 54 views
1

我在我的項目中設置了GridView的AllowPaging = True。當我綁定它時,我知道我得到的行數超過100行,並且PageSize被設置爲50.但是我在底部看不到任何分頁控件(它是如何設置顯示的)。頁面控件在Gridview中不可見

<asp:GridView ID="GridView1" runat="server" BackColor="White" 
    BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
    GridLines="Vertical" OnRowDataBound="GridView1_RowDataBound" onselectedindexchanged="GridView1_SelectedIndexChanged" 
    AlternatingRowStyle-BackColor="#f0f1f3" AutoGenerateColumns="False" 
    AllowPaging="True" AllowSorting="True" PageSize="50" > 

我還沒有能夠通過搜索有什麼幫助。任何人有什麼想法可能會導致gridview不呈現分頁控件?

謝謝。

編輯:我想原因可能與從MSDN這樣的信息:

2.如果將GridView控件綁定到數據源控件,直接不 支持分頁功能 ,或如果GridView控件 通過DataSource屬性綁定到一個數據結構中的代碼 ,所述 GridView控件將通過獲取所有的數據記錄 從源,只顯示 記錄爲當前頁面執行尋呼 ,和 丟棄其餘的。只有當GridView控件的數據源返回實現接口(包括數據集)的ICollection 的集合 時,才支持 。

注意如果數據源不支持 直接支持分頁並且不支持 實現ICollection接口,那麼GridView控件不能分頁。對於 示例,如果您使用的是SqlDataSource控件,並且已將其 DataSourceMode屬性設置爲DataReader,則該GridView控件無法實現 分頁。

我將gridview綁定到linq查詢。

回答

1

請參閱本頁面:
http://www.dbtutorials.com/display/linq-to-sql-paging-cs.aspx

如果您使用的是ObjectDataSource控件,請參見本之一:
http://www.devtoolshed.com/content/gridview-objectdatasource-linq-paging-and-sorting

OR如果您在不使用數據源對象設置,您可以將LINQ查詢轉換爲數據表並綁定到該表;數據表確實支持分頁。有必要轉換LINQ查詢的數據表中的代碼頁是如下:
http://www.c-sharpcorner.com/UploadFile/VIMAL.LAKHERA/LINQResultsetToDatatable06242008042629AM/LINQResultsetToDatatable.aspx

如果你做的第二種方式,您將需要緩存的數據表,當你第一次從(SQL拉)服務器,除非每次用戶切換頁面時都要重新查詢服務器。您的GridView事件代碼如下:

編輯:我修復了下面的LoadData()方法。

private DataTable CachedDataTable 
{ 
    get 
    { 
     try 
     { 
      return (DataTable) Session["CachedDataTable"]; 
     } 
     catch 
     { 
      return null; 
     } 
    } 
    set 
    { 
     Session["CachedDataTable"] = value; 
    } 
} 

private void LoadData() 
{ 
    CachedDataTable = YourLinqQueryHere(); 
    gvGrid.DataSource = CachedDataTable; 
    gvGrid.DataBind(); 
} 

protected void gvGrid_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    gvGrid.PageIndex = e.NewPageIndex; 
} 

protected void gvGrid_PageIndexChanged(object sender, EventArgs e) 
{ 
    gvGrid.DataSource = CachedDataTable; 
    gvGrid.DataBind(); 
} 
+0

謝謝,賈斯汀。這看起來像很棒的信息。即將離開一段時間,所以我會回顧一下,當我回來和迴應。雖然欣賞快速反應! – nycdan 2011-03-31 00:12:54

+0

@nycdan,這是否有助於解決您的問題? – 2011-05-27 19:44:44